Beim Umgang mit Daten mit Faktoren kann R verwendet werden, um die Mittelwerte für jede Gruppe mit der Funktion lm () zu berechnen. Dies gibt auch die Standardfehler für die geschätzten Mittelwerte an. Dieser Standardfehler unterscheidet sich jedoch von dem, was ich aus einer manuellen Berechnung erhalte.
Hier ist ein Beispiel (von hier aus Vorhersage des Unterschieds zwischen zwei Gruppen in R )
Berechnen Sie zuerst den Mittelwert mit lm ():
mtcars$cyl <- factor(mtcars$cyl)
mylm <- lm(mpg ~ cyl, data = mtcars)
summary(mylm)$coef
Estimate Std. Error t value Pr(>|t|)
(Intercept) 26.663636 0.9718008 27.437347 2.688358e-22
cyl6 -6.920779 1.5583482 -4.441099 1.194696e-04
cyl8 -11.563636 1.2986235 -8.904534 8.568209e-10
Der Achsenabschnitt ist der Mittelwert für die erste Gruppe, die 4-Zylinder-Autos. Um die Mittel durch direkte Berechnung zu erhalten, benutze ich Folgendes:
with(mtcars, tapply(mpg, cyl, mean))
4 6 8
26.66364 19.74286 15.10000
Um die Standardfehler für die Mittelwerte zu erhalten, berechne ich die Standardvariation der Stichprobe und dividiere durch die Anzahl der Beobachtungen in jeder Gruppe:
with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )
4 6 8
1.3597642 0.5493967 0.6842016
Die direkte Berechnung ergibt den gleichen Mittelwert, aber der Standardfehler ist für die beiden Ansätze unterschiedlich. Ich hatte erwartet, den gleichen Standardfehler zu erhalten. Was geht hier vor sich? Es hängt damit zusammen, dass lm () den Mittelwert für jede Gruppe und einen Fehlerterm anpasst.
Bearbeitet: Nach Svens Antwort (unten) kann ich meine Frage präziser und klarer formulieren.
Für kategoriale Daten können wir die Mittelwerte einer Variablen für verschiedene Gruppen berechnen, indem wir lm () ohne Achsenabschnitt verwenden.
mtcars$cyl <- factor(mtcars$cyl)
mylm <- lm(mpg ~ cyl, data = mtcars)
summary(mylm)$coef
Estimate Std. Error
cyl4 26.66364 0.9718008
cyl6 19.74286 1.2182168
cyl8 15.10000 0.8614094
Wir können dies mit einer direkten Berechnung der Mittelwerte und ihrer Standardfehler vergleichen:
with(mtcars, tapply(mpg, cyl, mean))
4 6 8
26.66364 19.74286 15.10000
with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )
4 6 8
1.3597642 0.5493967 0.6842016
Die Mittelwerte sind genau gleich, aber die Standardfehler unterscheiden sich für diese beiden Methoden (wie Sven ebenfalls bemerkt). Meine Frage ist, warum sie unterschiedlich und nicht gleich sind.
(Sollte ich beim Bearbeiten meiner Frage den Originaltext löschen oder meine Ausgabe wie bisher hinzufügen)
quelle
Die
lm
Funktion schätzt nicht Mittelwerte und Standardfehler der Faktorstufen, sondern der mit den Faktorstufen verbundenen Kontrate.Wenn kein Kontrast manuell angegeben wird, werden in R Behandlungskontraste verwendet. Dies ist die Standardeinstellung für kategoriale Daten.
Der Faktor
mtcars$cyl
hat drei Ebenen (4,6 und 8). Standardmäßig wird die erste Ebene 4 als Referenzkategorie verwendet. Der Achsenabschnitt des linearen Modells entspricht dem Mittelwert der abhängigen Variablen in der Referenzkategorie. Die anderen Effekte ergeben sich jedoch aus einem Vergleich einer Faktorstufe mit der Referenzkategorie. Dahercyl6
beziehen sich die Schätzung und der Standardfehler für auf die Differenz zwischencyl == 6
undcyl == 4
. Der Effektcyl8
hängt mit dem Unterschied zwischencyl == 8
und zusammencyl == 4
.Wenn die
lm
Funktion die Mittelwerte der Faktorstufen berechnen soll, müssen Sie den Intercept-Term (0 + ...
) ausschließen:Wie Sie sehen können, sind diese Schätzungen mit den Mitteln der Faktorstufen identisch. Beachten Sie jedoch, dass die Standardfehler der Schätzungen nicht mit den Standardfehlern der Daten identisch sind.
Übrigens: Daten können einfach mit der
aggregate
Funktion aggregiert werden :quelle
Zusätzlich zu dem, was Sven Hohenstein sagte, sind die
mtcars
Daten nicht ausgewogen . Normalerweise verwendet manaov
lm mit kategorialen Daten (für die es sich nur um einen Wrapper handeltlm
), in denen speziell angegeben ist?aov
:Ich denke, Sie können dies auch an den seltsamen Korrelationen der Modellmatrix erkennen:
Daher sind die von
aov
(oderlm
) erhaltenen Standardfehler wahrscheinlich falsch (Sie können dies überprüfen, wenn Sie sie mit Standardfehlern vergleichenlme
oder vergleichenlmer
.quelle
quelle