如何计算R中多个标准差的平均值?

How to calculate the average of multiple standard deviations in R?

当我有几个标准差时,我想弄清楚如何计算数据集的标准差。让我们看看这个 MWE:

set.seed(1234)
dummy_data <- data.frame(
  "col_1" = sample(1:7, size = 10, replace = TRUE),
  "col_2" = sample(1:7, size = 10, replace = TRUE),
  "col_3" = sample(1:7, size = 10, replace = TRUE),  
  "col_4" = sample(1:7, size = 10, replace = TRUE)
)

现在因为我知道所有数据点,所以我可以按如下方式计算总标准差:

> sd(as.matrix(dummy_data))
[1] 1.727604

但我手头的真实数据如下:

> dplyr::summarise_all(dummy_data, sd)
     col_1    col_2   col_3    col_4
1 1.837873 1.873796 1.37032 1.888562

如果我按照通常的方法计算具有相似样本量的多个标准差的平均值,我将应用以下内容:

sds <- dplyr::summarise_all(dummy_data, sd)
vars <- sds^2
mean_sd <- sqrt(sum(vars) / (length(vars) - 1))

> mean_sd
[1] 2.027588

这不一样!现在我试过没有负一:

> sqrt(sum(vars) / (length(vars)))
[1] 1.755942

这并不能解决问题。我试过像这样定义自己的标准差函数:

own_sd <- function(x) {
  sqrt(sum((x - mean(x))^2) / length(x))
}

去掉dplyr::summarise_all()步中的x - 1,然后按照上面的步骤进行平均:

> sqrt(sum(dplyr::summarise_all(dummy_data, own_sd)^2) / 3)
[1] 1.923538
> sqrt(sum(dplyr::summarise_all(dummy_data, own_sd)^2) / 4)
[1] 1.665833

但所有方法似乎都给出了与 sd(as.matrix()) 方法不同的结果。这里出了什么问题?

您无法仅通过了解组 SD 来计算全局 SD。例如:

x1 = 1:5
x2 = 11:15
x3 = 101:105

## all the SDs are equal
(sd1 = sd(x1))
#[1] 1.581139
(sd2 = sd(x2))
#[1] 1.581139
(sd3 = sd(x3))
#[1] 1.581139

## however, combining the groups in pairs give very different results
sd(c(x1, x2))
# [1] 5.477226

sd(c(x1, x3))
# [1] 52.72571

这表明即使样本量相同,知道两组的标准差也无助于计算这些组的标准差。

根据 Merijn van Tilborg 的评论,如果您知道组大小和组均值,则可以进行计算 as shown here