R plot.gam错误"1中的错误:对象$ nsdf:长度为0的参数"

D.M*_*cer 5 plot regression r gam mgcv

我试图在R中绘制一个gam对象,这是我用gam包创建的.我收到在1中的错误中报告的相同错误:对象$ 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)
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

李哲源*_*李哲源 4

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

\n\n

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

\n\n
\n\n

建议

\n\n

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

\n\n
GAM_status <- function () {\n  if (all(c("gam", "mgcv") %in% .packages())) print("Not OK")\n  else print("OK")\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

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

\n\n

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

\n\n

请注意,通常使用的内容::在这里将失效。通常,当两个包有一些相互屏蔽的功能时,这::是补救措施。但是,对于mgcv和来说gam,这是完全不可能的。所以我的建议是,如果你使用gam,永远不要碰mgcv在 R 会话中触摸,反之亦然。

\n\n

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

\n\n
library(gam)\nlibrary(ISLR) # contains the Wage dataset used here\ngam.mod <- gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)\npar(mfrow = c(2,2)); plot(gam.mod)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n
\n\n
\n

谢谢您的回答。我从未真正加载过mgcv,我只是假设它是gam. 我开始了一个新的 R 会话,您提供的代码有效。我发现它实际上是car图书馆引起了同样的问题。

\n
\n\n

mgcv并且gam彼此不依赖,但由于mgcv比 更流行gam,所以许多包都依赖于mgcv,例如,car

\n\n
car: Companion to Applied Regression\n\nFunctions and Datasets to Accompany J. Fox and S. Weisberg, An R  Companion to\nApplied Regression, Second Edition, Sage, 2011.\nVersion:    2.1-3\nDepends:    R (\xe2\x89\xa5 3.2.0)\nImports:    MASS, mgcv, nnet, pbkrtest (\xe2\x89\xa5 0.4-4), quantreg, grDevices, utils,\n            stats, graphics\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n