Predict.lm in R erkennt keine neuen Daten

Ich führe eine lineare Regression durch, bei der der Prädiktor durch einen anderen Wert kategorisiert wird und Probleme beim Generieren von modellierten Antworten für neue Daten auftreten.

Zuerst generiere ich einige Zufallswerte für den Prädiktor und die Fehlerausdrücke. Ich konstruiere dann die Antwort. Beachten Sie, dass der Koeffizient des Prädiktors vom Wert einer kategorialen Variablen abhängt. Ich erstelle eine Designmatrix basierend auf dem Prädiktor und seiner Kategorie.

set.seed(1)

category = c(rep("red", 5), rep("blue",5))
x1 = rnorm(10, mean = 1, sd = 1)
err = rnorm(10, mean = 0, sd = 1)

y = ifelse(category == "red", x1 * 2, x1 * 3)
y = y + err

df = data.frame(x1 = x1, category = category)

dm = as.data.frame(model.matrix(~ category + 0, data = df))
dm = dm * df$x1

fit = lm(y ~ as.matrix(dm) + 0, data = df)

# This line will not produce a warning
predictOne = predict.lm(fit, newdata = dm)

# This line WILL produce a warning
predictTwo = predict.lm(fit, newdata = dm[1:5,])

Die Warnung lautet:

'newdata' hatte 5 Zeilen, aber die gefundenen Variablen haben 10 Zeilen

Wenn ich mich nicht sehr irre, sollte ich keine Probleme mit den Variablennamen haben. (Es gibt ein oder zwei Diskussionen in diesem Forum, die auf dieses Problem hindeuten.) Beachten Sie, dass die erste Vorhersage gut funktioniert, die zweite jedoch nicht. Die einzige Änderung besteht darin, dass die zweite Vorhersage nur die ersten fünf Zeilen der Entwurfsmatrix verwendet.

Gedanken?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage