要报告的有效位数

机器算法验证 标准差 错误 报告
2022-03-04 04:00:36

是否有更科学的方法来确定在相当标准的情况下报告平均值或置信区间的有效数字的数量 - 例如大学一年级课程。

我已经看到Number of Significant Figures to put in a table为什么我们不使用有效数字Number of Significant Figures in a chi square fit,但这些似乎并没有解决这个问题。

在我的课堂上,我试图向我的学生解释,当他们的结果中有如此广泛的标准误差时,报告 15 个有效数字是浪费墨水 - 我的直觉是它应该四舍五入到大约这与 ASTM 所说的没有太大区别- 报告测试结果指的是 E29,他们说它应该在之间。0.25σ0.05σ0.5σ

编辑:

当我有一组x如下数字时,我应该使用多少位来打印平均值和标准差?

set.seed(123)
x <- rnorm(30) # default mean=0, sd=1
# R defaults to 7 digits of precision options(digits=7)
mean(x) # -0.04710376 - not far off theoretical 0
sd(x) # 0.9810307 - not far from theoretical 1
sd(x)/sqrt(length(x)) # standard error of mean 0.1791109

问题:详细说明平均数和标准差的精度(当存在双精度数向量时),并编写一个简单的 R 教学函数,将平均数和标准差打印到有效位数反映在向量中x

3个回答

测量不确定度指南 (GUM) 建议以不超过 2 位数字报告不确定度,并以使其与不确定度一致所需的有效数字位数报告结果。见下文第 7.2.2 节

http://www.bipm.org/utils/common/documents/jcgm/JCGM_100_2008_E.pdf

以下代码是我尝试在 R 中实现此建议的尝试。Noe 表示 R 可能不配合在输出中保留尾随零的尝试,即使它们很重要。

gumr <- function(x.n,x.u) {
  z2 <- trunc(log10(x.u))+1
  z1 <- round(x.u/(10^z2),2)
  y1 <- round(x.n*10^(-z2),2)
  list(value=y1*10^z2,uncert=z1*10^z2)
}

x.val <- 8165.666
x.unc <- 338.9741
gumr(x.val,x.unc)

如果您显示置信区间以及统计量的值,那么给出尽可能多的有效数字是没有问题的,因为在这种情况下,大量有效数字并不意味着像置信区间给出的虚假精度可能的实际精度指示(可信的间隔会更好)。那么本质上就是使表格整洁、简洁和可读的问题,因此基本上不可能有一个适合所有场合的简单规则。

可复制性在科学研究中很重要,因此理想情况下,应该可以将结果复制到任意数量的重要数字(无论它们是否具有实际意义)。对少数有效数字进行四舍五入可能会降低重复研究的信心,因为结果的四舍五入可能会掩盖错误,因此在某些情况下四舍五入可能会带来不利影响。

另一个不要舍入太多的原因是,它可能使其他人无法在不实际重复的情况下扩展您的研究。例如,我可能会发表一篇论文,使用弗里德曼测试比较各种机器学习算法,这取决于不同算法在一组基准数据集上的排名。如果每个数据集上各个分类器的统计数据根据其标准误差赋予多个有效数字,这无疑会在排名中产生许多明显的联系。这意味着(i)论文的读者/审稿人将无法从论文中给出的结果中复制弗里德曼测试,并且(ii)其他人将无法在基准数据集上评估他们的算法并使用弗里德曼测试将其置于我研究结果的背景下。

当然,任何客观或主观的决定都将在很大程度上取决于您正在测量的内容以及您的测量仪器的精确度。后者只是观察到的变化的一部分,并不总是容易辨别或找到现有证据。因此,我强烈怀疑没有客观的、普遍适用的决定。您只需要使用您的大脑并在每种情况下做出最佳判断即可。