【问题标题】:Stratified random sampling in RR中的分层随机抽样
【发布时间】:2017-05-02 06:14:32
【问题描述】:

我正在努力使用具有 3078 个观察值的分层随机抽样来创建大小为 100 的分层样本。 分层随机抽样必须满足的条件是: FARMS92600 为 分层,并使用比例分配。

当我遵循分层功能时,我不明白如何进行:https://gist.github.com/mrdwab/6424112

这是我的数据集:

        COUNTY   STATE  ACRES92 ACRES87 FARMS92
    1   ALEUTIAN  AK    683533  726596  764514
    2   ANCHORAGE AK    47146   59297   256709
    3   FAIRBANKS AK    141338  154913  204568
    4   JUNEAU    AK    210     214     127
    5   KENAI     AK    50810   85712   98035
    6   AUTAUGA   AL    107259  116050  145044
    7   BALDWIN   AL    167832  192082  223502
    8   BARBOUR   AL    177189  207906  222066
    9   BIBB      AL    48022   50818   49630
    10  BLOUNT    AL    137426  140107  163638
    11  BULLOCK   AL    144799  156332  185304
    12  BUTLER    AL    96427   99997   124491
    13  CALHOUN   AL    73841   90474   93248
    14  CHAMBERS  AL    109555  102153  121101
    15  CHEROKEE  AL    121504  119956  143656 

您能解释一下如何进行的步骤吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以先将它们分成垃圾箱,例如cut 函数。

    data$cut <- cut(data$FARMS92, breaks = c(0,100,300,600, 1E7), labels = c("A","B","C", "D"), right = TRUE)
    

    然后使用stratify 函数(https://gist.github.com/mrdwab/6424112)。

    stratified(data, "cut", size = c(2,2,2,2))
    

    对于这个特定的示例,我使用了size = c(2,2,2,2),它将从每个 bin 返回 2。由于您想要样本大小 = 100,因此请相应地调整大小。例如,对于比例分配,您可以将原始数据集用于:size = round(100 * prop.table(table(data$cut)), 0)

    输出:

         COUNTY STATE ACRES92 ACRES87 FARMS92 cut
    7   BALDWIN    AL  167832  192082      22   A
    6   AUTAUGA    AL  107259  116050      14   A
    4    JUNEAU    AK     210     214     127   B
    12   BUTLER    AL   96427   99997     124   B
    11  BULLOCK    AL  144799  156332     385   C
    15 CHEROKEE    AL  121504  119956     436   C
    9      BIBB    AL   48022   50818   49630   D
    8   BARBOUR    AL  177189  207906  222066   D
    

    我修改了您的数据集以生成更好的工作示例。 数据:

    data <- read.table(text= "COUNTY   STATE  ACRES92 ACRES87 FARMS92
    1   ALEUTIAN  AK    683533  726596  76
    2   ANCHORAGE AK    47146   59297   2
    3   FAIRBANKS AK    141338  154913  204
    4   JUNEAU    AK    210     214     127
    5   KENAI     AK    50810   85712   480
    6   AUTAUGA   AL    107259  116050  14
    7   BALDWIN   AL    167832  192082  22
    8   BARBOUR   AL    177189  207906  222066
    9   BIBB      AL    48022   50818   49630
    10  BLOUNT    AL    137426  140107  163638
    11  BULLOCK   AL    144799  156332  385
    12  BUTLER    AL    96427   99997   124
    13  CALHOUN   AL    73841   90474   93248
    14  CHAMBERS  AL    109555  102153  121
    15  CHEROKEE  AL    121504  119956  436 ", stringsAsFactors=FALSE, header = TRUE)   
    

    【讨论】:

    • 将数据集切割成几个 bin 的解决方案效果很好。我没有设法创建一个分层函数来使以下代码工作stratified(data, group=cut, size = round(100 * prop.table(table(data$cut)), 0)) 你能解释一下吗?
    • 使用 stratified(data, "cut", size = c(25,25,25,25)) 将从每个组(A,B,C,D)中随机选择 25 行总共100. 因为您希望使用 round(100 * prop.table(table(data$cut)), 0) 按比例分配,所以将确定每组将选择多少个,例如(35, 25, 25, 15) 。如果 round(100 * prop.table(table(data$cut)), 0) 有效,分层函数应该有效。
    • 在您的建议下找到了一种绘制分层样本的方法:sample_sizes &lt;- as.numeric(round(100 * prop.table(table(data$cut)), 0)) data_new &lt;- c() for (i in 1:4) { data_new &lt;- c(data_new, sample(data[which(data$cut == i),]$ACRES92, sample_sizes[i])) }
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2016-07-16
    • 2014-06-22
    相关资源
    最近更新 更多