1
我有100個概率與我在此處創建並顯示的四個獨特個體(AAA:DDD)關聯。引導樣本並生成標準錯誤(SE)的函數
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)我想引導習題,離散他們使用0.50作爲隔斷,總結所產生的0和1。我想對每個AAA:DDD執行此操作R = 10(僅對於實例較低,但對於實際數據重複R = 10000)次,然後提取對象的標準錯誤。
關於如何改善我的循環以上的建議,將不勝感激。具體如何正確地將「統計」參數納入循環中的boot()
。
在此先感謝。
多謝@TWL。添加一個idx的效果很好。正如這裏所包含的SE的輸出所見,除了IndID之外,還有四個額外的0.00000。有關它們來自哪裏的任何想法?再次感謝。 '> SE AAA BBB 0.000000 0.000000 0.000000 0.000000 0.000000 2.436967 2.312056 CCC DDD EEE' 2.487526 2.381884 2.497726 –
要跟隨你的榜樣,在for循環您索引因子水平AAA-DDD,而數字矢量SE沒有按」沒有分配名稱。函數不知道將值放在哪裏,並簡單地將輸出與SE向量連接起來。在運行for循環之前,您必須爲矢量指定級別名稱
names(SE) <- unique(Data$IndID)
– TWL再次完美!謝謝。 –