我试图在R中绘制一个gam对象,该对象是使用gam包制作的。我收到Error in 1:object$nsdf : argument of length 0 when using plot.gam中报告的相同错误。但是,在那里找到的解决方案(我认为是更新到最新版本)对我不起作用。我正在运行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)

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

谢谢你。

最佳答案

如果仍然收到此消息,则需要将mgcvgam软件包更新为最新版本。 2018年2月,gam软件包进行了重大更改:Could not find function plot.gam。这意味着,由gam程序包安装的GAM现在具有“Gam”类,即使加载了mgcv程序包,plot也不会选择mgcv::plot.gam进行绘制。

但是,在R session 中同时包含两个软件包仍然是不安全的。因此,仍然强烈建议您在2016年提出以下建议。

建议

最好具有此玩具功能,以检查R session 是否可以运行GAM分析。

GAM_status <- function () {
  if (all(c("gam", "mgcv") %in% .packages())) print("Not OK")
  else print("OK")
  }
nsdf,即严格自由度的数量,是mgcv中唯一使用的术语。如您所述:mgcvplot.gam函数的来源。

问题是您在R session 中同时具有gammgcv这两个不兼容的程序包。您可以将gam.modgam::gam拟合,然后使用mgcv::plot.gam绘制模型。

请注意,通常使用::所做的设置将在此处失效。通常,当两个程序包具有某些相互屏蔽的功能时,可以使用::来解决。但是,对于mgcvgam,这是完全不可能的。因此,我的建议是,如果您使用gam,请不要在R session 中触摸mgcv,反之亦然。

因此,我开始了一个新的R session ,然后执行以下操作,一切都很好!
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)

R plot.gam错误 &#34;Error in 1:object$nsdf : argument of length 0&#34;-LMLPHP


mgcvgam彼此不依赖,但是由于mgcvgam受欢迎,因此许多软件包都依赖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

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

关于R plot.gam错误 "Error in 1:object$nsdf : argument of length 0",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39042064/

10-12 19:29