Почему размеры выборки слоя не поддерживаются с помощью начальной загрузки rsample? - PullRequest
0 голосов
/ 02 марта 2019

[После просмотра комментария joran о функции make_strata() я подал проблему с rsample на Github.]

Я пытаюсь взять стратифицированные образцы начальной загрузки из фрейма данных.Я хочу, чтобы в каждом страте брались отдельные выборки начальной загрузки, чтобы полученная выборка начальной загрузки имела такое же количество наблюдений в каждой страте, что и исходный кадр данных.Однако это не всегда происходит при использовании функции bootstraps() пакета rsample .Когда я запускаю этот код:

library(rsample)

mydf <- data.frame(A=1:58, B=rep(1:4, c(6, 6, 23, 23)))
lboots <- bootstraps(mydf, times=3, strata="B")$splits
lbootsdf <- lapply(lboots, as.data.frame)

with(mydf, table(B))
lapply(lbootsdf, function(df) table(df$B))

Вот результаты, которые я получаю:

B
 1  2  3  4 
 6  6 23 23 


$`1`
 1  2  3  4 
10  5 20 23 

$`2`
 1  2  3  4 
 3  8 24 23 

$`3`
 1  2  3  4 
 4  5 24 25 

Я ожидал увидеть 6 1, 6 2, 23 3 и 23 4 в каждомиз трех образцов начальной загрузки.

Как я могу взять тот тип многослойной начальной загрузки, который мне нужен?

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Это не использует rsample::bootstraps, но вместо этого создает явно образцы начальной загрузки.

library("dplyr")

splits <- mydf %>%
  crossing(id = seq(2)) %>%
  group_by(id, B) %>%
  sample_n(n(), replace = TRUE) %>%
  ungroup()

lboots$splits[[id]]$data являются копиями исходных данных.

0 голосов
/ 02 марта 2019

Выглядит не так, как будто вы делаете загрузочную выборку, потому что вы не оцениваете распределение выборки статистики.Мне кажется, что вы пытаетесь сделать, это стратифицированная выборка (т.е. вместо простой случайной выборки) данных, хранящихся в mydf$A с использованием mydf$B в качестве страт.

Пакет dplyr имеет функцию, специально созданную для этого сценария, sample_frac:

library(dplyr)
mydf <- data.frame(A=1:58, B=rep(1:4, c(6, 6, 23, 23)))
data_grouped_by_stratum <- mydf %>% group_by(mydf$B)
data_sampled_by_stratum <- data_grouped_by_stratum %>% sample_frac(size=1, replace=T)
# Now, a bit of cleanup on the resulting tibble object
df_of_data_sampled_by_stratum <- data_sampled_by_stratum %>% dplyr::ungroup %>% dplyr::select(-`mydf$B`) %>% as.data.frame

При вызове sample_frac, size=1 означает, что доля строк для выборки в каждой группе1;т.е. 100% строк группы.

0 голосов
/ 02 марта 2019

Когда я посмотрел на компонент "B" объекта lboots (сделанный без разбиения на поднаборы, я увидел последовательность на фракции выборки.

НО: что, очевидно, не спроектировано, как указывает Джоран. Появляетсяэтот пакет находится на ранней стадии разработки, поскольку документация не синхронизирована с кодом .:100100

maintainer("rsample") 
[1] "Max Kuhn <max@rstudio.com>"

 lboots <- bootstraps(mydf, times=3, strata="B")
 str(lboots)
 table(lboots$splits[['1']]$data$B)

 1  2  3  4 
 6  6 23 23 
> table(lboots$splits[['2']]$data$B)

 1  2  3  4 
 6  6 23 23 
> table(lboots$splits[['3']]$data$B)

 1  2  3  4 
 6  6 23 23 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...