Warum ersetzt die Intercept-Spalte in model.matrix den ersten Faktor?


9

Ich versuche, meine Faktorspalte in Dummy-Variablen umzuwandeln:

str(cards$pointsBin)
# Factor w/ 5 levels ".lte100",".lte150",..: 3 2 3 1 4 4 2 2 4 4 ...

labels <- model.matrix(~ pointsBin, data=cards)

head(labels)

#     (Intercept) pointsBin.lte150 pointsBin.lte200 pointsBin.lte250 pointsBin.lte300
# 741           1                0                0                0                0
# 407           1                1                0                0                0
# 676           1                0                0                1                0
# 697           1                1                0                0                0
# 422           1                0                1                0                0
# 300           1                0                1                0                0

Es gibt keine Spalte für den ersten Wert meines Faktors ( ".lte100"), als den die erste Zeile kategorisiert werden sollte. Wie bekomme ich diese Daten zurück? Und was bedeutet die Intercept-Spalte, die alle Einsen zu sein scheint?


3
Wenn Sie "K" -Dummy-Variablen haben, hat Ihr resultierendes Modell a.) Den Intercept-Term (der eine Spalte von Einsen ist) und b.) "K-1" zusätzliche Spalten. Der Grund dafür ist, dass die Spalten der resultierenden Matrix sonst nicht linear unabhängig wären (und Sie daher OLS nicht ausführen könnten ).
Steve S

2
Warum "nicht sinnvoll"? Es ist das gleiche Modell mit der gleichen Passgenauigkeit, nur auf andere Weise parametriert.
Wolfgang

2
y^=β0+β1x1y^=β0x0+β1x1x0
Steve S

2
@SteveS: Tatsächlich ist R so freundlich, dass, wenn Sie versuchen, den Achsenabschnitt zu entfernen, - 1wenn Sie einen einzelnen kategorialen Prädiktor als Faktor darstellen (wie in dieser Frage), davon ausgegangen wird, dass Sie das nicht wirklich meinen und zur Verwendung von sum- wechseln. Codierung auf Null; Das ist natürlich nur eine andere Parametrisierung. Zu freundlich, wenn du mich fragst.
Scortchi - Monica wieder einsetzen

2
@SteveS: Danke. Ich hätte prüfen sollen: Es wechselt zur Zellmittelcodierung. Es macht nicht das, was Sie vielleicht erwarten, was zu dem Modell passt, vor dem Sie zu Recht gewarnt haben (es wird dies jedoch tun, wenn die Spalte vom numerischen Typ ist).
Scortchi - Monica wieder einsetzen

Antworten:


10

Folgendes berücksichtigen:

require(mlbench)

data(HouseVotes84, package = "mlbench")
head(HouseVotes84)

labels <- model.matrix(~ V1, data=HouseVotes84)
head(labels)

labels1 <- model.matrix(~ V1+1, data=HouseVotes84)
head(labels1)

labels0 <- model.matrix(~ V1+0, data=HouseVotes84)
head(labels0)

labels_1 <- model.matrix(~ V1-1, data=HouseVotes84)
head(labels_1)

Die ersten beiden Befehle sind identisch. Die letzten beiden Befehle geben an, dass der Achsenabschnitt nicht erzeugt werden soll, und behalten die beiden erzeugten Dummy-Variablen bei.


1
Danke - das erklärt den Code, den ich wollte. Aber es erklärt nicht warum oder hilft mir zu verstehen.
Digitgopher

2
@digitgopher: Siehe ats.ucla.edu/stat/r/library/contrast_coding.htm für eine Erklärung der Referenzebene Codierung und andere Kodierungsschemata.
Scortchi - Monica wieder einsetzen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.