Wie kann ich R anweisen, eine bestimmte Ebene als Referenz zu verwenden, wenn ich binäre erklärende Variablen in einer Regression verwende?
Standardmäßig wird nur ein Level verwendet.
lm(x ~ y + as.factor(b))
mit b {0, 1, 2, 3, 4}
. Angenommen, ich möchte 3 anstelle der von R verwendeten Null verwenden.
r
regression
linear-regression
categorical-data
dummy-variable
Matt Bannert
quelle
quelle
b
Sie die Reihenfolge der Ebenen mit festlegenfactor(b, levels = c(3,1,2,4,5))
. Tun Sie dies jedoch in einem Datenverarbeitungsschritt außerhalb deslm()
Anrufs. Meine Antwort unten verwendet dierelevel()
Funktion, damit Sie einen Faktor erstellen und dann den Referenzpegel nach Bedarf verschieben können.Antworten:
Siehe die
relevel()
Funktion. Hier ist ein Beispiel:Nun ändern Sie den Faktor
b
inDF
durch die Verwendung derrelevel()
Funktion:Die Modelle haben unterschiedliche Referenzwerte geschätzt.
quelle
within
, aberdf$bR = relevel(df$b, ref=3)
.Andere haben den
relevel
Befehl erwähnt, der die beste Lösung ist, wenn Sie die Basisebene für alle Analysen Ihrer Daten ändern möchten (oder bereit sind, mit dem Ändern der Daten zu leben).Wenn Sie die Daten nicht ändern möchten (dies ist eine einmalige Änderung, aber in Zukunft möchten Sie wieder das Standardverhalten), können Sie eine Kombination der
C
Funktion (Großbuchstaben beachten) verwenden, um Kontraste und diecontr.treatments
Funktion mit festzulegen Das Basisargument für die Auswahl der Ebene, die Sie als Basis verwenden möchten.Beispielsweise:
quelle
Der
relevel()
Befehl ist eine Kurzmethode für Ihre Frage. Was es tut, ist den Faktor neu zu ordnen, so dass, was auch immer die Ref-Stufe ist, zuerst ist. Daher hat die Neuordnung Ihrer Faktorstufen ebenfalls den gleichen Effekt, bietet Ihnen jedoch mehr Kontrolle. Vielleicht wollten Sie Level 3,4,0,1,2 haben. In diesem Fall...Ich bevorzuge diese Methode, weil ich in meinem Code nicht nur die Referenz, sondern auch die Position der anderen Werte leichter erkennen kann (anstatt mir die Ergebnisse dafür ansehen zu müssen).
HINWEIS: Machen Sie es NICHT zu einem geordneten Faktor. Ein Faktor mit einer bestimmten Reihenfolge und ein geordneter Faktor sind nicht dasselbe.
lm()
Vielleicht denken Sie, Sie wollen Polynomkontraste, wenn Sie das tun.quelle
Ich weiß, dass dies eine alte Frage ist, aber ich hatte ein ähnliches Problem und stellte fest, dass:
macht genau das, was du gefragt hast.
quelle
as.factor()
Bedarf mit kombinieren kann , zum Beispiel mit...+relevel(as.factor(mycol), ref = "myref")+...
Sie können die Spalte auch manuell mit einem
contrasts
Attribut versehen, das von den Regressionsfunktionen berücksichtigt zu werden scheint:quelle
Für diejenigen, die eine dplyr / tidyverse Version suchen. Aufbauend auf der Lösung von Gavin Simpson:
quelle
relevel()
oderforcats::fct_relevel()
relevel
funktioniert nur mit Faktoren.fct_relevel
funktioniert nur mit Faktoren. Es gibt keinen Unterschied zwischen den Funktionen außer dem Namen AFAIK. Sagen : „Wenn die Variable ein Faktor ist , können Sie auchfct_relevel
“ impliziert , dass , wenn die Variable ist kein Faktor könnte man verwendenrelevel
, aber das ist nicht wahr.