Interpretation des Koeffizienten in einem linearen Regressionsmodell mit kategorialen Variablen

8

Ich werde meine Beispiele mit R-Aufrufen geben. Zunächst ein einfaches Beispiel einer linearen Regression mit einer abhängigen Variablen 'Lebensdauer' und zwei kontinuierlichen erklärenden Variablen.

data.frame(height=runif(4000,160,200))->human.life
human.life$weight=runif(4000,50,120)
human.life$lifespan=sample(45:90,4000,replace=TRUE)
summary(lm(lifespan~1+height+weight,data=human.life))

Call:
lm(formula = lifespan ~ 1 + height + weight, data = human.life)

Residuals:
Min       1Q   Median       3Q      Max 
-23.0257 -11.9124  -0.0565  11.3755  23.8591 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 63.635709   3.486426  18.252   <2e-16 ***
height       0.007485   0.018665   0.401   0.6884    
weight       0.024544   0.010428   2.354   0.0186 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 13.41 on 3997 degrees of freedom
Multiple R-squared: 0.001425,   Adjusted R-squared: 0.0009257 
F-statistic: 2.853 on 2 and 3997 DF,  p-value: 0.05781

Um die Schätzung der Lebensdauer zu ermitteln, wenn der Wert für "Gewicht" 1 ist, addiere ich (Intercept) + height = 63.64319

Was ist nun, wenn ich einen ähnlichen Datenrahmen habe, bei dem jedoch eine der erklärenden Variablen kategorisch ist?

data.frame(animal=rep(c("dog","fox","pig","wolf"),1000))->animal.life
animal.life$weight=runif(4000,8,50)
animal.life$lifespan=sample(1:10,replace=TRUE)
summary(lm(lifespan~1+animal+weight,data=animal.life))

Call:
lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)

Residuals:
Min      1Q  Median      3Q     Max 
-4.7677 -2.7796 -0.1025  3.1972  4.3691 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.565556   0.145851  38.159  < 2e-16 ***
animalfox   0.806634   0.131198   6.148  8.6e-10 ***
animalpig   0.010635   0.131259   0.081   0.9354    
animalwolf  0.806650   0.131198   6.148  8.6e-10 ***
weight      0.007946   0.003815   2.083   0.0373 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 2.933 on 3995 degrees of freedom
Multiple R-squared: 0.01933,    Adjusted R-squared: 0.01835 
F-statistic: 19.69 on 4 and 3995 DF,  p-value: 4.625e-16

In diesem Fall sollte ich, um die Schätzung der "Lebensdauer" zu ermitteln, wenn der Wert von "Gewicht" 1 ist, jeden der Koeffizienten für "Tier" zum Achsenabschnitt hinzufügen: (Achsenabschnitt) + Tierfuchs + Tierschwein + Tierwolf? Oder wie geht das richtig?

Danke Sverre

Sverre
quelle
Dollarzeichen lassen Sie in eine Gleichungsumgebung eintreten und deshalb werden die Dinge zufällig kursiv geschrieben.
Makro
Formatierung: zu erhalten code, um 4 Leerzeichen einrücken.
Wolf.rauch
Wenn Sie die 4 Leerzeichen verwenden, können Sie Sterne und Dollarzeichen einfügen, die als solche angezeigt werden. Wenn Sie sie außerhalb der Code-Formatierung verwenden, werden sie wie Markups behandelt. Wenn Sie keine vollständige codeZeile möchten , verwenden Sie Backticks:this is code with a $ and *
wolf.rauch
1
Es ist gut, dass Sie ein reproduzierbares Beispiel verwendet haben. Sie können das Beispiel noch verbessern, indem Sie set.seed(1)(oder eine beliebige Zahl, die Sie mögen) einschließen, bevor Sie die Zufallszahlengenerierung ausführen, sodass jeder genau die gleichen Ergebnisse wie Sie erzielt (in diesem Fall ist dies jedoch nicht sehr wichtig).
Wolf.rauch
Nur zwei kleine Kommentare. Sie haben geschrieben: "Um die Schätzung der Lebensdauer zu ermitteln, wenn der Wert für" Gewicht "1 ist, füge ich (Intercept) + height = 63.64319 hinzu." Beachten Sie, dass dies die geschätzte durchschnittliche Lebensdauer ist, wenn das Gewicht = 1 und die Größe = 0 ist . Das ist wahrscheinlich nicht sehr aussagekräftig. Auch Vorhersagen außerhalb des Bereichs der beobachteten Werte der unabhängigen Variablen müssen mit Vorsicht behandelt werden (Gewicht liegt zwischen 50 und 120, daher ist Gewicht = 1 ebenfalls nicht sehr aussagekräftig). Nur ein paar Randnotizen und wahrscheinlich Dinge, die Sie bereits wussten. Aber nur für den Fall ...
Wolfgang

Antworten:

12

Nein, Sie sollten nicht alle Koeffizienten addieren. Sie haben im Wesentlichen das Modell

lifespan=β0+β1fox+β2pig+β3wolf+β4weight+ε

pig=1 w e i g h t = 1β0+β1+β2+β3+β4weight=1

Sie müssen dies für jedes Tier separat tun. Zum Beispiel ist die erwartete Lebensdauer eines Schweins, wenn sein Gewicht 1 beträgt.β0+β2+β4

Makro
quelle
Makro: Ich verstehe. Wäre es dann sinnvoll, den Durchschnittskoeffizienten für die Werte in "Tier" zu ermitteln? Mit anderen Worten (Intercept) + (Tierfuchs + Tierschwein + Tierwolf) / 3. Oder ist das nur gültig, wenn für jedes Tier im Datensatz die gleiche Anzahl von Beobachtungen vorhanden ist?
Sverre
Ich denke, Sie haben Recht - das wäre nur gültig, wenn es in jeder Gruppe eine gleiche Anzahl gibt. Sie können sie proportional dazu gewichten, wie stark jede Gruppe in der Stichprobe vertreten ist, wenn Sie darauf bestehen, sie in einer Zahl zusammenzufassen.
Makro
Was wäre der richtige Weg, um sie zu gewichten? Der Grund, warum ich darauf bestehe, es in einer Zahl zusammenzufassen, ist, dass ich die Regressionslinie nur für eine der Variablen in einem Streudiagramm zeichnen möchte. Zum Beispiel würde ich im obigen Beispiel für human.life die Regressionslinie für 'weight' zeichnen, indem ich den Achsenabschnitt ((Intercept) + height = 63.64319) der Linie mit ihrem Koeffizienten (0.024544) spezifiziere. Das ist im Fall animal.life nur ein bisschen kniffliger.
Sverre
Wenn ich mehr darüber nachdenke, weiß ich nicht, wie ein Durchschnitt interpretierbar wäre. Sie könnten einfach drei parallele Regressionslinien auf einem Plot zeichnen, nicht wahr? Es scheint mir auch, dass die Wirkung von "Gewicht" für jedes Tier unterschiedlich wäre. In diesem Fall sollte das Tier mit dem Gewicht interagieren, was zu drei völlig unterschiedlichen Regressionslinien für jedes Tier führen würde.
Makro
Aber in einem Fall, in dem sowohl die Variable für "Tier" als auch die Variable für "Gewicht" signifikant sind, ihre Interaktion jedoch nicht, würde ich die Interaktion nicht einmal in das Modell aufnehmen. Die multiple Regression schätzt den Effekt von "Gewicht" unabhängig davon, wie hoch der Wert für "Tier" ist.
Sverre
4

Am einfachsten ist es, die Vorhersagefunktion für das lm-Objekt zu verwenden. Dann werden viele Details berücksichtigt, z. B. die Konvertierung eines Faktors in die richtigen Werte zum Addieren. Wenn Sie versuchen, die Teile zu verstehen, die in die Vorhersage einfließen, setzen Sie type='terms'und es werden die einzelnen Teile angezeigt, die zusammen Ihre Vorhersage ergeben.

Beachten Sie auch, dass die Konvertierung eines Faktors in Variablen von einigen Optionen abhängt. Standardmäßig wird eine Basisgruppe ausgewählt, mit der die anderen Gruppen verglichen werden sollen. Sie können sie jedoch auch auf einen Durchschnitt und Unterschiede zu diesem Durchschnitt festlegen (oder andere interessante Vergleiche). .

Greg Snow
quelle
Die Verwendung von pred.lm () ist eine gute Lösung für ein lm-Objekt. Leider passe ich tatsächlich ein früheres Objekt an meine Daten an, für das es keine Funktion zum Extrahieren einzelner Begriffe gibt. Habe ich Sie richtig verstanden, dass die von Ihnen vorgeschlagene alternative Methode den Achsenabschnitt als Durchschnittswert anstelle einer Basislinie festlegen würde (wobei alle kontinuierlichen Prädiktoren auf 0 gesetzt sind und ein Wert für kategoriale Prädiktoren ausgewählt wird)? Wenn ja, würde ich gerne wissen, wie das geht. Dann könnte ich einfach meine Regressionslinie als Achsenabschnitt des Modells + Koeffizient meines Prädiktors zeichnen.
Sverre
Schauen Sie sich "Kontraste", "C", "Kontr.Summe" und den Kontrastteil der "Optionen" an.
Greg Snow
2

Wenn Sie die durchschnittliche Lebensdauer bei einem Gewicht von 1 möchten, können Sie in diesem Aufruf einfach "Tier" herausnehmen:

lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)
Peter Flom
quelle
Ich verstehe nicht, wie das richtig sein kann. Wenn ich einen der Prädiktoren ("Tier") herausnehme, ändern sich der Achsenabschnitt, der Gewichtskoeffizient und die Fehlerschätzungen. Außerdem versuche ich nicht herauszufinden, wie hoch die tatsächliche durchschnittliche Lebensdauer für Gewicht 1 in den Daten ist, sondern genau, wie das Modell dies vorhersagt.
Sverre