如何用R计算样本量递增时的累积方差
计算累积样本方差的R实现
你可以通过以下几种方式为数据框添加累积方差列,满足“每行记录当前及之前所有variable值的方差”的需求:
方法1:使用purrr包(简洁高效)
library(purrr) # 生成可复现的测试数据 set.seed(123) data <- data.frame(run = 1:10, variable = runif(10)) # 计算累积方差,第一行设为NA(单个值无方差) data$cum_var <- map_dbl(1:nrow(data), ~var(data$variable[1:.x])) data$cum_var[1] <- NA
方法2:Base R实现(无需额外包)
set.seed(123) data <- data.frame(run = 1:10, variable = runif(10)) # 循环计算每行的累积方差 data$cum_var <- sapply(1:nrow(data), function(i) { if (i == 1) NA else var(data$variable[1:i]) })
验证结果
运行上述代码后,数据框会新增cum_var列,结果如下:
print(data) # run variable cum_var # 1 1 0.28757752 NA # 2 2 0.78830514 0.12524084 # 3 3 0.40897692 0.06093114 # 4 4 0.88301740 0.06725104 # 5 5 0.94046728 0.07840874 # 6 6 0.04555650 0.15881884 # 7 7 0.52810549 0.13809772 # 8 8 0.89241904 0.13043347 # 9 9 0.55143501 0.12112443 # 10 10 0.45661474 0.11366764
注意事项
var()函数默认计算样本方差(自由度为n-1),如果需要计算总体方差(自由度为n),可以替换为自定义计算式:# 总体方差计算示例 data$cum_pop_var <- sapply(1:nrow(data), function(i) { if (i == 1) NA else { x <- data$variable[1:i] sum((x - mean(x))^2) / length(x) } })- 加入
set.seed(123)是为了让随机生成的variable值固定,方便你验证结果一致性。
内容的提问来源于stack exchange,提问作者ifoxfoot
相关产品推荐
相关产品推荐

