我有一個包含 20,000 個觀察值的資料框,我想引導其中的 700 個觀察值,計算平均值并重復 1,000 次運行。我知道如何自己撰寫代碼,但我嘗試使用“引導”庫,因為它具有出色的繪圖和 CI 選項。
df <- seq(1, 20000, 1)
meanfun <- function(data, ind) {
return(mean(data[ind]))
}
library(boot)
results <- boot(df, statistic=meanfun, R=10000)
我已經閱讀了檔案,但還沒有看到如何選擇“ind”的長度。
如果我要采取艱難的方式,我會使用以下代碼:
df <- seq(1, 20000, 1) # dataframe of 10000 observations
meanfun <- function(data) {
return(mean(data))
} # function to calculate mean
S <- numeric(1000) # Vector to store 1000 values from random sampling
for (i in 1:1000) {
one_sample <- sample(df, 700) # sample 700 random observations
print(one_sample)
one_result <- meanfun(one_sample) # find mean of that sampling
S[i] <- one_result # Store that value
}
S
meanfun(S) # average value of 1000 values
但是我如何選擇使用 boot 函式僅隨機抽樣 700 個觀測值 1000 次?
提前致謝!
uj5u.com熱心網友回復:
你正在做的是沒有替換的二次抽樣,而不是自舉。我不知道這是可能的boot,因為ind它是用替換重新采樣的,我看不出有任何方法可以對其進行子集化。但是我不使用boot并且可能是錯誤的。
其實你可以做的不那么麻煩;只需定義您的子采樣FUN操作即可replicate。
FUN <- function() mean(sample(x, 700))
R <- 2e4
set.seed(49076)
S <- replicate(R, FUN())
而已。您可以輕松計算平均值,
mean(S)
# [1] 10000.16
和百分置信區間。
## 95% CI
quantile(S, probs=c(.025, .975))
# 2.5% 97.5%
# 9584.945 10412.164
模仿的繪圖功能也boot很簡單。
op <- par(mfrow=c(1, 2))
hist(S, breaks='FD', freq=FALSE)
qqnorm(S); qqline(S)
par(op)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513169.html
標籤:r循环
