跨行数据框中加权平均值的引导

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]) 不同,我预计这些结果会相同吗? 立即查看我的更新答案。

以上是关于跨行数据框中加权平均值的引导的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:交换一个数据框中的特定列值并计算其加权平均值

使用熊猫/数据框计算加权平均值

group的加权平均值不等于pandas groupby中的总平均值

Highcharts构建加权平均值图表

Highcharts构建加权平均值图表

Pandas 数据透视表/groupby 计算加权平均值