【发布时间】:2022-01-14 23:19:34
【问题描述】:
我想在 for 循环中运行加权平均值的引导程序(我认为我不能使用“应用”,因为它涉及加权平均值)。我只需要将生成的标准错误存储在数据框中。另一篇文章提供了如何在 bootstrap (bootstrap weighted mean in R) 中计算加权平均值的代码,并且运行良好:
library(boot)
mtcarsdata = mtcars #dataframe for data
mtcarsweights = rev(mtcars) #dataframe for weights
samplewmean <- function(d, i, j) {
d <- d[i, ]
w <- j[i, ]
return(weighted.mean(d, w))
}
results_qsec <- sd(boot(data= mtcarsdata[, 6, drop = FALSE],
statistic = samplewmean,
R=10000,
j = mtcarsweights[, 6 , drop = FALSE])[[2]], na.rm=T)
results_qsec
然后循环运行它,我尝试了:
outputboot = matrix(NA, nrow=11, ncol=1)
for (k in 1:11){
outputboot[1,k] = sd(boot(data= mtcarsdata[, k, drop = FALSE],
statistic = samplewmean,
R=10000,
j = mtcarsweights[, k, drop = FALSE])[[2]], na.rm=T)
}
outputboot
但这不起作用。第一个输出甚至不正确。我怀疑代码不能使用两个迭代器:一个用于循环列,另一个用于带替换的采样。
我希望任何人都可以提供一些帮助。
【问题讨论】:
-
所以你基本上不仅要引导一列,还要引导所有 mtcars 列并获得它们的加权平均值?
-
只要你能计算出什么。在每一列的一个步骤中,您可以使用
apply、map和朋友。这应该是加权平均的情况
标签: r for-loop statistics-bootstrap weighted-average