产生预测的时间间隔超过1线性模型R?

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
                          )

然而,这种吸取的以下错误:

错误中获得(。字符的(有趣),mode="功能",环境=环境): 目'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 再用于这种情况下
  • mapmap_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ý
..................................................................................................................