Wie implementiere ich eine Dummy-Variable mit n-1 Variablen?

9

Wenn ich eine Variable mit 4 Ebenen habe, muss ich theoretisch 3 Dummy-Variablen verwenden. Wie wird dies in der Praxis tatsächlich durchgeführt? Benutze ich 0-3, benutze ich 1-3 und lasse die 4 leer? Irgendwelche Vorschläge?

HINWEIS: Ich werde in R arbeiten.

UPDATE: Was würde passieren, wenn ich nur eine Spalte verwende, die 1-4 entsprechend AD verwendet? Wird das funktionieren oder Probleme verursachen?

screechOwl
quelle
3
Ich denke, diese Seite von UCLA ATS erklärt es ziemlich gut.
Caracal
4
Beachten Sie, dass das Codieren dieser Variablen als Ganzzahlen 0-3 oder 1-4 oder 1-3 keine Dummy-Codierung ist und nicht den gleichen Effekt wie drei Dummy-Variablen hat. Allerdings ist eine solche falsche Codierung Wille Arbeit in Regressionsformeln und Software , und es wird plausibel ausgegeben werden: es wird nur entsprechen nicht das vorgesehene Modell. (NB: Dies beantwortet das letzte Update der Frage. )
whuber

Antworten:

11

In der Praxis lässt man normalerweise die Software seiner Wahl das Erstellen und Bearbeiten der Dummy-Variablen übernehmen. Es gibt verschiedene Möglichkeiten, wie damit umgegangen werden kann. Hier gibt es mehrere gängige Möglichkeiten für einen Datensatz mit vier Beobachtungen, eine auf jeder Ebene von A, B, C und D. Dies sind verschiedene Parametrisierungen. Sie führen zu genau der gleichen Modellanpassung, jedoch mit unterschiedlichen Interpretationen der Parameter. Mit der Grundalgebra kann man leicht von einem zum anderen konvertieren. Beachten Sie, dass sie alle lineare Kombinationen voneinander sind. Tatsächlich kann jede lineare Kombination verwendet werden.

Verwenden Sie Unterschiede zur ersten Ebene (Standard in R):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

Verwenden Sie Unterschiede zur letzten Ebene (Standard in SAS):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

Verwenden Sie "Summen" -Kontraste:

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

Verwenden Sie "helmert" Kontraste:

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3
Aaron verließ Stack Overflow
quelle
1
Ich würde der Reinheit halber sagen, dass Dummy- Variablen im engeren Sinne nur das 1. und 2. Beispiel sind. Dummy-Variablen werden auch als Indikatorkontrastvariablen bezeichnet. Helmert , Abweichung und andere alternative Arten von Kontrastvariablen sollten für mich nicht als Dummy bezeichnet werden.
ttnphns
1
@ttnphns Ich stimme zu, dass Helmert-Kontraste aus technischer Sicht keine Dummy-Codierung darstellen, aber ich denke, es ist durchaus vernünftig, dass sie trotzdem hier aufgenommen werden. Ich kann nicht sagen, ob Sie aus Gründen der Klarheit darauf hinweisen oder vorschlagen, die Antwort zu ändern. @ Aaron +1, diese Antwort wäre noch besser, wenn Sie kurz erklären würden, wie sich die Interpretation dieser verschiedenen Codierungsschemata unterscheiden würde.
Gung - Reinstate Monica
7

Nehmen wir an, Ihre Variablenebenen sind A, B, C und D. Wenn Sie einen konstanten Term in der Regression haben, müssen Sie drei Dummy-Variablen verwenden, andernfalls müssen Sie alle vier haben.

Es gibt viele mathematisch äquivalente Möglichkeiten, wie Sie die Dummy-Variablen implementieren können. Wenn Sie einen konstanten Term in der Regression haben, besteht eine Möglichkeit darin, eine der Ebenen als "Basis" -Ebene auszuwählen und die anderen drei damit zu vergleichen. Nehmen wir der Vollständigkeit halber an, dass der Basispegel A ist. Dann nimmt Ihre erste Dummy-Variable den Wert 1 an, wenn der Pegel B und ansonsten 0 ist. Der zweite nimmt den Wert 1 an, wenn der Pegel andernfalls C und 0 ist, und der dritte nimmt den Wert 1 an, wenn der Pegel andernfalls D und 0 ist. Da Ihr konstanter Term immer gleich 1 ist, ist der geschätzte Koeffizient der ersten Dummy-Variablen die Schätzung der Differenz zwischen Stufe B und A und ähnlich wie bei den anderen Dummy-Variablen.

Wenn Sie keinen konstanten Term haben, können Sie einfach vier Dummy-Variablen verwenden, die wie im vorherigen Beispiel erstellt wurden, und nur eine für die A-Ebene hinzufügen.

jbowman
quelle
Netter Hinweis darauf, wie wichtig es ist, einen konstanten Term in der Regression zu haben.
Aaron verließ Stack Overflow
5

Definieren Sie in R die Variable als Faktor und sie wird für Sie implementiert:

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

was zurückkehrt

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

Die Dokumentation für 'lm', 'Faktor' und 'Formel' in R füllt einige Details aus.

Grau
quelle
1
+1 Dies ist eine schöne Ergänzung zu den bereits aufgeführten Antworten. Wir können auch feststellen, dass, wenn Sie bereits eine Variable mit Gruppennamen (wie AD) haben, dies im Aufruf der Analysefunktion ohne einen zusätzlichen Schritt erfolgen kann: lm(y ~ as.factor(x))
gung - Reinstate Monica
Der Hauptgrund, warum ich Dummy-Variablen verwenden möchte, ist, dass ich mit einem großen Datensatz mit vielen Faktorstufen (> 32) arbeite und einige Pakete in R (nämlich Randomforest) keine Faktoren mit vielen Ebenen verarbeiten können, also habe ich es versucht um zu sehen, ob Dummys eine Lösung waren.
ScreechOwl
1
Sie können die Regressionsdesign-Matrix mit 'model.matrix' erstellen: model.matrix (y ~ x) (x ist immer noch ein Faktor) gibt Ihnen eine Matrix mit den Dummy-Variablen. Ich bin mit dem Randomforest-Paket nicht vertraut, aber ich vermute, dass Sie allen Funktionen eine explizite Entwurfsmatrix geben können, die Sie von model.matrix erhalten, und model.matrix scheint mit vielen (dh Hunderten) Ebenen zu funktionieren.
Grau
ps: Vielleicht möchten Sie die Frage bearbeiten, um zu verdeutlichen, dass Sie sich für Lösungen interessieren, die mit vielen Ebenen funktionieren. Die Frage stellt ungefähr 4.
Grau
4

whuber hat dir in den Kommentaren gesagt, dass das Codieren einer 0-3- oder 1-4-Codierung anstelle des Erstellens von Dummy-Variablen nicht das ist, was du willst. Dies ist ein Versuch - ich soll hoffentlich erklären, was Sie mit diesem Modell machen würden und warum es falsch ist.

Wenn Sie eine Variable X so codieren, dass wenn A dann X = 1, wenn B dann X = 2, wenn C dann X = 3, wenn D dann X = 4, wenn Sie die Regression durchführen, Sie nur einen Parameter erhalten. Angenommen, der mit X verknüpfte geschätzte Parameter war 2. Dies würde Ihnen sagen, dass die erwartete Differenz zwischen dem Mittelwert von B und dem Mittelwert von A 2 beträgt. Es zeigt Ihnen auch, dass die erwartete Differenz zwischen dem Mittelwert von C ist und der Mittelwert von B ist 2. Einige für D und C. Sie würden die Unterschiede in den Mitteln für diese Gruppen zwingen, diesem sehr strengen Muster zu folgen. Dieser eine Parameter sagt Ihnen genau, wie sich alle Mittelwerte Ihrer Gruppe aufeinander beziehen.

Wenn Sie also diese Art der Codierung durchführen, müssen Sie davon ausgehen, dass Sie nicht nur die richtige Reihenfolge erhalten haben (denn in diesem Fall müssen Sie, wenn Sie eine Erhöhung von A nach B erwarten, eine Erhöhung von B nach C und von C erwarten zu D) aber Sie müssen auch davon ausgehen, dass dieser Unterschied der gleiche ist!

Wenn Sie stattdessen die vorgeschlagene Dummy-Codierung durchführen, lassen Sie zu, dass jede Gruppe ihren eigenen Mittelwert hat - ohne Einschränkungen. Dieses Modell ist viel sinnvoller und beantwortet die gewünschten Fragen.

Dason
quelle