簡體   English   中英

引導示例意味着在 R 中使用引導包,為 boot() 函數創建統計函數

[英]Bootstrapping sample means in R using boot Package, Creating the Statistic Function for boot() Function

我有一個包含 15 個密度計算的數據集,每個來自不同的橫斷面。 我想用替換對這些重新采樣,從 15 個橫斷面中隨機抽取 15 個樣本,然后獲得這些重新采樣的平均值。 在此過程中,每個樣帶都應該有自己的個人概率被采樣。 這應該做5000次。 我有一個代碼可以在不使用引導函數的情況下執行此操作,但是如果我想使用引導包計算 BCa 95% CI,則需要首先通過引導函數完成引導。 我一直在嘗試創建一個函數,但我無法得到任何似乎有效的函數。 我希望引導程序從某個列 (data$xs) 中進行選擇,並且要使用的概率在列 data$prob 中。

我認為可能工作的功能是;

library(boot)
meanfun <- function (data, i){
    d<-data [i,]
    return (mean (d))   }
bo<-boot (data$xs, statistic=meanfun, R=5000)
#boot.ci (bo, conf=0.95, type="bca")  #obviously `bo` was not made

但這告訴我“維數不正確”

我理解如何在正常意義上創建一個函數,但該函數在 boot 中的工作方式似乎很奇怪。 由於該函數僅通過名稱來引導,並且沒有指定要傳遞給函數的參數,因此我似乎僅限於引導本身將作為參數傳遞的內容(例如,我無法將 data$xs 作為參數傳遞給函數)數據,我無法將 data$prob 作為概率參數傳遞,等等)。 它似乎真的限制了可以做的事情。 也許我錯過了什么?

感謝您的任何幫助

此錯誤的原因是data$xs返回一個向量,然后您嘗試按data [i, ]進行子集化。

解決此問題的一種方法是將其更改為data[i]或使用data[, "xs", drop = FALSE]代替。 drop = FALSE避免了類型強制,即。 將其保留為data.frame

我們嘗試

data <- data.frame(xs = rnorm(15, 2))

library(boot)
meanfun <- function(data, i){
  d <- data[i, ]
  return(mean(d))   
}
bo <- boot(data[, "xs", drop = FALSE], statistic=meanfun, R=5000)
boot.ci(bo, conf=0.95, type="bca")

並獲得:

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 5000 bootstrap replicates

CALL : 
boot.ci(boot.out = bo, conf = 0.95, type = "bca")

Intervals : 
Level       BCa          
95%   ( 1.555,  2.534 )  
Calculations and Intervals on Original Scale

可以使用 boot.array 提取所有或一部分重采樣集。 在這種情況下:

bo.ci<-boot.ci(boot.out = bo, conf = 0.95, type = "bca")


resampled.data<-boot.array(bo,1)

提取第一組和第二組重采樣數據:

resample.1<-resampled.data[1,]
resample.2<-resampled.data[2,]

然后繼續從任何子集中提取您想要的單個統計信息。 例如,如果您假設正常,您可以在第一個子集上運行學生的 t.test:

t.test(resample.1)

對於這個例子和特定的種子值給出:

數據:resample.1
t = 6.5216,df = 14,p 值 = 1.353e-05
備擇假設:真實均值不等於 0
95% 置信區間:
5.234781 10.365219
樣本估計:
x 的平均值
7.8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM