如何在r中的循环中引导加权平均值

Posted

技术标签:

【中文标题】如何在r中的循环中引导加权平均值【英文标题】:How to bootstrap weighted mean in a loop in r 【发布时间】: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 列并获得它们的加权平均值? 只要你能计算出什么。在每一列的一个步骤中,您可以使用applymap 和朋友。这应该是加权平均的情况 【参考方案1】:

这将计算由mtcarsweights 加权的表mtcarsdata 每一列的所有引导程序的标准差。

由于我们可以一步计算结果,我们可以使用apply和朋友(这里:purrr:map_dbl

library(boot)
library(purrr)

set.seed(1337)

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))


mtcarsdata %>%
  ncol() %>%
  seq() %>%
  map_dbl(~ 
    # .x is the number of the current column
    sd(boot(
      data = mtcarsdata[, .x, drop = FALSE],
      statistic = samplewmean,
      R = 10000,
      j = mtcarsweights[, .x, drop = FALSE]
    )[[2]], na.rm = T)
  )
#>  [1]  0.90394218  0.31495232 23.93790468  6.34068205  0.09460257  0.19103196
#>  [7]  0.33131814  0.07487754  0.07745781  0.13477355  0.27240347

由reprex package (v2.0.1) 于 2021 年 12 月 10 日创建

【讨论】:

以上是关于如何在r中的循环中引导加权平均值的主要内容,如果未能解决你的问题,请参考以下文章

在连接两个表时获得R中的加权平均值

R:具有分组并且依赖于另一个变量的加权平均值

R语言计算加权平均值:weighted.mean函数计算加权平均值matrixStats包的weightedMean函数计算加权平均值SDMTools包的wt.mean函数计算加权平均值

R语言平均值和加权平均值

多组 - 加权平均值 - 不在 r 中工作(使用 dplyr)

如何计算hql中的加权平均值?