Estou interessado em modelar a captura total de peixes usando gam em mgcv para modelar efeitos aleatórios simples para navios individuais (que fazem viagens repetidas ao longo do tempo na pesca). Eu tenho 98 sujeitos, então pensei em usar gam em vez de gamm para modelar os efeitos aleatórios. Meu modelo é:
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")
Eu codifiquei o efeito aleatório com bs = "re" e by = dum (eu li que isso me permitiria prever com os efeitos dos vasos em seus valores previstos ou zero). "dum" é um vetor de 1.
O modelo é executado, mas estou tendo problemas para prever. Escolhi um dos navios para as previsões (navio 21) e os valores médios para todo o resto, exceto o preditor de interesse pelas previsões (distância).
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)
O erro que estou recebendo é:
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
Acho que isso está sendo chamado porque o VesselID é um fator, mas estou usando-o de maneira suave para os efeitos aleatórios.
Consegui prever com sucesso o uso de gam sem os simples efeitos aleatórios (bs = "re").
Você pode fornecer algum conselho sobre como prever esse modelo sem o termo VesselID (mas ainda incluí-lo no ajuste)?
Obrigado!
fonte
exclude
? Eu tentei usar,c()
mas parece não funcionar.exclude = c("s(x0)", "s(x2)")
diga a partir do seguinte modelo ab<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat)
partir de?predict.gam
exemplos. Você precisa especificar as cordas do vetor passado paraexclude
com a notação usada porsummary()
ao exibir as informações sobre cada termo suave