R语言 微基准测试中的cld列是什么意思?

5t7ly7z5  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(289)

我一直认为microbenchmark输出中的cld列是速度的统计排名。然而这不是真的:

> 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

那是什么呢?医生只说这是一个统计排名,但是什么排名呢?
或者也许这是一个速度的多重比较测试,但标准差的不平等会导致这样的问题?在第二个基准测试中显然有一个离群值。

编辑

看来,我的问题是不清楚.我知道字母ab的含义,这是经典的方式来报告一个Tukey测试.但结果是不连贯的在这里:intmap较慢,但排名第一。

hkmswyz6

hkmswyz61#

cld是从multcomp Package 中带来的紧凑型字母显示器。
从这个包:“相等的字母表示无显著差异.”
我目前不能确定的是,它是否意味着要排名或只是分类,即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

因此,它似乎是从原始时间(而不是平均值等)生成线性模型lm(),然后为所有对比较设置多重比较对象glht(),然后使用cld()将其减少到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
)

这似乎表明,正如所怀疑的那样,表中条目的顺序与提供给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

在我看来,它像是按字母顺序对cld排序,就好像它是一组列一样,所以它先按a(顶部的空白)排序,然后按b(同上)排序,等等...

egmofgnx

egmofgnx2#

压缩字母显示-它来自multcomp包,参见 multcomp::cld
GitHub microbenchmark print.R第15行

#' @note If the \code{multcomp} package is available a statistical
#' ranking is calculated and displayed in compact letter display from
#' in the \code{cld} column.

相关问题