R'de 1'den fazla doğrusal model için tahmin aralıkları üretiliyor mu?

0

Soru

Yeni bir veri kümesi için predict() işlevini kullanarak, ancak bir veri kümesi için oluşturduğum birden fazla modelde tahmin aralıkları oluşturmaya çalışıyorum. Lapply'yi kullanma konusunda nispeten deneyimsizim, ancak bu süreçte yardımcı olması gerektiğini düşünüyorum:

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

Ancak, bu aşağıdaki hatayı çizer:

Get(as.karakter(EĞLENCE), mod = "işlev", çevre = çevre) : 'işlev' modunun 'model_dna' nesnesi bulunamadı

Özellikle birden fazla modelde kullanıldığında, bu lapply işlevini en iyi nasıl yapılandıracağımdan emin değilim. Buna yaklaşmanın genel olarak daha temiz bir yolu var mı?

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

En iyi cevabı

1

Burada tam bir var tidyverse çözüm:

# 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

Reprex paketi (v2.0.0)tarafından 2021-11-19 tarihinde oluşturuldu.

Farkına varmak:

  • sonra dplyr 1.0 kullanmanıza gerek yok do artık bu tür davalar için
  • ile map ve map_dfr tahminlerinizi hesaplayabilir ve tahminlerinize mükemmel bir şekilde uyabilirsiniz. tibble
2021-11-19 18:05:38
1

Nesneniz model_dna bir veri yoktur.aşağıdakileri içeren çerçeve (daha doğrusu: bir kaval kemiği) lm- ikinci sütunundaki nesneler "model_dna_group".

İçinde lapply- arama tüm veri çerçevesine değil, o sütuna başvurmalısınız. Lapply kullanmaya çalışır predict veri çerçevesinin sütunları yerine lm- ikinci sütundaki nesneler.

Bu yüzden çağrınızı aşağıdaki gibi düzenleyin ve çalışır:

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

Diğer dillerde

Bu sayfa diğer dillerde

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