分层抽样规模因 R 中的组而异
stratified sampling size varies based on group in R
我是 R 的新手。现在,当样本量根据组发生变化时,我会坚持使用分层抽样。
数据如下所示:
样本量因不同的群体或阶层而异:
我使用了分层抽样,但无法计算出样本量。
Result <- stratified(Population, c("Loc", "Format"),
Population$SampleSize), replace = FALSE,
keep.rownames = T)
一条错误消息说“大小应作为命名向量输入”。有人能帮忙吗?谢谢。
我假设您正在使用我的 "splitstackshape" 包中的 stratified
。
该错误解释了所需内容:命名向量(例如 c(a = 5, b = 10)
之类的东西)。
但是,函数的这一特征假定只有一个变量用于分层。要解决此问题,您可以通过将 "Loc" 和 "Format" 列粘贴在一起来创建一个新的分组变量。
这是一个简单的例子....
从您的原始数据集的一些示例数据和一个表明您想要的样本大小的数据集开始。
library(splitstackshape)
set.seed(1)
mydf <- data.table(strata1 = sample(letters[1:2], 25, TRUE),
strata2 = sample(c("A", "B"), 25, TRUE),
values = sample(25, replace = TRUE))
head(mydf)
# strata1 strata2 values
# 1: a A 12
# 2: a A 22
# 3: b A 11
# 4: b B 7
# 5: a A 2
# 6: b A 3
wanted <- data.table(strata1 = c("a", "a", "b", "b"),
strata2 = c("A", "B", "A", "B"),
count = c(2, 3, 5, 2))
wanted
# strata1 strata2 count
# 1: a A 2
# 2: a B 3
# 3: b A 5
# 4: b B 2
为了获得输出,我们将添加一个名为 "KEY" 的列来组合两个分层列。您可以对两个数据集执行此操作,但我只是使用 "wanted" 数据集即时执行此操作。
out <- stratified(
mydf[, KEY := paste(strata1, strata2, sep = "_")], "KEY",
with(wanted, setNames(count, paste(strata1, strata2, sep = "_"))))
out
# strata1 strata2 values KEY
# 1: a A 21 a_A
# 2: a A 2 a_A
# 3: a B 9 a_B
# 4: a B 3 a_B
# 5: a B 9 a_B
# 6: b A 17 b_A
# 7: b A 12 b_A
# 8: b A 3 b_A
# 9: b A 17 b_A
# 10: b A 13 b_A
# 11: b B 8 b_B
# 12: b B 20 b_B
通过原始分层变量比较结果样本量:
out[, .N, .(strata1, strata2)]
# strata1 strata2 N
# 1: a A 2
# 2: a B 3
# 3: b A 5
# 4: b B 2
我是 R 的新手。现在,当样本量根据组发生变化时,我会坚持使用分层抽样。
数据如下所示:
样本量因不同的群体或阶层而异:
我使用了分层抽样,但无法计算出样本量。
Result <- stratified(Population, c("Loc", "Format"),
Population$SampleSize), replace = FALSE,
keep.rownames = T)
一条错误消息说“大小应作为命名向量输入”。有人能帮忙吗?谢谢。
我假设您正在使用我的 "splitstackshape" 包中的 stratified
。
该错误解释了所需内容:命名向量(例如 c(a = 5, b = 10)
之类的东西)。
但是,函数的这一特征假定只有一个变量用于分层。要解决此问题,您可以通过将 "Loc" 和 "Format" 列粘贴在一起来创建一个新的分组变量。
这是一个简单的例子....
从您的原始数据集的一些示例数据和一个表明您想要的样本大小的数据集开始。
library(splitstackshape)
set.seed(1)
mydf <- data.table(strata1 = sample(letters[1:2], 25, TRUE),
strata2 = sample(c("A", "B"), 25, TRUE),
values = sample(25, replace = TRUE))
head(mydf)
# strata1 strata2 values
# 1: a A 12
# 2: a A 22
# 3: b A 11
# 4: b B 7
# 5: a A 2
# 6: b A 3
wanted <- data.table(strata1 = c("a", "a", "b", "b"),
strata2 = c("A", "B", "A", "B"),
count = c(2, 3, 5, 2))
wanted
# strata1 strata2 count
# 1: a A 2
# 2: a B 3
# 3: b A 5
# 4: b B 2
为了获得输出,我们将添加一个名为 "KEY" 的列来组合两个分层列。您可以对两个数据集执行此操作,但我只是使用 "wanted" 数据集即时执行此操作。
out <- stratified(
mydf[, KEY := paste(strata1, strata2, sep = "_")], "KEY",
with(wanted, setNames(count, paste(strata1, strata2, sep = "_"))))
out
# strata1 strata2 values KEY
# 1: a A 21 a_A
# 2: a A 2 a_A
# 3: a B 9 a_B
# 4: a B 3 a_B
# 5: a B 9 a_B
# 6: b A 17 b_A
# 7: b A 12 b_A
# 8: b A 3 b_A
# 9: b A 17 b_A
# 10: b A 13 b_A
# 11: b B 8 b_B
# 12: b B 20 b_B
通过原始分层变量比较结果样本量:
out[, .N, .(strata1, strata2)]
# strata1 strata2 N
# 1: a A 2
# 2: a B 3
# 3: b A 5
# 4: b B 2