Saya tertarik dalam memodelkan total tangkapan ikan menggunakan gam dalam mgcv untuk memodelkan efek acak sederhana untuk masing-masing kapal (yang melakukan perjalanan berulang kali dalam perikanan). Saya memiliki 98 subjek, jadi saya pikir saya akan menggunakan gam daripada gamm untuk memodelkan efek acak. Model saya adalah:
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")
Saya telah mengkodekan efek acak dengan bs = "re" dan by = dum (saya membaca bahwa ini akan memungkinkan saya untuk memprediksi dengan efek kapal pada nilai prediksi atau nol). "dum" adalah vektor 1.
Model berjalan, tetapi saya mengalami masalah dalam memprediksi. Saya memilih salah satu kapal untuk prediksi (Vessel21) dan nilai rata-rata untuk semua yang lain kecuali prediktor minat untuk prediksi (Jarak).
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)
Kesalahan yang saya dapatkan adalah:
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
Saya pikir ini dipanggil karena VesselID adalah faktor, tapi saya menggunakannya dengan lancar untuk efek acak.
Saya telah berhasil memprediksi penggunaan gam tanpa efek acak sederhana (bs = "re").
Bisakah Anda memberikan saran tentang cara memprediksi model ini tanpa istilah VesselID (tetapi masih memasukkannya dalam kesesuaian)?
Terima kasih!
sumber
exclude
? Saya mencoba menggunakanc()
tetapi sepertinya tidak berhasil.exclude = c("s(x0)", "s(x2)")
katakan dari model berikutb<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat)
dari?predict.gam
contoh. Anda perlu menentukan string dalam vektor diteruskanexclude
dengan notasi yang digunakan olehsummary()
saat menampilkan informasi tentang setiap istilah halus