Ich versuche, Vorhersagen für Beobachtungen von einem Objekt zu erhalten. Dies soll recht einfach sein. Da ich jedoch verschiedene Arten von Fehlern für verschiedene Versuche bekomme, scheint mir etwas zu fehlen. Mein Modell ist das folgende:
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))
Es läuft gut, passt gut zu den Daten und die Ergebnisse sind sinnvoll. Um Vorhersagen zu erhalten, habe ich Folgendes versucht:
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
Wenn ich beispielsweise Frankreich ausschließe und nur Länder einbeziehe, in denen cluster = "OneTransition, Middle Income" ist, wird ein anderer Fehler angezeigt
# 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
In diesem Beispiel ist das Problem ständig auf cluster = "One Transition, Middle Income" zurückzuführen.
Ich verstehe nicht, warum das ein Problem ist. Wenn ich Vorhersagen () zum Laufen bringen möchte, muss ich alle Variablen aus dem Modell einbeziehen, oder? Offensichtlich enthalten die Eingabedaten im Aufruf des Modells nicht in allen Fällen einen Faktor, der auf die gleichen Werte eingestellt ist. Wenn ich jedoch Vorhersagen nur für eine Teilmenge der Daten oder für neue Beobachtungen erhalten möchte, interessiert mich dies möglicherweise nur in Fällen, in denen ein Faktor immer gleich eingestellt ist. Macht das Sinn? Wie kann ich in diesem Fall Vorhersagen erhalten?
options(stringsAsFactors = FALSE)
und dann Ihren Code auszuführen. Das würde verhindern, dass Ihr Originaltest.pred
seine eigenen Faktoren hat.