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)
有人知道这里发生了什么或如何解决它?
谢谢.
如果您仍然收到此消息,则需要将您的mgcv和gam软件包更新到最新版本。gam2018 年 2 月对软件包进行了重大更改:找不到函数plot.gam。这意味着,通过包安装的GAMgam现在具有“Gam”类,并且即使mgcv包被加载,plot也不会选择mgcv::plot.gam绘制它。
但是,在 R 会话中同时拥有这两个包仍然不安全。所以2016年提出的以下建议还是很值得推荐的。
\n\n建议
\n\n使用这个玩具函数来检查 R 会话是否可以运行 GAM 分析可能是个好主意。
\n\nGAM_status <- function () {\n if (all(c("gam", "mgcv") %in% .packages())) print("Not OK")\n else print("OK")\n }\nRun Code Online (Sandbox Code Playgroud)\n\nnsdf是严格自由度的数量,这个术语专门用于mgcv. 正如您提到的:mgcv是plot.gam函数的来源。
问题是您的 R 会话中同时有gam和两个不兼容的包。mgcv您适合您gam.mod的gam::gam,但然后用 绘制模型mgcv::plot.gam。
请注意,通常使用的内容::在这里将失效。通常,当两个包有一些相互屏蔽的功能时,这::是补救措施。但是,对于mgcv和来说gam,这是完全不可能的。所以我的建议是,如果你使用gam,永远不要碰mgcv在 R 会话中触摸,反之亦然。
所以,我开始一个新的 R 会话,并执行以下操作,一切都很好!
\n\nlibrary(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)\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n\n\n谢谢您的回答。我从未真正加载过
\nmgcv,我只是假设它是gam. 我开始了一个新的 R 会话,您提供的代码有效。我发现它实际上是car图书馆引起了同样的问题。
mgcv并且gam彼此不依赖,但由于mgcv比 更流行gam,所以许多包都依赖于mgcv,例如,car:
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\nRun Code Online (Sandbox Code Playgroud)\n\n请注意“进口”字段,library(car)将同时加载这些包。