рисование стратифицированной выборки в R

Разработка моей стратифицированной выборки

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

Пока все хорошо, но как я теперь могу нарисовать образец так же, как я это сделал для простого отбора образцов?

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

person Roland Kofler    schedule 31.10.2011    source источник


Ответы (4)


Если у вас есть стратифицированный план, то я считаю, что вы можете производить выборку случайным образом в пределах каждой страты. Вот краткий алгоритм пропорциональной выборки в каждом слое с использованием 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
person Andrie    schedule 31.10.2011
comment
Спасибо, я бы хотел, чтобы в R была такая функция. Разочарование заключается в том, что мне всегда приходится обнаруживать, что мне нужно исправить для себя и что R предоставляет с готовностью. Я не статистик, поэтому всегда боюсь ошибиться - person Roland Kofler; 31.10.2011
comment
Хороший! sampleOne - это функция, которую я искал. tapply(dat$id, dat$Category, sampleOne, fraction = 0.1) будет очень хорошо работать и с небольшими сэмплами. - person hpesoj626; 03.02.2018

Взгляните на пакет sampling в CRAN (pdf здесь) и, в частности, функция strata.

Это хороший пакет, чтобы знать, проводите ли вы опросы; есть несколько виньеток, доступных на его странице в CRAN.

представление задач в «Официальной статистике» включает несколько тесно связанных тем. по этим вопросам разработки и выборки обследований - при просмотре его и рекомендуемых пакетов могут быть также представлены другие инструменты, которые вы можете использовать в своей работе.

person Iterator    schedule 03.11.2011

Вы можете нарисовать стратифицированный образец, используя dplyr. Сначала мы группируем по столбцу или столбцам, которые нас интересуют. В нашем примере 3 записи каждого вида.

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

Выход:

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
person mpalanco    schedule 05.07.2015

вот быстрый способ выбрать три записи для отдельного значения 'carb' из кадра данных mtcars без замены

# 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

обратите внимание, что пакет survey в основном используется для анализа сложных выборочных данных обследования, а не для их создания. @Iterator прав в том, что вам следует ознакомиться с пакетом sampling, чтобы узнать о более продвинутых способах создания сложных выборочных данных опроса. :)

person Anthony Damico    schedule 19.12.2012