我有一个调查数据集,并希望在R上自举,以便以代表整个总体中各阶层大小的概率选择每个阶层的值。我已经在boot()包上尝试了各种方法,但不确定是否要得到想要的结果。例如,在定义每个分层权重之后使用weights参数时,我相信这只是为我的引导程序创建加权平均值,而不是分层重采样。我不确定我需要哪个sim()选项或strata()选项需要做什么。请帮忙!
sample_mean = function(value,indices){return(mean(value[indices]))}
> results=boot(value,sample_mean,1000,weights = Weight)
答案 0 :(得分:0)
比方说,为了可重复性,您拥有
my_df <- data.frame(x=1:9, stratum=rep(1:3, each=3))
my_df
# x stratum
# 1 1 1
# 2 2 1
# 3 3 1
# 4 4 2
# 5 5 2
# 6 6 2
# 7 7 3
# 8 8 3
# 9 9 3
您拥有与阶层wts <- c(4,2,1)
相关的权重-注意,这些权重不一定需要加到1。
您可以通过类似的呼叫“手动”引导
N_boot <- 10000
boot_mns <- rep(NA, N_boot)
for(i in 1:N_boot) {
B <- sample(my_df$x, prob=wts[my_df$stratum])
# or prob=wts[as.numeric(as.factor(my_df$stratum))] as needed
boot_mns[i] <- mean(B)
}
使用boot
软件包可能更好的形式,但这在正在发生的事情中非常明显。