【发布时间】:2020-06-26 22:56:19
【问题描述】:
我有一个特定的使用问题。我想从组内抽取确切的尺寸。我应该使用什么方法来根据组数构建精确的子集?
我的用例是我正在经历一个两阶段的样本设计。首先,对于我的人群中的每一组,我想确保 60% 的受试者不会被选中。因此,我试图构建一个抽样数据框,排除每组 60% 的可用主题。此外,这是一个功能,其中用户指定不得使用的主题的最小比例,因此1- 构造中,用户已指示每组中至少有 60% 的主题不能被选择进行抽样。
在这段代码之后,我将完全随机抽样,以获得我的最终样本。
代码示例:
testing <- data.frame(ID = c(seq_len(50)), Age = c(rep(18, 10), rep(19, 9), rep(20,15), rep(21,16)))
testing <- testing %>%
slice_sample(ID, prop=1-.6)
如您所见,按组划分的数字不是我想要的。我应该只有4个18岁的科目,3个19岁的科目,6个20岁的科目,6个21岁的科目。在没有固定种子的情况下,我最终得到的数字是 6 个 18 岁、1 个 19 岁、6 个 20 岁和 7 个 21 岁。
但是,20 的总体样本量是正确的。
我如何强制组内的样本大小达到我需要的大小?
数据框中还有其他变量,所以我需要从每个年龄组中随机抽样。
编辑:试图举个例子搞砸了。在我的真实数据中,我 am 在 dplyr 命令集中按年龄分组。但是group-by([Age variable) 在slice_sample() 之前或在slice_sample() 内部进行分组都不起作用。在我的真实数据中,我没有得到按年龄划分的正确样本集,也没有得到正确的总体样本量。
我使用semi_join 将年龄限制为在进行比例测试后总剩余的年龄。对于无法抽取样本的年龄,在进行比例抽样之前,使用 semi_join 从总体中删除这些年龄。不知道是不是semi_join引起的问题。
也就是说,提供和接受的答案让我不再依赖 semi_join,我认为这是对我的真实代码的整体重大改进。
【问题讨论】:
-
我已经开始使用这些功能,但请注意这两个功能已被弃用,而是使用
slice_sample。 -
按“年龄”分组,然后按
slice_sample? -
它不会降低样本,所以我从提供余数的计数中抽取了太多样本。 :( 这违反了“必须至少剩下这个数字”的要求。