HOWTO · R

Die Funktion `predict()` für ein lineares Regressionsmodell in R verwenden

Erfahren Sie, wie Sie mit R und predict() Vorhersagen aus einem angepassten linearen Regressionsmodell berechnen und newdata passend zur Modellformel formatieren.

Auf dieser Seite

Um mit R Antwortwerte aus einem angepassten linearen Regressionsmodell vorherzusagen, rufen Sie predict() mit dem Modell und einem Dataframe im Argument newdata auf. Dieser Dataframe muss eine Merkmalsspalte enthalten, deren Name exakt dem Namen in der Modellformel entspricht. Ein Modell, das mit lm(Response ~ Feature, data = training) angepasst wurde, erwartet beispielsweise in newdata eine Spalte mit genau dem Namen Feature.

Die Funktion predict() für ein lineares Regressionsmodell in R verwenden

Das folgende eigenständige Beispiel wurde erfolgreich ausgeführt und lieferte drei Vorhersagen. Es erstellt einen kleinen Trainings-Dataframe, passt das Modell an und berechnet Vorhersagen für drei neue Merkmalswerte. In der Formel bezeichnet Response die zu schätzende Größe und Feature die Eingangsgröße. predict() gibt für jede Zeile in newdata eine Vorhersage zurück.

Feature <- 15:24
set.seed(654)
Response <- 2 * Feature + 5 + rnorm(10, mean = 0, sd = 3)
training <- data.frame(Response = Response, Feature = Feature)
model <- lm(Response ~ Feature, data = training)

newdata <- data.frame(Feature = c(20.5, 16.5, 22.5))
predict(object = model, newdata = newdata)

Mit diesem Aufruf wird das angepasste model auf die Zeilen von newdata angewendet. Für jede übergebene Zeile wird in derselben Reihenfolge ein Schätzwert zurückgegeben. Die Werte in Feature sind die Eingaben für den angepassten Zusammenhang; Response ist die gesuchte Größe. Wenn Sie die Argumente object und newdata benennen, wird ihre jeweilige Funktion deutlich. Außerdem ist so leichter zu erkennen, welcher Dataframe für die Vorhersage und welcher beim Aufruf von lm() zum Trainieren verwendet wird.

Übergeben Sie neue Werte als Dataframe und nicht als einfachen Vektor: predict(model, newdata = c(20.5, 16.5, 22.5)) liefert dieser Vorhersagemethode nicht die erwartete tabellarische Eingabe. Achten Sie auch auf den Spaltennamen aus der Formel. Ein Dataframe, der mit data.frame(NewFeature = c(20.5, 16.5, 22.5)) erstellt wurde, enthält nicht die von der angepassten Formel angeforderte Spalte Feature. In diesem Fall kann R Feature in der ursprünglichen Umgebung des Modells suchen. Dadurch kann eine Warnung zu abweichenden Zeilenzahlen entstehen, und die Vorhersagen verwenden möglicherweise nicht die drei angeforderten Werte. Das genaue Verhalten hängt davon ab, welche Variablen dort verfügbar sind. Ein zurückgegebener Vektor beweist daher nicht, dass R die neuen Werte verwendet hat. Erstellen Sie newdata mit data.frame(Feature = ...), damit die vorgesehenen Eingaben ausdrücklich übergeben werden.

Halten Sie beim Anpassen des Beispiels die Modellformel und die Vorhersagedaten aufeinander abgestimmt. Verwendet das Modell einen anderen Prädiktornamen, muss eine Spalte in newdata denselben Namen tragen. Bei mehreren Prädiktoren fügen Sie für jeden in der Formel verwendeten Prädiktor eine Spalte hinzu. Jede Zeile steht dann für einen Fall, für den das Modell Response schätzt. Das Modellobjekt enthält außerdem Informationen aus der Anpassung. Die Vorhersagedaten sollten deshalb die neuen Fälle beschreiben; vermeiden Sie es, Trainingsvariablen versehentlich zu wiederholen oder umzubenennen.

Das Ergebnis ist ein numerischer Vektor mit Vorhersagen, kein neu angepasstes Modell und keine Tabelle mit den ursprünglichen Eingaben. Wenn Sie die Schätzwerte zusammen mit den übergebenen Werten betrachten möchten, behalten Sie newdata bei und kombinieren Sie es mit dem zurückgegebenen Vektor in einem Dataframe. Weisen Sie den Aufruf beispielsweise einer Variablen wie predicted zu und erstellen Sie anschließend eine Ergebnistabelle mit Feature = newdata$Feature und Response = predicted. So ist die Zuordnung zwischen jedem angeforderten Merkmalswert und seiner Schätzung klar. Für Unsicherheitsintervalle unterstützt predict.lm() außerdem Intervalloptionen; verwenden Sie diese, wenn Sie Intervalle statt einzelner Punktschätzungen benötigen.