पैदा भविष्यवाणी अंतराल के लिए अधिक से अधिक 1 रेखीय मॉडल में आर?

0

सवाल

मैं कोशिश कर रहा हूँ उत्पन्न करने के लिए भविष्यवाणी अंतराल समारोह का उपयोग कर की भविष्यवाणी() एक नया सेट के लिए डेटा की, लेकिन भर में एक से अधिक मॉडल है कि मैं उत्पन्न किया है एक डाटासेट के लिए. मैं हूँ अपेक्षाकृत युवा का उपयोग करने पर lapply है, लेकिन यह उपयोगी होना चाहिए इस प्रक्रिया में:

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

हालांकि, इस ड्रॉ निम्न त्रुटि:

में त्रुटि मिल(के रूप में.चरित्र(मज़ा), मोड = "समारोह", पर्यावरण = पर्यावरण) : वस्तु 'model_dna के' मोड 'समारोह' नहीं मिला था

मैं नहीं हूँ यकीन है कि कैसे करने के लिए सबसे अच्छा संरचना इस lapply समारोह, विशेष रूप से, जब इस्तेमाल किया जा रहा से अधिक भर में एक मॉडल. वहाँ है एक आम तौर पर क्लीनर तरीका है इस दृष्टिकोण के लिए?

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

सबसे अच्छा जवाब

1

यहाँ आप एक पूरा tidyverse समाधान:

# 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

पर बनाया 2021-11-19 द्वारा reprex पैकेज (v2.0.0)

नोटिस:

  • के बाद dplyr 1.0 आप की जरूरत नहीं है का उपयोग करने के लिए do अब के लिए इस तरह के मामलों में
  • के साथ map और map_dfr आप की गणना कर सकते हैं अपनी भविष्यवाणियों और उन्हें फिट में अच्छी तरह से अपने tibble
2021-11-19 18:05:38
1

अपने उद्देश्य model_dna एक डेटा है.फ्रेम (अधिक संक्षेप में: एक tibble) में शामिल है जो lm-वस्तुओं में अपने दूसरे स्तंभ "model_dna_group".

में lapply-आप कॉल का उल्लेख करना चाहिए करने के लिए उस स्तंभ नहीं, पूरे डेटा फ्रेम. Lapply की कोशिश करता है का उपयोग करने के लिए predict पर स्तंभों के डेटा फ्रेम के बजाय lm-वस्तुओं के भीतर दूसरे स्तंभ ।

तो संपादित करें, अपने फोन के रूप में इस प्रकार है और यह काम करता है:

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

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में