试试这个
R> sd(c(2,4,4,4,5,5,7,9)) * sqrt(7/8)
[1] 2
R>
请参阅Wikipedia文章,了解关于标准差估计的讨论。使用手动计算的公式会导致有偏估计,因此需要进行校正(sqrt((N-1)/N))。这里是一个重要引用:
样本标准差用于未校正的估计量(使用N),而修正后的估计量使用样本数N-1,此时分母为残差向量中的自由度数量。
sd()
函数,只需要将其结果乘以 sqrt((N-1)/N)
,其中 N 是你的向量长度 -- 就像我的答案一样,但是计算 N
时是 8。 - Dirk Eddelbuettel看起来 R 在分母中假设的是 (n-1) 而不是 n。
var()
和sd()
中使用除数n-1,所以这将是样本方差。R使用这个除数的文档可以在?sd
中清楚地找到。 - Gavin Simpson当我想要计算总体方差或标准差时(以n作为分母),我定义了这两个向量化函数。
pop.var <- function(x) var(x) * (length(x)-1) / length(x)
pop.sd <- function(x) sqrt(pop.var(x))
顺便提一下,可汗学院在这里对于样本和总体标准差有很好的讨论。
?sd
在R Studio中,显示函数的帮助页面。在详细信息部分中,它说明:
与var类似,此函数使用分母n-1。
d <- c(2,4,4,4,5,5,7,9); n <- length(d); sd(d)*sqrt((n-1)/n);
- Travis Rodman