Sté*_*ent 2 statistics r microbenchmark
我一直以为cld输出中的那一栏microbenchmark是速度的统计排名。然而事实并非如此:
> microbenchmark(
+ intmap = fintmap(), # slower
+ List = flist(),
+ times = 5
+ )
Unit: microseconds
expr min lq mean median uq max neval cld
intmap 793.984 910.539 1145.8608 911.840 1290.529 1822.412 5 a
List 1.092 1.318 201.3712 1.639 3.660 999.147 5 b
Run Code Online (Sandbox Code Playgroud)
那么它是什么?该文件只说这是一个统计排名,但是什么?
或者也许这是速度的多重比较测试,但标准差的不等性会导致这样的问题?第二个基准显然存在异常值。
看来我的问题没有说清楚。a我知道字母和的含义b,这是报告 Tukey 测试的经典方法。但这里的结果并不一致:intmap速度较慢但排名第一。
这cld是从包装中取出的紧凑型字母显示器multcomp。
从该包中可以看出:“相同的字母表示没有显着差异。”
我目前无法确定它是要排名还是只是分类,即a通常要快于b还是只是不同?
中的代码microbenchmark::summary是:
ops <- options(warn=-1)
mdl <- lm(time ~ expr, object)
comp <- multcomp::glht(mdl, multcomp::mcp(expr = "Tukey"))
res$cld <- multcomp::cld(comp)$mcletters$monospacedLetters
Run Code Online (Sandbox Code Playgroud)
因此,从这一点来看,它似乎是lm()从原始时间(而不是平均值等)生成线性模型,然后glht()为所有对比较设置多重比较对象,然后使用cld().
编辑:测试排名:
a <- rnorm(1000)
a
microbenchmark(
alpha = mean(a),
beta = a/length(a) |> sum(),
gamma = sum(a) / length(a),
times = 10000,
unit = "nanoseconds"
)
Unit: nanoseconds
expr min lq mean median uq max neval cld
alpha 4700 5500 6325.56 5700 6800 37700 10000 a
beta 1700 2700 5307.55 2900 3300 12419800 10000 a
gamma 900 1100 1240.32 1100 1300 24000 10000 b
microbenchmark(
gamma = sum(a) / length(a),
alpha = mean(a),
beta = a/length(a) |> sum(),
times = 10000,
unit = "nanoseconds"
Unit: nanoseconds
expr min lq mean median uq max neval cld
gamma 900 1100 1214.29 1100 1200 23700 10000 a
alpha 4900 5500 6039.82 5700 6200 71900 10000 b
beta 1700 2500 5459.20 3000 3200 12272900 10000 b
)
Run Code Online (Sandbox Code Playgroud)
这似乎表明,正如所怀疑的,表中条目的顺序按照提供的方式列出microbenchmark(),并且 cld 是根据此顺序而不是总体速度排名按顺序分配的。
编辑2:玩弄排序
d <- microbenchmark(
alpha = mean(a),
beta = a/length(a) |> sum(),
gamma = sum(a + a - a) / length(a),
times = 10000,
unit = "nanoseconds"
)
print(d, order = "cld")
Unit: nanoseconds
expr min lq mean median uq max neval cld
beta 1700 1900 2386.04 2000 2300 53400 10000 b
alpha 5000 5500 6219.35 5700 6400 72700 10000 a
gamma 1900 2200 4378.53 2400 2600 8532200 10000 ab
Run Code Online (Sandbox Code Playgroud)
在我看来,它按字母顺序对 cld 进行排序,就好像它是一组列一样,因此它按 a (顶部空白)然后按 b (同上)等排序......