提问人:Anne 提问时间:12/9/2021 最后编辑:Anne 更新时间:12/29/2021 访问量:170
跨行数据帧中加权平均值的引导
Bootstrap of weighted mean in dataframe across rows
问:
我有一个关于加权均值自举的问题。
根据我的数据结构,我有时想跨列引导,有时跨行引导。
在另一篇博文(R 中的引导加权平均值)中,提供了以下代码来引导跨列的加权平均值:
library(boot)
samplewmean <- function(d, i, j) {
d <- d[i, ]
w <- j[i, ]
return(weighted.mean(d, w))
}
results_qsec <- boot(data= mtcars[, 7, drop = FALSE],
statistic = samplewmean,
R=10000,
j = mtcars[, 6 , drop = FALSE])
这非常有效(检查:weighted.mean(mtcars[,7], mtcars[,6])。
但是,我现在还想跨行引导,我认为以下代码可以做到这一点:
samplewmean2 <- function(d, i, j) {
d <- d[, i]
w <- j[, i]
return(weighted.mean(d, w))
}
results_qsec2 <- boot(data= mtcars[7, , drop = FALSE],
statistic = samplewmean2,
R=10000,
j = mtcars[6, , drop = FALSE])
不幸的是,这不起作用,我不知道我应该改变什么?
提前非常感谢。
答:
0赞
JKupzig
12/10/2021
#1
更新
我认为最简单的方法是将行值放入向量中并执行引导。
你可以像这样定义你的引导函数:
samplewmean <- function(d,x, j) {
return(weighted.mean(d[x], j[x]))
}
然后像这样应用引导程序:
results_qsec2 <- boot(data= as.vector(t(mtcars[, 7, drop = FALSE])),
statistic = samplewmean,
R=100,
j = as.vector(t(mtcars[, 6, drop = FALSE])))
如果这不是您想要的,您可以考虑在不使用任何包的情况下执行引导程序。那么一个好的起点是使用我首先建议的重采样创建一个 for 循环(或 lapply,...):
elements2use <- sample(1:length(d), length(d), replace=T)
评论
0赞
Anne
12/20/2021
感谢您的回复!但是你能在以下方面提供帮助吗,因为我不完全确定代码是否正确?因为如果我比较 results_qsec2 输出中给出的“原始”值,它与使用 不同,并且我希望这些结果会相同?weighted.mean(x=mtcars[,7], w=mtcars[,6])
0赞
JKupzig
12/29/2021
立即查看我更新的答案。
评论