![](/img/trans.png)
[英]Error using dplyr::group_by() in function within boot::boot() function during bootstrapping
[英]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.