Generovanie predikcie časových intervaloch na viac ako 1 lineárny model v R?

0

Otázka

Snažím sa vytvárať predikcie časových intervaloch pomocou funkcie predpovedať() pre nový súbor dát, ale aj vo viac ako jeden model, ktorý som generované pre dataset. Som relatívne neskúsení v používaní lapply, ale prísť na to by mala byť užitočné v tomto procese:

#Calling in my libraries:
library(dplyr)

#Creating dataset:

DNase <- DNase

#Generating models, one for each "Run" in DNAse:
model_dna <- DNase %>% 
  group_by(Run) %>% 
  do(model_dna_group = lm(log(density) ~ log(conc), data = .)) %>%   ungroup()

#Creating a new data set to be used to generate predictions:
new_dna <- as.data.frame(DNase$conc) %>% 
  mutate(conc = DNase$conc * 2) %>% select(conc)

#Attempting to apply predict to these models for a new data frame:
new_dna_w_predictions <- lapply(
                           X = model_dna, 
                           FUN = predict, 
                           newdata = new_dna, 
                           interval = "prediction", 
                           level = 0.9
                          )

Avšak, to čerpá nasledujúce chybové hlásenie:

Chyba v aplikácii(napr.znak(ZÁBAVA), režim = "funkciu", dopr = dopr) : objekt "model_dna' režim 'funkcia' nebol nájdený

Nie som si istý, ako najlepšie štruktúra tejto lapply funkcie, najmä, keď sa používajú vo viac ako jeden model. Je tam vo všeobecnosti čistejšie spôsob, ako pristupovať k tejto?

dplyr lm model predict
2021-11-19 15:33:36
2

Najlepšiu odpoveď

1

Tu máte plnú tidyverse riešenie:

# Calling in my libraries:
library(dplyr)
library(purrr)

# Creating dataset:
DNase <- DNase

# Creating a new data set to be used to generate predictions:
new_dna <- DNase %>% transmute(conc = conc * 2)  # simplified

# Generating models, one for each "Run" in DNAse:
model_dna <- DNase %>% 
  group_by(Run) %>% 
  summarise(model_dna_group = list(lm(log(density) ~ log(conc))))
  
model_dna
#> # A tibble: 11 x 2
#>    Run   model_dna_group
#>    <ord> <list>         
#>  1 10    <lm>           
#>  2 11    <lm>           
#>  3 9     <lm>           
#>  4 1     <lm>           
#>  5 4     <lm>           
#>  6 8     <lm>           
#>  7 5     <lm>           
#>  8 7     <lm>           
#>  9 6     <lm>           
#> 10 2     <lm>           
#> 11 3     <lm>


# Run predictions
model_dna %>%
  group_by(Run) %>% 
  summarise(map(model_dna_group, predict, newdata = new_dna, interval = "prediction", level = 0.9) %>% map_dfr(as_tibble),
            .groups = "drop")

#> # A tibble: 1,936 x 4
#>    Run       fit    lwr    upr
#>    <ord>   <dbl>  <dbl>  <dbl>
#>  1 10    -2.16   -2.48  -1.85 
#>  2 10    -2.16   -2.48  -1.85 
#>  3 10    -1.33   -1.64  -1.03 
#>  4 10    -1.33   -1.64  -1.03 
#>  5 10    -0.918  -1.22  -0.617
#>  6 10    -0.918  -1.22  -0.617
#>  7 10    -0.503  -0.804 -0.201
#>  8 10    -0.503  -0.804 -0.201
#>  9 10    -0.0873 -0.392  0.217
#> 10 10    -0.0873 -0.392  0.217
#> # ... with 1,926 more rows

Vytvorené na 2021-11-19 podľa reprex balík (v2.0.0)

Upozornenie:

  • po dplyr 1.0 nemusíte používať do už pre tento druh prípadoch
  • s map a map_dfr môžete vypočítať vaše predpovede a nasaďte ich pekne vo svojom tibble
2021-11-19 18:05:38
1

Váš objekt model_dna je údajov.rám (presnejšie: a tibble), ktorý obsahuje lm-objekty v druhom stĺpci "model_dna_group".

V lapply-hovor, mali by ste skontrolovať, ktoré stĺpec, nie celý údaje rám. Lapply pokúsi použiť predict na stĺpce údajov rám namiesto lm-objekty v druhom stĺpci.

Tak upraviť váš hovor a takto to funguje:

new_dna_w_predictions <- lapply(
                           X = model_dna$model_dna_group, 
                           FUN = predict, 
                           newdata = new_dna, 
                           interval = "prediction", 
                           level = 0.9
                          )
2021-11-19 17:22:23

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................