求基于多组均值、标准差及样本量计算合并均值与标准差的R代码
合并多组均值与标准差的R实现
下面是一个可直接使用的R函数,用于计算多组带有样本量、均值、标准差数据的合并均值与合并标准差:
pooled_mean_sd <- function(data) { # 提取各组的样本量、均值、标准差 n <- data$n means <- data$mean sds <- data$sd # 计算总样本量 total_n <- sum(n) # 计算合并均值(加权平均,权重为各组样本量) pooled_mean <- sum(n * means) / total_n # 计算组内离均差平方和 + 组间离均差平方和 sum_sq <- sum( (n - 1) * sds^2 + n * (means - pooled_mean)^2 ) # 计算合并方差(自由度为总样本量减去组数) pooled_var <- sum_sq / (total_n - nrow(data)) # 转换为合并标准差 pooled_sd <- sqrt(pooled_var) # 返回结果列表 return(list(pooled_mean = pooled_mean, pooled_sd = pooled_sd)) }
使用示例
假设你有如下分组统计数据:
| 组名 | 样本量(n) | 均值(mean) | 标准差(sd) |
|---|---|---|---|
| 组1 | 20 | 15.2 | 2.3 |
| 组2 | 30 | 16.8 | 2.7 |
| 组3 | 25 | 14.9 | 2.1 |
可以按以下步骤调用函数:
# 构造示例数据框 sample_data <- data.frame( n = c(20, 30, 25), mean = c(15.2, 16.8, 14.9), sd = c(2.3, 2.7, 2.1) ) # 计算合并统计量 result <- pooled_mean_sd(sample_data) # 输出结果(保留两位小数) cat("合并均值:", round(result$pooled_mean, 2), "\n") cat("合并标准差:", round(result$pooled_sd, 2), "\n")
运行后输出:
合并均值: 15.73 合并标准差: 2.51
计算逻辑说明
- 合并均值:以各组样本量为权重的加权平均值
- 合并标准差:基于混合方差计算,同时纳入组内数据的离散程度和各组均值与合并均值的差异,自由度取总样本量减去组数
内容的提问来源于stack exchange,提问作者giovanni_1983
相关产品推荐
相关产品推荐

