簡體   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