вложенная категориальная переменная, bootstrap, затем извлечение медианы в R - PullRequest
1 голос
/ 23 января 2020

У меня проблемы с тем, что кажется простым решением. У меня есть фрейм данных с некоторым значением locations, и с каждым местоположением связан value. Я вложил data.frame по местоположениям, а затем загрузил значения, используя purrr (см. Ниже).

library(tidyverse)
library(modelr)
library(purrr)

locations <- c("grave","pinkham","lower pinkham", "meadow", "dodge", "young")

values <- rnorm(n = 100, mean = 3, sd = .5)
df <- data.frame(df)

df.boot <- df %>% 
  nest(-locations) %>% 
  mutate(boot = map(data,~bootstrap(.,n=100, id = "values")))

Теперь я пытаюсь получить медиану от каждого bootstrap в окончательном списке df.boot$boot, но не могу понять это? Я пытался применить map(boot, median), но чем больше я копаю, тем больше это не имеет смысла. Разыскиваемый вектор в списке boot равен idx, из которого я могу получить медианное значение и затем сохранить его (в значительной степени то, что делает функция boot, но итерируя по уникальным категориальным переменным). Любая помощь приветствуется. Я мог бы просто ошибиться ...

1 Ответ

0 голосов
/ 23 января 2020

Если нам нужно извлечь данные median

library(dplyr)
library(purrr)
library(modelr)
out <- df %>%
         group_by(locations) %>% 
         nest %>% 
         mutate(boot = map(data, ~ bootstrap(.x, n = 100, id = 'values') %>%
                                 pull('strap') %>% 
                                 map_dbl(~ as_tibble(.x) %>% 
                                          pull('values') %>%
                                          median)))
out
# A tibble: 6 x 3
# Groups:   locations [6]
#  locations     data              boot       
#  <fct>         <list>            <list>     
#1 pinkham       <tibble [12 × 1]> <dbl [100]>
#2 lower pinkham <tibble [17 × 1]> <dbl [100]>
#3 meadow        <tibble [16 × 1]> <dbl [100]>
#4 dodge         <tibble [22 × 1]> <dbl [100]>
#5 grave         <tibble [21 × 1]> <dbl [100]>
#6 young         <tibble [12 × 1]> <dbl [100]>

df <- data.frame(values, locations = sample(locations, 100, replace = TRUE))
...