Случайно нарисуйте 2 отдельных 100 моделирования по группам из кадра данных - PullRequest
3 голосов
/ 10 апреля 2020

Этот вопрос не о данных выборки, я знаю о sample_n, но этот вопрос касается имитации данных из фрейма данных для сравнения их среднего значения с фактическим и фактическим моделированием (с использованием суммирования group_by).

Я рассчитал фактическую разницу в среднем между использованием ниже

df %>% 
  group_by(allfour) %>% 
  summarise(hs_completion=mean(hsgrad),
            count=n())

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

Я знаю tidyverse & ggplot, поэтому Построение графиков - это не вопрос, как мне сделать 100 симуляций, когда записи ограничены.

Пример кадра данных df, как показано ниже:

    structure(list(hsgrad = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 
0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 
1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 
1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L), allfour = structure(c(1L, 
2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 1L), .Label = c("0", "1"), class = "factor")), row.names = c(NA, 
100L), class = "data.frame")

1 Ответ

2 голосов
/ 10 апреля 2020

Важная информация в этой строке:

enter image description here

Таким образом, вам нужно смоделировать Бернулли с этой вероятностью успеха в каждой группе. Мы рассчитываем общий показатель успеха (окончания):

rate = mean(df$hsgrad)

Базовый код c для 1 моделирования таков, что вы даете количество симуляций (1000), количество испытаний (то есть размер групп) и коэффициент успеха (сверху):

sim_1 = rbinom(1000,sum(df$allfour==1),prob=rate)
hist(sim_1/sum(df$allfour==1),br=20)

enter image description here

Это дает вам смоделированную вероятность успеха в allfour == 1 группа, по предположению, ставка является общей ставкой. Теперь нам нужно сделать это для двух групп:

grp0_size = sum(df$allfour==0)
grp1_size = sum(df$allfour==1)
nsim = 1000
observed = diff(tapply(df$hsgrad,df$allfour,mean))

data.frame(
grp0_success = rbinom(nsim,grp0_size,rate)/grp0_size,
grp1_success = rbinom(nsim,grp1_size,rate)/grp1_size) %>%
mutate(diff=grp1_success-grp0_success) %>%
ggplot(aes(x=diff)) + geom_histogram() +
geom_vline(xintercept=observed)

enter image description here

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