Saya mencoba mendapatkan prediksi untuk pengamatan dari objek lme. Ini seharusnya cukup mudah. Namun, karena saya mendapatkan berbagai jenis kesalahan untuk uji coba yang berbeda, menurut saya saya kehilangan sesuatu. Model saya adalah sebagai berikut:
model <- lme(log(child_mortality) ~ as.factor(cluster)*time +
my.new.time.one.transition.low.and.middle + ttd +
maternal_educ+ log(IHME_id_gdppc) + hiv_prev-1,
merged0,na.action=na.omit,method="ML",weights=varPower(form=~time),
random= ~ time| country.x,
correlation=corAR1(form = ~ time),
control=lmeControl(msMaxIter = 200, msVerbose = TRUE))
Ini berjalan dengan baik, cocok dengan data dengan baik dan hasilnya masuk akal. Sekarang untuk mendapatkan prediksi, saya telah mencoba yang berikut ini:
test.pred <- data.frame(time=c(10,10,10,10),country.x=c("Poland","Brazil",
"Argentina","France"),
my.new.time.one.transition.low.and.middle=c(1,1,1,0),
ttd=c(0,0,0,0),maternal_educ=c(10,10,10,10),
IHME_id_gdppc=c(log(5000),log(8000),log(8000),log(15000)),
hiv_prev=c(.005,.005,.005,.005),
cluster=c("One Transition, Middle Income","One Transition,
Middle Income","One Transition, Middle Income","Democracy,
High Income"))
>
> predict(model,test.pred,level=0)
Error in X %*% fixef(object) : non-conformable arguments
Jika saya mengecualikan, katakanlah, Prancis, dan hanya menyertakan negara-negara di mana cluster = "OneTransition, Middle Income" maka saya mendapatkan kesalahan yang berbeda
# create a toy data set
test.pred0 <-
expand.grid(time=20:29,country.x=c("Poland","Brazil","Argentina"))
z0 <-as.data.frame(cbind(my.new.time.one.transition.low.and.middle =
c(0,0,0,0,0,0,1,2,3,4), ttd=c(0,0,0,0,0,0,1,0,0,0),
maternal_educ=seq(from=10.0, to=12.0, length.out=10),
IHME_id_gdppc=log(seq(from=5000, to=8000, length.out=10)),
hiv_prev=rep(.005,10),
cluster=rep("One Transition, Middle Income",10)))
z <- rbind(z0,z0,z0)
test.pred <- cbind(test.pred0,z)
# check
head(test.pred)
> time country.x my.new.time.one.transition.low.and.middle ttd
> maternal_educ IHME_id_gdppc hiv_prev
> 1 20 Poland 0 0
> 10 8.51719319141624 0.005
> 2 21 Poland 0 0
> 10.2222222222222 8.58173171255381 0.005
> 3 22 Poland 0 0
> 10.4444444444444 8.64235633437024 0.005
> 4 23 Poland 0 0
> 10.6666666666667 8.69951474821019 0.005
> 5 24 Poland 0 0
> 10.8888888888889 8.75358196948047 0.005
> 6 25 Poland 0 0
> 11.1111111111111 8.80487526386802 0.005
> cluster
> 1 One Transition, Middle Income
> 2 One Transition, Middle Income
> 3 One Transition, Middle Income
> 4 One Transition, Middle Income
> 5 One Transition, Middle Income
> 6 One Transition, Middle Income
# run the predictions
predict(model,test.pred,level=0)
> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
> contrasts can be applied only to factors with 2 or more levels
Dalam contoh ini, masalahnya adalah karena cluster = "Satu Transisi, Pendapatan Menengah" sepanjang waktu.
Saya tidak mengerti mengapa ini menjadi masalah. Jika saya ingin mendapatkan prediksi () untuk bekerja, saya harus memasukkan semua variabel dari model, kan? Jelas, data input dalam panggilan model tidak akan menyertakan faktor yang diatur ke nilai yang sama untuk semua kasus. Namun, jika saya ingin mendapatkan prediksi hanya untuk subset data, atau untuk pengamatan baru, saya mungkin tertarik hanya dalam kasus-kasus di mana beberapa faktor selalu ditetapkan sama. Apakah masuk akal? Bagaimana saya bisa mendapatkan prediksi dalam kasus itu?
options(stringsAsFactors = FALSE)
, dan kemudian jalankan kode Anda. Itu akan mencegah sumber asli Andatest.pred
memiliki faktor sendiri.