跨行数据框中加权平均值的引导
Posted
技术标签:
【中文标题】跨行数据框中加权平均值的引导【英文标题】:Bootstrap of weighted mean in dataframe across rows 【发布时间】:2022-01-14 10:29:03 【问题描述】:我有一个关于加权平均值自举的问题。
根据我的数据结构,有时我想跨列引导,有时跨行引导。
在另一篇文章 (bootstrap weighted mean in 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])
很遗憾,这不起作用,我不知道应该改变什么?
非常感谢。
【问题讨论】:
如果您有 2 个问题,您可能应该将它们分成 2 个帖子。您可以将第二个链接返回到第一个链接作为参考,但它们都应该是独立的 【参考方案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)
【讨论】:
感谢您的回复!但是您能否在以下方面提供帮助,因为我不完全确定代码是否正确?因为如果我比较 results_qsec2 的输出中给出的“原始”值,它与使用weighted.mean(x=mtcars[,7], w=mtcars[,6])
不同,我预计这些结果会相同吗?
立即查看我的更新答案。以上是关于跨行数据框中加权平均值的引导的主要内容,如果未能解决你的问题,请参考以下文章