2016-08-19 11 views
5

Próbuję wykreślić obiekt gam w R, który zrobiłem z pakietem gier. Otrzymuję ten sam błąd zgłoszony w Error in 1:object$nsdf : argument of length 0 when using plot.gam. Jednak znalezione tam rozwiązanie, uaktualniające do najnowszych wersji (chyba), nie działa dla mnie. Używam R 3.3.1, gam 1.12 i mgcv 1.8.12 (mgcv jest tam, gdzie jest funkcja plot.gam).

Niestety, nie mogę udostępnić danych, z którymi pracuję. Jednak poniższy kod - wyciągnął bezpośrednio z s.294 Intro. do nauki statystycznej z R - odtwarza błąd dla mnie:

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) 

Czy ktoś wie, co się tutaj dzieje lub jak to naprawić?

Dziękuję.

Odpowiedz

4

Sugestia

To może być dobry pomysł mieć tę funkcję zabawki, aby sprawdzić, czy sesja R jest OK, aby uruchomić analizę GAM.

GAM_status <- function() { 
    if (all(c("gam", "mgcv") %in% .packages())) print("Not OK") 
    else print("OK") 
    } 

nsdf jest liczba ścisłym stopniu swobody, to termin używany wyłącznie w mgcv. Jak wspomniałeś: mgcv to skąd pochodzi funkcja plot.gam.

Problem polega na tym, że masz gam i mgcv, dwa niekompatybilne pakiety w twojej sesji R w tym samym czasie. Pasujesz do gam.mod z gam::gam, ale następnie wykreśl model za pomocą mgcv::plot.gam.

Uwaga, to, co jest normalnie prawdziwe, używając ::, straci ważność tutaj. Zwykle, gdy dwa pakiety mają pewne funkcje zamaskowane, środkiem zaradczym jest ::. Ale dla mgcv i gam jest to całkowicie niemożliwe. Tak więc moja sugestia brzmi: jeśli używasz gam, nigdy nie dotykaj mgcv w twojej sesji R i na odwrót.

Tak, zaczynam świeżą sesję R i wykonaj następujące czynności, wszystko jest w porządku!

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) 

enter image description here


Dziękuję za odpowiedź. Nigdy faktycznie nie załadowałem mgcv, właśnie założyłem, że to była zależność dla gam. Rozpocząłem nową sesję R, a podany przez ciebie kod zadziałał. Okazało się, że jest to biblioteka car, która powoduje ten sam problem.

mgcv i gam nie zależą od siebie, ale ponieważ mgcv jest bardziej popularna niż gam, wiele pakietów posiada zależność od mgcv np 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 

Uwaga „Import” Pole , library(car) załaduje te pakiety w tym samym czasie.

+0

Dziękuję za odpowiedź. Nigdy właściwie nie załadowałem MGCV, po prostu założyłem, że to zależność od gam.Zaczynałem nową sesję R, a podany przez ciebie kod zadziałał. Zauważyłem, że to właśnie biblioteka '' 'car''' powoduje ten sam problem. Notacja '' '' '' 'nie rozwiązuje problemu między' '' gam''' '' '' '' '' '' '' '' '. –

Powiązane problemy