drawing a stratified sample in R

我怕爱的太早我们不能终老 提交于 2019-12-17 19:26:09

问题


Designing my stratified sample

library(survey)
design <- svydesign(id=~1,strata=~Category,  data=billa, fpc=~fpc)

So far so good, but how can I draw now a sample in the same way I was able for simple sampling?

set.seed(67359)  
samplerows <- sort(sample(x=1:N, size=n.pre$n))

回答1:


If you have a stratified design, then I believe you can sample randomly within each stratum. Here is a short algorithm to do proportional sampling in each stratum, using ddply:

library(plyr)
set.seed(1)
dat <- data.frame(
    id = 1:100,
    Category = sample(LETTERS[1:3], 100, replace=TRUE, prob=c(0.2, 0.3, 0.5))
)

sampleOne <- function(id, fraction=0.1){
  sort(sample(id, round(length(id)*fraction)))
}

ddply(dat, .(Category), summarize, sampleID=sampleOne(id, fraction=0.2))

   Category sampleID
1         A       21
2         A       29
3         A       72
4         B       13
5         B       20
6         B       42
7         B       58
8         B       82
9         B      100
10        C        1
11        C       11
12        C       14
13        C       33
14        C       38
15        C       40
16        C       63
17        C       64
18        C       71
19        C       92



回答2:


Take a look at the sampling package on CRAN (pdf here), and the strata function in particular.

This is a good package to know if you're doing surveys; there are several vignettes available from its page on CRAN.

The task view on "Official Statistics" includes several topics that are closely related to these issues of survey design and sampling - browsing through it and the packages recommended may also introduce other tools that you can use in your work.




回答3:


here's a quick way to sample three records per distinct 'carb' value from the mtcars data frame without replacement

# choose how many records to sample per unique 'carb' value
records.per.carb.value <- 3

# draw the sample
your.sample <- 
    mtcars[ 
        unlist( 
            tapply( 
                1:nrow( mtcars ) , 
                mtcars$carb , 
                sample , 
                records.per.carb.value 
            ) 
        ) , ]

# print the results to the screen
your.sample

note that the survey package is mostly used for analyzing complex sample survey data, not creating it. @Iterator is right that you should check out the sampling package for more advanced ways to create complex sample survey data. :)




回答4:


You can draw a stratified sample using dplyr. First we group by the column or columns in which we are interested in. In our example, 3 records of each Species.

library(dplyr)
set.seed(1)
iris %>%
  group_by (Species) %>%
  sample_n(., 3)

Output:

Source: local data frame [9 x 5]
Groups: Species

  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1          4.3         3.0          1.1         0.1     setosa
2          5.7         3.8          1.7         0.3     setosa
3          5.2         3.5          1.5         0.2     setosa
4          5.7         3.0          4.2         1.2 versicolor
5          5.2         2.7          3.9         1.4 versicolor
6          5.0         2.3          3.3         1.0 versicolor
7          6.5         3.0          5.2         2.0  virginica
8          6.4         2.8          5.6         2.2  virginica
9          7.4         2.8          6.1         1.9  virginica


来源:https://stackoverflow.com/questions/7950834/drawing-a-stratified-sample-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!