Menu

Lineare Regression in R: lm(), summary() und predict()

Passe eine Regression mit lm() an, lies jeden Block von summary() - Koeffizienten, Standardfehler, p-Werte, Bestimmtheitsmaß, F-Statistik - und erstelle Vorhersagen mit predict().

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Die Idee: die Kleinste-Quadrate-Gerade

Die lineare Regression legt eine Gerade durch eine Punktwolke: y = Achsenabschnitt + Steigung × x. Aus allen möglichen Geraden wählt lm() diejenige, die die Summe der quadrierten Residuen minimiert - ein Residuum ist der senkrechte Abstand zwischen einem Punkt und der Geraden. Das Quadrieren lässt große Fehlschläge überproportional zählen, weshalb ein einziger wilder Ausreißer die ganze Anpassung kippen kann.

Wo die Korrelation dir eine einheitenlose Zahl für "Wie eng bewegen sich diese gemeinsam?" gibt, gibt dir die Regression eine Gleichung - mit Einheiten, einer interpretierbaren Steigung und der Maschinerie zum Vorhersagen.

Lies die Formel als "modelliere mpg als Funktion von wt". Die beiden Koeffizienten sind die angepasste Gerade: mpg ≈ 37,3 − 5,3 × Gewicht. Die Steigung hat echte Einheiten - jede zusätzlichen 1000 Pfund Auto (wt ist in 1000-Pfund-Einheiten) kosten etwa 5,3 Meilen pro Gallone. Der Achsenabschnitt (37,3 mpg bei Gewicht null) ist bloß der Schnittpunkt der Geraden mit der Null; kein Auto wiegt nichts, also überinterpretiere ihn nicht.

Der summary()-Durchgang

summary(fit) ist die Ausgabe, deren Interpretation jeder Statistikkurs verlangt. Führ sie aus und nimm sie dann Block für Block:

Call - gibt das angepasste Modell wieder. Jetzt banal, ein Lebensretter, wenn du sechs Modellobjekte jonglierst.

Residuals - die Fünf-Zahlen-Zusammenfassung der Reste (tatsächlich − vorhergesagt). Du willst den Median nahe 0 und grobe Symmetrie zwischen Min/Max und 1Q/3Q; starke Asymmetrie deutet an, dass dem Geradenmodell etwas fehlt.

Coefficients - das Herz der Ausgabe, eine Zeile pro Term:

  • Estimate - der angepasste Wert. Für wt ist er −5,34: jede zusätzlichen 1000 Pfund gehen mit etwa 5,3 mpg weniger einher. Übersetze die Steigung immer in einen Satz mit Einheiten; dieser Satz ist der gesamte praktische Gehalt des Modells.
  • Std. Error - wie stark die Schätzung über wiederholte Stichproben wackeln würde. Schätzungen, die keine zwei Standardfehler von null entfernt sind, stehen wacklig.
  • t value - Estimate ÷ Std. Error: wie viele Standardfehler der Koeffizient von null entfernt liegt (hier −9,56).
  • Pr(>|t|) - der p-Wert für "Könnte dieser Koeffizient wirklich null sein?" Für wt liegt er bei etwa 1,3e-10: Hätte das Gewicht wirklich keinen linearen Zusammenhang mit mpg, würde eine so steile Steigung in einer Stichprobe von 32 praktisch nie auftreten. Kleiner p-Wert = Evidenz, dass der Zusammenhang existiert - kein Beweis, dass das Modell korrekt ist, und kein Maß für Bedeutsamkeit (ein winziger, präzise geschätzter Effekt bekommt ebenfalls einen winzigen p-Wert).
  • Signif. codes / Sterne - eine optische Kurzschrift für die p-Wert-Spalte. Bequem; fügt keine Information hinzu.

Residual standard error: 3.05 on 30 degrees of freedom - die typische Größe eines Vorhersagefehlers, in den Einheiten der Zielgröße: Vorhersagen liegen typischerweise um etwa 3 mpg daneben. Beurteile das an der Skala von mpg (die etwa von 10 bis 34 reicht).

Multiple R-squared: 0.75 - das Gewicht erklärt etwa 75 % der Varianz in mpg. Adjusted R-squared (0,74) berechnet das mit einem Abschlag pro Prädiktor neu, denn die rohe Version kann beim Hinzufügen von Variablen nur steigen - selbst bei reinem Rauschen. Beim Vergleich von Modellen mit unterschiedlich vielen Prädiktoren ist die adjustierte die ehrliche. Und widersteh dem Reflex "gutes Modell = hohes R²": Ein wirklich nützlicher Effekt kann in einem Modell mit niedrigem R² stecken (verrauschte Zielgröße, einer von vielen Treibern), während ein hohes R² aus Überanpassung oder einer durchgesickerten Variablen stammen kann.

F-statistic: 91.4 ... p-value: 1.29e-10 - der Gesamtmodelltest: Schlägt dieses Modell "sag einfach für alle den Mittelwert vorher"? Bei einem Prädiktor dupliziert er den t-Test der Steigung (beachte 9,56² ≈ 91,4); bei mehreren Prädiktoren wird er zum gemeinsamen Test, dass mindestens ein Koeffizient ungleich null ist. Seine Maschinerie ist dieselbe Varianzzerlegung wie bei der ANOVA.

Multiple Regression: die anderen konstant halten

Prädiktoren fügst du mit + hinzu:

Die Interpretation ändert sich in einer entscheidenden Hinsicht. Jedes Estimate ist nun der Effekt dieses Prädiktors bei konstant gehaltenen anderen: Der wt-Koeffizient (etwa −3,9, herunter von −5,3) ist der mpg-Preis zusätzlichen Gewichts beim Vergleich von Autos mit derselben PS-Zahl. Die −5,3 der einfachen Regression bündelte still die Tatsache ein, dass schwerere Autos auch dazu neigen, stärker zu sein; die multiple Regression entbündelt das. Deshalb verschieben sich Koeffizienten auch, wenn du Variablen hinzufügst - korreliert der neue Prädiktor mit einem alten, ändert sich die Stellenbeschreibung des alten. Das Bestimmtheitsmaß klettert auf etwa 0,83, und hier ist die adjustierte Version der faire Vergleich mit dem Einprädiktor-Modell.

Vorhersagen: predict()

Das angepasste Modell ist eine Funktion; predict() wertet sie aus. Bau einen newdata-Data-Frame, dessen Spaltennamen exakt zu den Prädiktoren passen:

Die beiden Intervalltypen beantworten verschiedene Fragen, und sie zu verwechseln ist ein klassischer Prüfungsfehler:

  • interval = "confidence" - Unsicherheit über den Durchschnitt: "Wo liegt für alle Autos mit 2500 Pfund der mittlere mpg-Wert?" Schmal, und es schrumpft, wenn die Datenmenge wächst.
  • interval = "prediction" - der Bereich, in dem ein einzelnes neues Auto dieses Gewichts wahrscheinlich landet. Viel breiter, denn ein einzelnes Auto bringt seine eigene Streuung um die Gerade mit - Streuung, die keine Datenmenge wegmittelt.

Ein Konfidenzintervall zu berichten, wenn die Frage sich auf eine neue Beobachtung bezieht, überzeichnet deine Präzision dramatisch.

Diagnostik und die Extrapolationsfalle

summary() sagt dir, was das Modell schätzt; die Residuenplots sagen dir, ob du es glauben solltest. In einer interaktiven Sitzung:

par(mfrow = c(2, 2))
plot(fit)   # four diagnostic plots

Worauf du achtest: Residuals vs Fitted sollte eine formlose Wolke sein - eine Kurve heißt, die Beziehung ist nicht geradlinig; ein Trichter (Streuung wächst mit den angepassten Werten) heißt nicht konstante Varianz, und deine Standardfehler stimmen nicht. Die Punkte im Q-Q-Plot sollten sich an die Linie schmiegen - schwere Ränder bedeuten, dass Ausreißer die Anpassung verzerren. Scale-Location ist erneut die Trichterprüfung. Residuals vs Leverage markiert einflussreiche Punkte - Beobachtungen, die allein die Koeffizienten ziehen (in mtcars tauchen hier gern exotische Autos wie der Chrysler Imperial auf). Ein schnelles Streudiagramm der Rohdaten vor der Anpassung erwischt das meiste davon früh.

Schließlich die Falle, die keine Diagnostik erwischt: Extrapolation. Das Modell hat von Autos mit etwa 1500-5400 Pfund gelernt. Füttere predict() mit einem wt von 8, und es gibt fröhlich einen negativen mpg-Wert zurück - die Mathematik verlängert die Gerade ewig, aber die Evidenz endet am Rand der Daten. Sag nur innerhalb (oder nahe) des Bereichs vorher, auf dem du angepasst hast.

Was du mitnimmst

  • fit <- lm(y ~ x, data = df) passt die Kleinste-Quadrate-Gerade an; coef(fit) ist die Gleichung, summary(fit) der vollständige Bericht.
  • Lies Estimates als Sätze mit Einheiten; Pr(>|t|) fragt "Könnte das null sein?", nicht "Ist das bedeutsam?".
  • Der Residualstandardfehler ist der typische Fehler in echten Einheiten; das adjustierte Bestimmtheitsmaß ist die faire Zahl zum Modellvergleich.
  • In der multiplen Regression bedeutet jeder Koeffizient "bei konstant gehaltenen anderen" - und Koeffizienten verschieben sich, wenn korrelierte Prädiktoren dazukommen.
  • predict(fit, newdata, interval = ...): "confidence" für den Mittelwert, "prediction" für einen neuen Einzelfall - das breite.
  • Prüfe plot(fit) auf Kurven, Trichter und einflussreiche Punkte; trau Vorhersagen außerhalb des Datenbereichs nie.

Als Nächstes: wenn die Zielgröße ein Ja/Nein statt einer Zahl ist - logistische Regression mit glm().

Häufig gestellte Fragen

Wie führt man in R eine lineare Regression durch?

Mit lm() und einer Formel: fit <- lm(mpg ~ wt, data = mtcars) regressiert mpg auf das Gewicht. Danach gibt summary(fit) die Koeffizienten, ihre p-Werte, das Bestimmtheitsmaß und die F-Statistik aus. Weitere Prädiktoren fügst du mit + hinzu: lm(mpg ~ wt + hp, data = mtcars).

Wie interpretiert man die lm-summary-Ausgabe in R?

Im Coefficients-Block ist jedes Estimate die erwartete Veränderung der Zielgröße bei einer Erhöhung dieses Prädiktors um eine Einheit (bei festgehaltenen übrigen); Pr(>|t|) prüft, ob dieser Koeffizient plausibel null sein könnte. Multiple R-squared ist der Anteil erklärter Varianz. Die F-Statistik unten prüft das Modell als Ganzes gegen ein Modell nur mit Achsenabschnitt.

Was ist der Unterschied zwischen Multiple und Adjusted R-squared?

Multiple R-squared ist der rohe Anteil erklärter Varianz und kann beim Hinzufügen von Prädiktoren nur steigen - selbst bei nutzlosen. Adjusted R-squared erhebt einen Abschlag pro Prädiktor, steigt also nur, wenn eine neue Variable sich ihren Platz verdient. Vergleiche Modelle mit der adjustierten Version.

Wie sagt man in R neue Werte aus einer Regression vorher?

Bau einen Data Frame, dessen Spaltennamen zu den Prädiktoren passen, und ruf dann predict(fit, newdata = ...) auf. Ergänze interval = "confidence" für die Unsicherheit über die mittlere Antwort oder interval = "prediction" für den (viel breiteren) Bereich, in dem eine einzelne neue Beobachtung wahrscheinlich landet.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S