【问题标题】:How can I do Stratified sampling with proportionate size如何按比例进行分层抽样
【发布时间】:2023-01-24 23:24:13
【问题描述】:

我有一个名为“Tree_all_exclusive”的数据集,有 7607 行和 39 列,其中包含树木的不同信息,例如年龄、身高、姓名等。我可以使用以下代码创建一个 1200 大小的样本,它看起来采摘树木随机:

sam1<-sample_n(Tree_all_exclusive, size = 1200)

但我喜欢生成一个按比例分层的 1200 棵树样本,它会根据特定类型树的数量比例来选择树的数量。

为此,我使用以下代码:

sam3<-Tree_all_exclusive %>%
  group_by(TaxonNameFull)%>%
  summarise(total_numbers=n())%>%
  arrange(-total_numbers)%>%
  mutate(pro = total_numbers/7607)%>% #7607 total number of trees
  mutate(sz= pro*1200)%>% #1200 is number of sample
  mutate(siz=as.integer(sz)+1) #since some size is 0.01 so making it 1
sam3

s<-stratified(sam3, group="TaxonNameFull", sam3$siz)

但它给了我以下错误:

s_n(indt, group, size) 错误:“size”应作为命名向量输入。

你能给我指出解决这个问题的任何方向吗?

另外,如果有任何其他方法可以按比例进行分层抽样,请指导我。

非常感谢。

【问题讨论】:

    标签: r sampling


    【解决方案1】:

    使用sample_frac()怎么样:

    library(dplyr)
    data(mtcars)
    
    mtcars %>% 
      group_by(cyl) %>% 
      tally()
    #> # A tibble: 3 × 2
    #>     cyl     n
    #>   <dbl> <int>
    #> 1     4    11
    #> 2     6     7
    #> 3     8    14
    
    mtcars %>% 
      group_by(cyl) %>% 
      sample_frac(.5) %>% 
      tally()
    #> # A tibble: 3 × 2
    #>     cyl     n
    #>   <dbl> <int>
    #> 1     4     6
    #> 2     6     4
    #> 3     8     7
    

    创建于 2023-01-24 reprex package (v2.0.1)

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      相关资源
      最近更新 更多