2

我正在尝试执行以下任务:获取一个数据集,并将其提供给多个预先设计的模型,以便我可以看到预测如何根据不同的模型而有所不同。以下是数据通常的样子:

data_1:

  Year day station1 station2 station3 hour minute avtemp
1 2020   1    1.124    1.018    0.852   00     30        0.998
2 2020   1    1.123    1.020    0.848   01      0        0.997
3 2020   1    1.119    1.013    0.842   01     30        0.991
4 2020   1    1.124    1.016    0.845   02      0        0.995
5 2020   1    1.124    1.016    0.842   02     30        0.994
6 2020   1    1.124    1.017    0.840   03      0        0.994

然后,使用结构非常相似的单独数据集生成模型(除了它们被“stand”划分的事实,我需要为每个实验单元创建一个模型,因此需要多个模型),使用以下代码:


models_temp <- data_2 %>% 
  group_by(stand) %>% 
  do(modeltt = lm(projectedtemp ~ avtemp, data = .)) %>% 
  ungroup()

如您所见,模型中的自变量与 data_1 中的列匹配,因此假设它应该读取干净。然后,此代码生成一个包含两列的数据集:一列包含支架,另一列带有每个支架的模型,每个模型的大量数据以 list() 格式存储,如下所示:

stand             model
trees             list(coefficients = c(`(Intercept)` = 0.66135577718....)
shrubs            list(coefficients = c(`(Intercept)` = 0.6468382809102...)

然后我尝试使用各种版本的 add_predictions,如下所示,在列表中使用这些模型从数据集中生成预测:


data_3 <- spread_predictions(data = data_1, models = models_temp)

唉,我收到以下错误:


Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "list"


我搜索了 StackOverflow 并找不到尝试这样做的人的具体示例,至少在不必大幅重组他们的模型的情况下是这样。有谁知道可能有一个更好的功能来使我认为是一项相对简单的任务工作,一种更好的方式来构建我的模型/数据,或者对我遇到的这个错误进行简单的修复?提前非常感谢大家。

加载的所有库如下,我相信大部分这些东西都依赖于“modelr”包:

library(dplyr)
library(ggplot2)
library(tidyverse)
library(gridExtra)
4

1 回答 1

2

我们可以遍历listwithmap并应用函数

library(purrr)
map(models_temp$modeltt, ~ spread_predictions(data = data_1, models = .x)) 
于 2020-12-29T22:58:57.527 回答