繁体   English   中英

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

[英]R plot.gam Error “Error in 1:object$nsdf : argument of length 0”

我试图在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)

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

谢谢。

如果仍然收到此消息,则需要将mgcvgam软件包更新到最新版本。 2018年2月, gam包发生了很大变化: 无法找到函数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会话中有gammgcv两个不兼容的软件包。 你使用gam::gam适合你的gam.mod ,但是然后使用mgcv::plot.gam绘制模型。

注意,使用::通常是正确的将在这里失效。 通常当两个包具有一些内部掩盖的函数时, ::是补救措施。 但是,对于mgcvgam ,这是完全不可能的。 所以我的建议是,如果你使用gam ,不要在你的R会话中触摸mgcv ,反之亦然。

所以,我开始一个新的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库。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM