Interesuje mnie modelowanie całkowitego połowu ryb za pomocą gam w mgcv do modelowania prostych efektów losowych dla poszczególnych statków (które odbywają wielokrotne podróże w czasie na łowisku). Mam 98 przedmiotów, więc pomyślałem, że użyję gam zamiast gamma do modelowania efektów losowych. Mój model to:
modelGOM <- gam(TotalFish ~ factor(SetYear) + factor(SetMonth) + factor(TimePeriod) +
s(SST) + s(VesselID, bs = "re", by = dum) + s(Distance, by = TimePeriod) +
offset(log(HooksSet)), data = GOM, family = tw(), method = "REML")
Zakodowałem losowy efekt za pomocą bs = "re" i by = dum (czytałem, że to pozwoli mi przewidzieć z efektami naczynia przy ich przewidywanych wartościach lub zero). „dum” jest wektorem 1.
Model działa, ale mam problemy z przewidywaniem. Wybrałem jeden z naczyń do prognoz (Vessel21) i średnie wartości dla wszystkiego innego oprócz predyktora zainteresowania prognozami (Odległość).
data.frame("Distance"=seq(min(GOM$Distance),max(GOM$Distance),length = 100),
"SetYear" = '2006',
"SetMonth" = '6',
"TimePeriod" = 'A',
"SST" = mean(GOM$SST),
"VesselID" = 'Vessel21',
"dum" = '0', #to predict without vessel effect
"HooksSet" = mean(GOM$HooksSet))
pred_GOM_A_Swordfish <- predict(modelGOM, grid.bin.GOM_A_Swordfish, type = "response",
se = T)
Występuje błąd:
Error in Predict.matrix.tprs.smooth(object, dk$data) :
NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In Ops.factor(xx, object$shift[i]) : - not meaningful for factors
Myślę, że jest to wywoływane, ponieważ VesselID jest czynnikiem, ale używam go jako płynnego dla losowych efektów.
Udało mi się z powodzeniem przewidzieć za pomocą gam bez prostych efektów losowych (bs = „re”).
Czy możesz udzielić porady, jak przewidzieć ten model bez określenia VesselID (ale nadal uwzględniać go w dopasowaniu)?
Dziękuję Ci!
źródło
exclude
? Próbowałem użyć,c()
ale nie działa.exclude = c("s(x0)", "s(x2)")
powiedzmy z poniższego modelub<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat)
z?predict.gam
przykładów. Musisz podać ciągi znaków w wektorze przekazywanymexclude
za pomocą notacji używanejsummary()
podczas wyświetlania informacji o każdym gładkim terminie