1

ここに作成して表示した 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()ループ内に正しく組み込む方法。

前もって感謝します。

4

1 に答える 1

1

関数のインデックス引数を含める必要がidxありますboot

BiSum <- function(x, idx){
     IndBi <- ifelse(x[idx] >= 0.50, 1,0)
     SumIndBi <- sum(IndBi)
}

sd(b$t)また、SEを取得するには、代わりに使用する方がきれいかもしれませんsqrt(var(b$t)

于 2013-11-20T15:29:34.923 に答える