1

我有 100 个概率与我在此处创建并显示的四个唯一个体 (AAA:DDD) 相关联。

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
        }

虽然我认为 BiSum 函数是正确的,但它被错误地合并到for()循环和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 回答