【发布时间】:2014-04-24 13:19:44
【问题描述】:
我需要在每个层中使用n 观察值绘制分层样本,但某些层的观察值少于n。如果某个层的观测值太少(例如,k<n 观测值),我想从该层中抽取所有 k 观测值。
require(sampling)
n <- 10
geo_ID <- c(rep(1, times = 20), rep(2, times = 20), rep(c(1, 2, 3, 4), times = 5))
set.seed(42)
V1 <- rnorm(60, 0, 1)
V2 <- rnorm(60, 2, 1)
DF <- data.frame(geo_ID = geo_ID, V1 = V1, V2 = V2)
#Sort as explained in ?strata help file
DF <- DF[order(DF[, "geo_ID"]), ]
strata(DF, stratanames = "geo_ID", size = c(n, n, n, n), method = "srswor")
如果我如上所述使用不替换的采样,我(可以理解)得到错误:
Error in strata(DF, stratanames = "geo_ID", size = c(10, 10, 10, 10), :
not enough obervations in the stratum
带替换的抽样避免了错误method = "srswr",但这并不理想,因为它有时会为层级重复绘制足够大而只有唯一样本抽取的重复。
注意:关于 SO 有一个类似的问题,但没有得到真正的回答。我也认为这个问题更笼统。 (Stratified sampling - not enough observations) 链接问题的答案通常没有用,因为它们需要 (i) 与层大小成比例的样本大小(而我需要一个固定数字)或 (ii) 逐层手动编程,随着层数的增加,这是不可行的。
【问题讨论】:
标签: r sampling random-sample