#r #survey #sampling
#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))
Ответ №1:
Если у вас стратифицированный дизайн, то я полагаю, что вы можете выборочно выбирать в каждом слое. Вот краткий алгоритм для выполнения пропорциональной выборки в каждом слое, используя 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
Комментарии:
1. Спасибо, я хотел бы, чтобы R предоставлял такую функцию. Разочарование заключается в том, что мне всегда приходится находить то, что мне нужно исправить самостоятельно, и то, что R предоставляет с готовностью. Я не статистик, поэтому всегда боюсь ошибиться
2. Отлично!
sampleOne
это функция, которую я искал.tapply(dat$id, dat$Category, sampleOne, fraction = 0.1)
будет очень хорошо работать и с небольшими выборками.
Ответ №2:
Взгляните на sampling
пакет в CRAN (pdf здесь) и strata
, в частности, на функцию.
Это хороший пакет, чтобы знать, проводите ли вы опросы; на его странице в CRAN доступно несколько виньеток.
Представление задач в разделе «Официальная статистика» включает в себя несколько разделов, которые тесно связаны с этими вопросами разработки опроса и выборки — просмотр его и рекомендуемых пакетов может также познакомить с другими инструментами, которые вы можете использовать в своей работе.
Ответ №3:
Вы можете нарисовать стратифицированную выборку с помощью 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
Ответ №4:
вот быстрый способ выборки трех записей для каждого отдельного значения «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
пакетом для более продвинутых способов создания сложных выборочных данных опроса. 🙂