Tôi đang cố gắng để có được dự đoán cho các quan sát từ một đối tượng lme. Điều này được cho là khá đơn giản. Tuy nhiên, vì tôi nhận được các loại lỗi khác nhau cho các thử nghiệm khác nhau, nên dường như tôi đang thiếu một cái gì đó. Mô hình của tôi là như sau:
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))
Nó chạy tốt, phù hợp với dữ liệu và kết quả có ý nghĩa. Bây giờ để có được dự đoán tôi đã thử như sau:
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
Nếu tôi loại trừ, giả sử, Pháp và chỉ bao gồm các quốc gia có cụm = "OneTransition, Thu nhập trung bình" thì tôi sẽ gặp một lỗi khác
# 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
Trong ví dụ này, vấn đề là do cluster = "Một lần chuyển đổi, thu nhập trung bình" mọi lúc.
Tôi không hiểu tại sao đây là một vấn đề. Nếu tôi muốn để dự đoán () hoạt động, tôi phải bao gồm tất cả các biến từ mô hình, phải không? Rõ ràng, dữ liệu đầu vào trong cuộc gọi của mô hình sẽ không bao gồm yếu tố được đặt thành cùng giá trị cho tất cả các trường hợp. Tuy nhiên, nếu tôi muốn nhận dự đoán chỉ cho tập hợp con của dữ liệu hoặc cho các quan sát mới, tôi có thể chỉ quan tâm đến trong trường hợp một số yếu tố luôn được đặt là giống nhau. Liệu nó có ý nghĩa? Làm thế nào tôi có thể nhận được dự đoán trong trường hợp đó?
options(stringsAsFactors = FALSE)
và sau đó chạy mã của bạn. Điều đó sẽ ngăn chặn bản gốc của bạntest.pred
có các yếu tố riêng của nó.