5

我正在尝试在 R 中绘制一个 gam 对象,这是我使用 gam 包制作的。我收到了Error in 1:object$nsdf 中报告的相同错误:使用 plot.gam 时长度为 0 的参数。但是,在那里找到的解决方案更新到最新版本(我认为)对我不起作用。我正在运行 R 3.3.1、gam 1.12 和 mgcv 1.8.12(mgcv 是 plot.gam 函数的来源)。

不幸的是,我无法分享我正在使用的数据。然而,下面的代码——直接取自 Intro 的 p.294。使用 R 进行统计学习 - 为我重现了错误:

library(gam)
library(ISLR) # contains the Wage dataset used here
gam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)
plot(gam.mod)

有谁知道这里发生了什么或如何解决它?

谢谢你。

4

2 回答 2

4

如果您仍然收到此消息,则需要将您的mgcvgam包更新到最新版本。gam2018 年 2 月对包进行了重大更改:找不到函数 plot.gam。这意味着,由gam包安装的 GAM 现在具有“Gam”类,即使mgcv加载了包,plot也不会选择mgcv::plot.gam绘制它。

但是,在 R 会话中同时拥有这两个包仍然是不安全的。所以还是强烈推荐以下2016年提出的建议。


建议

使用这个玩具功能来检查 R 会话是否可以运行 GAM 分析可能是个好主意。

GAM_status <- function () {
  if (all(c("gam", "mgcv") %in% .packages())) print("Not OK")
  else print("OK")
  }

nsdf严格自由度的个数,一个专门用在的术语mgcv。正如您所提到的:mgcvplot.gam函数的来源。

问题是你的 R 会话中同时有gam两个mgcv不兼容的包。你适合你gam.modgam::gam,然后用 绘制模型mgcv::plot.gam

请注意,通常情况下使用的::内容将在此处失效。通常当两个包有一些inter-masked函数时,这::是补救措施。但是,对于mgcvgam,这是完全不可能的。所以我的建议是,如果您使用gam,请不要mgcv在您的 R 会话中触摸,反之亦然。

所以,我开始一个新的 R 会话,并执行以下操作,一切都很好!

library(gam)
library(ISLR) # contains the Wage dataset used here
gam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)
par(mfrow = c(2,2)); plot(gam.mod)

在此处输入图像描述


谢谢您的回答。我从来没有真正加载过mgcv,我只是假设它是gam. 我开始了一个新的 R 会话,您提供的代码有效。我发现它实际上car是导致相同问题的库。

mgcv并且gam不相互依赖,但由于mgcv比 更受欢迎gam,许多包都依赖于mgcv,例如car

car: Companion to Applied Regression

Functions and Datasets to Accompany J. Fox and S. Weisberg, An R  Companion to
Applied Regression, Second Edition, Sage, 2011.
Version:    2.1-3
Depends:    R (≥ 3.2.0)
Imports:    MASS, mgcv, nnet, pbkrtest (≥ 0.4-4), quantreg, grDevices, utils,
            stats, graphics

注意“Imports”字段,library(car)将同时加载这些包。

于 2016-08-19T15:06:49.537 回答
0

我的mgcv版本是 1.8-28,但我仍然有这个问题。考虑将所有 char 变量转换为因子并重新运行gam()or bam()。这个对我有用。

于 2019-07-03T01:39:04.347 回答