ここに作成して表示した 4 つの一意の個人 (AAA:DDD) に関連付けられた 100 の確率があります。
IndID <- as.factor(rep(c("AAA", "BBB", "CCC", "DDD"),25))
Prob <- runif(length(IndID),0,1)
Data <- data.frame(IndID, Prob)
Data <- Data[order(Data$IndID),]
> head(Data)
IndID Prob
1 AAA 0.5860417
5 AAA 0.1824266
9 AAA 0.3301014
13 AAA 0.5048122
17 AAA 0.3717195
21 AAA 0.9090825
> summary(Data)
IndID Prob
AAA:25 Min. :0.01341
BBB:25 1st Qu.:0.19743
CCC:25 Median :0.48315
DDD:25 Mean :0.50475
3rd Qu.:0.81789
Max. :0.99805
個々の AAA:DDD の確率をブートストラップ (置換によるサンプル) したいと考えています。反復ごとに、0.50 カットオフを使用して確率を 0 と 1 に離散化し、ベクトルを合計します。
離散化して合計する以下の関数を作成しました。
BiSum <- function(x){
IndBi <- ifelse(x >= 0.50, 1,0)
SumIndBi <- sum(IndBi)
}
for() ループ内の各個人の確率に関数を適用し、以下に示すように boot() 関数を使用したいと考えています。
require(boot)
SE <- numeric(length(unique(Data$IndID)))
for (i in unique(Data$IndID)){
IndProbs <- Data$Prob[Data$IndID == i]
b <- boot(IndProbs, BiSum, R=10)
SE[i] <- sqrt(var(b$t)) #This is a roundabout way to grab the SE from a boot() object
}
for()
関数 BiSum は正しいと思いますが、ループと関数に誤って組み込まれていますboot()
。上記のループにより、次のエラーが発生します。
Error in statistic(data, original, ...) : unused argument (original).
私の目標: 各個人 (AAA:DDD) について、Prob をブートストラップし、0.50 をカットオフとして離散化し、結果の 0 と 1 を合計します。これを AAA:DDD ごとに R=10 (たとえば低いだけですが、実際のデータでは R=10000 を繰り返します) 回実行し、boot()
オブジェクトの標準誤差を抽出します。
上記のループを改善する方法についての提案をいただければ幸いです。具体的には、「統計」引数をboot()
ループ内に正しく組み込む方法。
前もって感謝します。