2016-09-17 5 views
3

У меня проблема с пониманием того, как правильно использовать функцию dplyrbootstrap.R - dplyr bootstrap issue

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

library(dplyr) 
library(broom) 
data(mtcars) 

mtcars %>% 
    mutate(treat = sample(c(0, 1), 32, replace = T)) %>% 
    group_by(treat) %>% 
    summarise(m = mean(disp)) %>% 
    summarise(m = m[treat == 1] - m[treat == 0]) 

Вопрос заключается в том, что мне нужно, чтобы повторить эту операцию 100 , 1000, и больше раз.

Использование replicate, я могу сделать

frep = function(mtcars) mtcars %>% 
    mutate(treat = sample(c(0, 1), 32, replace = T)) %>% 
    group_by(treat) %>% 
    summarise(m = mean(disp)) %>% 
    summarise(m = m[treat == 1] - m[treat == 0]) 

replicate(1000, frep(mtcars = mtcars), simplify = T) %>% unlist() 

и получить распределение

enter image description here

Я не очень понимаю, как использовать bootstrap здесь. Как мне начать?

mtcars %>% 
    bootstrap(10) %>% 
    mutate(treat = sample(c(0, 1), 32, replace = T)) 

mtcars %>% 
    bootstrap(10) %>% 
    do(tidy(treat = sample(c(0, 1), 32, replace = T))) 

Это не работает. Где я должен поставить bootstrap?

Спасибо.

+0

да! Спасибо. Это потрясающе. Так вы можете объяснить мне, мне нужно создать 'data.frame' внутри' do'? можете ли вы опубликовать свой ответ? еще раз спасибо! – giacomo

+1

Поскольку мы создаем столбец 'treat', мы завершаем его 'data.frame', чтобы получить вывод как data.frame. «.» Означает содержимое набора данных на 'lhs''%>% ' – akrun

ответ

2

В do шаге мы обернуть data.frame и создать колонку «лечить», то мы можем сгруппировать по «повторности» и «лечение», чтобы получить выходной столбец summarise d

mtcars %>% 
    bootstrap(10) %>% 
    do(data.frame(., treat = sample(c(0,1), 32, replace=TRUE))) %>% 
    group_by(replicate, treat) %>% 
    summarise(m = mean(disp)) %>% 
    summarise(m = m[treat == 1] - m[treat == 0]) 
    #or as 1 occurs second and 0 second, we can also use 
    #summarise(m = last(m) - first(m))