Ich habe ein Regressionsmodell, das so aussieht:
... oder in R-Notation: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3
, und sind kategoriale Variablen und ist numerisch. Die Komplikation ist, dass drei Ebenen und anstelle von Standardkontrasten muss ich testen:
- Ob sich der Achsenabschnitt für Ebene signifikant vom durchschnittlichen Achsenabschnitt für die Ebenen und .
- Ob sich die Antwort von zwischen der Ebene und dem Durchschnitt der Ebenen und signifikant unterscheidet .
- Ob sich die Steigung von zwischen der Ebene und dem Durchschnitt der Ebenen und signifikant unterscheidet .
Basierend auf diesem Beitrag scheint die Matrix, die ich will, ...
2
-1
-1
Also mache ich contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1)))
. Die Schätzung von ändert sich, aber auch die anderen. Ich kann die neue Schätzung von reproduzieren, indem ich die vorhergesagten Werte der und (wenn und auf ihrem Referenzniveau sind) vom doppelten Wert von auf diesen Niveaus . Ich kann jedoch nicht darauf vertrauen, dass ich meine Kontrastmatrix korrekt angegeben habe, es sei denn, ich kann auch die anderen Koeffizienten auf ähnliche Weise ableiten.
Hat jemand einen Rat, wie ich mich mit der Beziehung zwischen Zellmitteln und Kontrasten auseinandersetzen kann? Vielen Dank. Gibt es einen Standardnamen für diese Art von Kontrast?
Aha! Gemäß dem Link in der Antwort von Glen_b können Sie unter dem Strich JEDEN Vergleich der gewünschten Gruppenmittelwerte wie folgt in ein Kontrastattribut im R-Stil konvertieren:
- Machen Sie eine quadratische Matrix. Die Zeilen repräsentieren die Ebenen Ihres Faktors und die Spalten repräsentieren Kontraste. Außer dem ersten, der dem Modell sagt, was der Achsenabschnitt darstellen soll.
- Wenn Sie möchten, dass Ihr Achsenabschnitt der Mittelwert ist, füllen Sie die erste Spalte mit demselben Wert ungleich Null, egal was passiert. Wenn Sie möchten, dass der Achsenabschnitt eines der Mittelwerte der Ebene ist, setzen Sie eine Zahl in diese Zeile und füllen Sie den Rest mit Nullen. Wenn der Achsenabschnitt ein Mittelwert aus mehreren Ebenen sein soll, setzen Sie Zahlen in diese Zeilen und Nullen in den Rest. Wenn Sie möchten, dass es sich um einen gewichteten Mittelwert handelt, verwenden Sie unterschiedliche Zahlen, andernfalls verwenden Sie dieselbe Zahl. Sie können sogar negative Werte in die Intercept-Spalte eingeben, und das bedeutet wahrscheinlich auch etwas, aber es ändert die anderen Kontraste vollständig, sodass ich keine Ahnung habe, wofür das ist
- Füllen Sie den Rest der Spalten mit positiven und negativen Werten aus, die angeben, welche Ebenen Sie im Vergleich zu anderen wünschen. Ich vergesse, warum das Summieren auf Null wichtig ist, aber passen Sie die Werte so an, dass die Spalten auf Null summieren.
- Transponieren Sie die Matrix mit der
t()
Funktion. - Verwenden Sie
ginv()
aus derMASS
Verpackung odersolve()
, um die Umkehrung der transponierten Matrix zu erhalten. - Löschen Sie die erste Spalte, z
mycontrast<-mycontrast[,-1]
. Sie haben jetzt eine apx p-1-Matrix, aber die Informationen, die Sie für Ihren Achsenabschnitt eingegeben haben, wurden in Schritt 5 in der gesamten Matrix codiert. - Wenn Sie möchten, dass Beschriftungen in der Zusammenfassungsausgabe angenehmer zu lesen sind als
lm()
die Standardausgabe von et al., Benennen Sie die Spalten Ihrer Matrix entsprechend. Der Intercept wird jedoch immer automatisch benannt(Intercept)
. - Machen Sie Ihre Matrix zum neuen Kontrast für den betreffenden Faktor, z
contrasts(mydata$myfactor)<-mymatrix
- Führen Sie
lm()
(und wahrscheinlich viele andere Funktionen, die Formeln verwenden) wie gewohnt in Standard R aus, ohne laden zuglht
müssendoBy
, odercontrasts
.
Glen_b, danke und danke UCLA Statistical Consulting Group. Mein Prof für angewandte Statistiken verbrachte mehrere Tage damit, sich mit diesem Thema zu beschäftigen, und ich hatte immer noch keine Ahnung, wie ich meine eigene Kontrastmatrix schreiben sollte. Und jetzt, eine Stunde Lesen und Spielen mit R, und ich denke endlich, ich verstehe. Ich denke, ich hätte mich stattdessen bei der UCLA bewerben sollen. Oder University of StackExchange.
contra.helmert
?