簡體   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