简体   繁体   中英

nesting categorical variable, bootstrap, then extract median in R

I'm having trouble with what seems like a simple solution. I have a data frame with some locations and each location has a value associated with it. I nested the data.frame by the locations and then bootstrapped the values using purrr (see below).

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")))

Now I'm trying to get the median from each bootstrap in the final list df.boot$boot , but can't seem to figure it out? I've tried to apply map(boot, median) but the more I dig in the more that doesn't make sense. The wanted vector in the boot list is idx from which I can get the median value and then store it (pretty much what boot function does but iterating by unique categorical variables). Any help would be much appreciated. I might just be going at this the wrong way...

If we need to extract the 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]>

data

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM