繁体   English   中英

R boot::boot():返回均值和使用样本的函数

[英]R boot::boot(): function which returns mean and the used samples

我正在使用 boot 包中的boot()函数从人群中引导手段。 使用的功能是:

boot_mean <- function(data, i){
  
  ds_m <- data[i]
  return(mean(ds_m))
  
}

像魅力一样工作,但现在我想调整boot_mean函数,以便我可以获得导致平均值的样本。 我试过了:

library('boot')

boot_mean <- function(data, i){
  
  ds_m <- data[i]
  ds_m_mean <- mean(ds_m)
  rlist <- list("means" = ds_m_mean, "data" = ds_m)
  return(rlist)
  
}

dummy_data <- rnorm(500)
dummy_boot <- boot(dummy_data, boot_mean, R = 1000) 

这会导致错误:

t.star[r, ] <- res[[r]] 中的错误:矩阵上的下标数量不正确

这里有什么问题? 我怎样才能得到对应的数据集来引导平均值?

从文档?boot中,描述了statistic参数。

一个函数,当应用于数据时返回一个包含感兴趣的统计数据的向量 ...

boot()函数只想处理输出单个向量的函数。 修改代码以返回包含两个元素的list意味着它不再起作用。 在 R 和boot()函数中实际上有一点有趣的奇怪之处,这意味着如果你在boot()调用中设置R=1 ,代码几乎可以工作,但它仍然是错误的。

幸运的是,出于您的目的,作者已经编写了有用的boot.array()函数。 它输出一个包含R行和nrow(data)列的矩阵,指示第 j 个个体在第 i 个引导程序中被采样的次数,或者被采样个体的索引。 通过从数据中选择这些人,可以很容易地找到自举数据集。 这可能需要一点时间。

dats <- lapply(1:nrow(boot.array(dummy_boot)), 
    FUN = function(x) dummy_data[boot.array(dummy_boot, indices = TRUE)[x, ]])

如果您有多列数据,您应该添加, , drop = FALSE

dats <- lapply(1:nrow(boot.array(dummy_boot)), 
    FUN = function(x) dummy_data[boot.array(dummy_boot, indices = TRUE)[x, ], , drop = FALSE])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM