es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

mapea sobre el objeto mable de modelos y aplica gg_tsresiduals() a cada uno.

Tengo una mable que contiene varios modelos:

pacman::p_load(tidyverse, fable, fpp3, feasts)
retail_data |> autoplot() + facet_wrap(vars(State))
retail_train <- retail_data |> filter(year(Month) <= max(year(Month)) – 4)
ft.mod <- retail_train |> model(
drift = RW(Turnover ~ drift())
)

ft.mod

Una mable: 8 x 3

Key: State, Industry [8]

State Industry drift
<chr> <chr> <model>
1 Australian Capital Territory Servicios de comida para llevar <RW c/ deriva>
2 Nueva Gales del Sur Servicios de comida para llevar <RW c/ deriva>
3 Territorio del Norte Servicios de comida para llevar <RW c/ deriva>
4 Queensland Servicios de comida para llevar <RW c/ deriva>
5 Australia Meridional Servicios de comida para llevar <RW c/ deriva>
6 Tasmania Servicios de comida para llevar <RW c/ deriva>
7 Victoria Servicios de comida para llevar <RW c/ deriva>
8 Australia Occidental Servicios de comida para llevar <RW c/ deriva>

Puedo visualizar los residuos de un solo modelo así:

ft.mod |> filter(State == 'Victoria') |> gg_tsresiduals() # plot appears in pane

Pero si intento hacerlo de una vez:

ft.mod |> gg_tsresiduals()
Error: gg_tsresiduals() debe ser utilizado con una mable que contenga sólo un modelo.

Intenté usando map():

ft.mod |> map( ~ gg_tsresiduals(.x))
Error: gg_tsresiduals() debe ser utilizado con una mable que contenga sólo un modelo.

¿Cómo puedo usar map para iterar sobre cada modelo con gg_tsresiduals()?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para usar map() para iterar sobre cada modelo con gg_tsresiduals(), primero debe convertir la mable en un tibble usando as_tibble() y después gather() para transformar los datos en un formato largo. Luego, puede usar group_by() para agrupar los datos por Estado e Industria y, finalmente, usar map() para aplicar gg_tsresiduals() a cada modelo usando .$drift. Aquí está el código:

    ft.mod %>% 
      as_tibble() %>% 
      gather(key = "model_type", value = "model", -State, -Industry) %>% 
      group_by(State, Industry) %>% 
      nest() %>% 
      mutate(resid = map(data, ~ gg_tsresiduals(.$drift)))
    

    Esto creará una nueva columna llamada resid que contiene una lista de objetos ggplot para cada modelo. Puede usar unnest() para extraer los ggplots de cada modelo en un solo tibble:

    ft.mod_resid <- ft.mod %>% 
      as_tibble() %>% 
      gather(key = "model_type", value = "model", -State, -Industry) %>% 
      group_by(State, Industry) %>% 
      nest() %>% 
      mutate(resid = map(data, ~ gg_tsresiduals(.$drift))) %>% 
      unnest(resid)
    
    ft.mod_resid
    

    Esto le dará un tibble con una fila para cada gráfico residual para cada modelo, junto con la información de Estado e Industria. Luego puede usar facet_wrap() para crear una cuadrícula de gráficos residuales para cada combinación de Estado-Industria:

    ft.mod_resid %>%
      ggplot(aes(x = index, y = .resid)) +
      geom_line() +
      facet_wrap(vars(State, Industry))
    

Comments are closed.