Wie kann man die Ergebnisse von lm () in eine Gleichung übersetzen?


29

Wir können lm()einen Wert vorhersagen, benötigen aber in einigen Fällen noch die Gleichung der Ergebnisformel. Fügen Sie beispielsweise die Gleichung zu Diagrammen hinzu.


2
Können Sie bitte Ihre Frage umformulieren oder einige Details hinzufügen? Ich kenne mich mit R lmund linearen Modellen im Allgemeinen gut aus, aber es ist überhaupt nicht klar, was genau Sie wollen. Können Sie ein Beispiel oder etwas zur Verdeutlichung geben? Ist das für ein Thema?
Glen_b

2
Ich vermute, Sie wollen die Koeffizienten der linearen Regressionsformel. Versuchen Sie, coef()das angepasste lmObjekt aufzurufen , wie in:mod <- lm(y ~ x); coef(mod)
Jake Westfall,

Wenn Sie lm(y~x)$calles eingeben, heißt es, dass die Formel lautet y ~ x. Wenn Sie etwas anderes meinen, müssen Sie genauer sein.
Glen_b


Antworten:


30

Betrachten Sie dieses Beispiel:

set.seed(5)            # this line will allow you to run these commands on your
                       # own computer & get *exactly* the same output
x = rnorm(50)
y = rnorm(50)

fit = lm(y~x)
summary(fit)
# Call:
# lm(formula = y ~ x)
# 
# Residuals:
#      Min       1Q   Median       3Q      Max 
# -2.04003 -0.43414 -0.04609  0.50807  2.48728 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)
# (Intercept) -0.00761    0.11554  -0.066    0.948
# x            0.09156    0.10901   0.840    0.405
# 
# Residual standard error: 0.8155 on 48 degrees of freedom
# Multiple R-squared: 0.01449,  Adjusted R-squared: -0.006046 
# F-statistic: 0.7055 on 1 and 48 DF,  p-value: 0.4051 

Ich vermute, die Frage ist, wie man die Regressionsgleichung aus der zusammenfassenden Ausgabe von R herausfindet. Algebraisch lautet die Gleichung für ein einfaches Regressionsmodell: Wir müssen nur die Ausgabe diesen Begriffen zuordnen. Nämlich:

y^i=β^0+β^1xi+ε^iwhere εN(0, σ^2)
summary.lm()

  • β^0 ist der EstimateWert in der (Intercept)Zeile (speziell -0.00761)
  • β^1 ist der EstimateWert in der xZeile (speziell 0.09156)
  • σ^ ist die Residual standard error(spezifisch 0.8155)

Das Einstecken der obigen ergibt: Für eine gründlichere Übersicht, können Sie diesen Thread zu lesen: die Interpretation der R lm () ausgegeben .

y^i=0.00761 + 0.09156xi + ε^iwhere εN(0, 0.81552)


2
Angesichts der Erwähnung des OP, dass Gleichungen in Diagramme werden sollen, habe ich darüber nachgedacht, ob eine Funktion tatsächlich die Ausgabe von lmund einen Zeichenausdruck wie " " , der für eine solche geeignet ist Planungsaufgabe (daher mein wiederholter Anruf, um zu klären, was sie wollten - was leider nicht getan wurde). y^=0.00761+0.09156x
Glen_b -Reinstate Monica

6

Wenn Sie die Ergebnisse anhand Ihrer resultierenden Regressionsgleichung vorhersagen möchten, können Sie die Gleichung manuell erstellen, indem Sie Folgendes eingeben summary(fit)(wenn Ihre Regressionsanalyse beispielsweise in einer Variablen mit dem Namen gespeichert ist fit) und die Schätzungen für jeden in Ihrer Gleichung enthaltenen Koeffizienten anzeigen Modell.

Wenn Sie beispielsweise eine einfache Regression vom Typ haben und eine Schätzung des ( ) von +0,5 und eine Schätzung der Auswirkung von x auf y ( ) erhalten Mit +1,6 würden Sie die y-Punktzahl einer Person aus ihrer x-Punktzahl vorhersagen, indem Sie berechnen: .β 0 β 1 y = 0,5 + 1,6 xy=β0+β1x+ϵβ0β1y^=0.5+1.6x

Dies ist jedoch der schwierige Weg. R verfügt über eine integrierte Funktion, predict()mit der Sie anhand eines Modells für einen beliebigen Datensatz automatisch vorhergesagte Werte berechnen können. Beispiel: predict(fit, newdata=data)Wenn die x-Werte, mit denen Sie die y-Werte vorhersagen möchten, in der Variablen gespeichert sind data. (Beachten Sie, dass Sie zum Anzeigen der vorhergesagten Werte für die Stichprobe, für die Ihre Regression durchgeführt wurde, einfach fit$fittedoder fitted(fit)eingeben können. Diese geben Ihnen die vorhergesagten, auch als angepassten Werte bezeichneten Werte.)


0

Wenn Sie die Gleichung anzeigen möchten, in ein Dokument ausschneiden oder einfügen möchten, aber nicht mit dem Zusammensetzen der gesamten Gleichung zu tun haben möchten:

R> library(MASS)
R> crime.lm <- lm(y~., UScrime)
R> cc <- crime.lm$coefficients
R> (eqn <- paste("Y =", paste(round(cc[1],2), paste(round(cc[-1],2), names(cc[-1]), sep=" * ", collapse=" + "), sep=" + "), "+ e"))
[1] "Y = -5984.29 + 8.78 * M + -3.8 * So + 18.83 * Ed + 19.28 * Po1 + -10.94 * Po2 + -0.66 * LF + 1.74 * M.F + -0.73 * Pop + 0.42 * NW + -5.83 * U1 + 16.78 * U2 + 0.96 * GDP + 7.07 * Ineq + -4855.27 * Prob + -3.48 * Time + e"

0

Aufbauend auf der Antwort von keithpjolley werden die im Trennzeichen verwendeten Pluszeichen durch das tatsächliche Vorzeichen des Koeffizienten ersetzt.

modelcrime <- lm(y~., UScrime)
modelcrime_coeff <- modelcrime$coefficients
modelcrime_coeff_sign <- sign(modelcrime_coeff)
modelcrime_coeff_prefix <- case_when(modelcrime_coeff_sign == -1 ~ " - ",
                                     modelcrime_coeff_sign == 1 ~ " + ",
                                     modelcrime_coeff_sign == 0 ~ " + ")
modelcrime_eqn <- paste("y =", paste(if_else(modelcrime_coeff[1]<0, "- ", ""),
                                         abs(round(modelcrime_coeff[1],3)),
                                     paste(modelcrime_coeff_prefix[-1],
                                           abs(round(modelcrime_coeff[-1],3)),
                                           " * ",
                                           names(modelcrime_coeff[-1]),
                                           sep = "", collapse = ""),
                                     sep = ""))
modelcrime_eqn

erzeugt das Ergebnis

[1] "y = - 5984.288 + 8.783 * M - 3.803 * So + 18.832 * Ed + 19.28 * Po1 - 10.942 * Po2 - 0.664 * LF + 1.741 * M.F - 0.733 * Pop + 0.42 * NW - 5.827 * U1 + 16.78 * U2 + 0.962 * GDP + 7.067 * Ineq - 4855.266 * Prob - 3.479 * Time"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.