首页 > 解决方案 > 创建游戏模型的 r 数据框

问题描述

如果我适合以下三种不同的游戏模型:

library(mgcv)
set.seed(0)
df <- data.frame(count = rpois(100,1),
                 pred1 = rnorm(100, 10, 1), 
                 pred2 = rnorm(100, 0, 1), 
                 pred3 = rnorm(100, 0, 1))

m1 <- gam(count ~ s(pred1),
             data = dat, 
             family = poisson(link="log"), 
             method = "REML", 
             select = TRUE)

m2 <- gam(count ~ s(pred2),
          data = dat, 
          family = poisson(link="log"), 
          method = "REML", 
          select = TRUE)

m3 <- gam(count ~ s(pred3),
          data = dat, 
          family = poisson(link="log"), 
          method = "REML", 
          select = TRUE)

然后尝试将它们放入单个数据框中:

models <- data.frame(m = c(m1,m2,m3))

我收到此错误:

Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : 
  cannot coerce class ‘&quot;family"’ to a data.frame

任何想法如何解决这一问题?我想创建一个结构,我可以循环从中做出一些预测。

标签: rdataframegam

解决方案


文档所示,返回值mgcv::gamgam类的对象。这gamObject继承自基础 R 的类对象 ( lmand glm),因此包括许多无法轻易绑定到 a 的二维中的底层元素data frame

拟合 Gam 对象

由函数返回的拟合 GAM 对象gam以及从类“glm”和“lm”继承的“gam”类。方法函数anova, logLik, influence, plot, predict, print,residualssummary此类存在。

通常要从这些模型对象中检索估计值,您会运行summary以返回命名元素的列表,例如系数、残差等。从那里,提取所需的组件,可以是向量、矩阵或列表到数据帧中。注意:由于基础组件的长度和类型的不同性质,没有简单的方法可以将模型的所有估计提取到数据框中。

你将不得不问自己:

  • 我想在数据框中对模型进行哪些具体估计?

  • 我是将所有三个模型估计值保存在一个数据框中还是使用数据框列表?

  • 存储哪些指标数据(数据、公式等)以区别于其他数据?

    StackOverflow R 帖子包含许多关于如何将模型估计值(如系数)提取到数据帧中的示例。

一种实现是定义一种方法来提取模型估计,其中输入参数是一个似乎只是所有三个模型之间差异的公式。

run_gam_models <- function(my_formula) {
      fit <- gam(my_formula,
                 data = dat, 
                 family = poisson(link="log"), 
                 method = "REML", 
                 select = TRUE)

      results <- summary(fit)

      df <- data.frame(results$coefficients, ...)
      return(df)
}

# LIST OF DATA FRAMES
coeffs_df_list <- sapply(names(dat)[-1], function(col) {
       f <- as.formula(paste0("count ~ ", col))
       run_gam_models(f)
}, simplify = FALSE)

# INDIVIDUAL DATA FRAMES
coeffs_df_list$pred1
coeffs_df_list$pred2
coeffs_df_list$pred3

Online Demo (使用glm


推荐阅读