У меня есть 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 и 1, используя отсечение 0,50, а затем суммировать вектор.
Я создал функцию ниже, которая дискретизирует и суммирует.
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. Я хочу сделать это R = 10 (например, только низкое, но будет повторять R = 10000 с реальными данными) раз для каждого AAA: DDD, а затем извлечь стандартную ошибку объекта boot()
.
Предложения о том, как улучшить мой цикл выше, будут оценены. В частности, как правильно включить «статистический» аргумент в boot()
внутри цикла.
Заранее спасибо.