我有 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()
循环中。
提前致谢。