Я заинтересован в моделировании общего вылова рыбы с использованием gam в mgcv для моделирования простых случайных эффектов для отдельных судов (которые совершают многократные поездки во время промысла). У меня 98 предметов, поэтому я решил использовать гамму вместо гамма для моделирования случайных эффектов. Моя модель:
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")
Я закодировал случайный эффект с помощью bs = "re" и by = dum (я читал, что это позволило бы мне прогнозировать с помощью эффектов судна при их прогнозируемых значениях или нулевых значениях). «dum» - это вектор 1.
Модель работает, но у меня проблемы с прогнозированием. Я выбрал один из сосудов для предсказаний (Vessel21) и средние значения для всего остального, кроме предиктора интереса для предсказаний (Расстояние).
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)
Я получаю ошибку:
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
Я думаю, что это вызвано, потому что VesselID является фактором, но я использую его для случайных эффектов.
Я был в состоянии успешно предсказать, используя gam без простых случайных эффектов (bs = "re").
Можете ли вы дать какой-либо совет о том, как предсказать эту модель без термина VesselID (но все же включить его в пример)?
Спасибо!
exclude
? Я пытался использовать,c()
но это не похоже на работу.exclude = c("s(x0)", "s(x2)")
скажем, из следующей моделиb<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat)
из?predict.gam
примеров. Вам нужно указать строки в векторе, передаваемомexclude
в нотации, используемойsummary()
при отображении информации о каждом гладком члене