Dlaczego kolumna przechwytująca w modelu.matrix zastępuje pierwszy czynnik?

9

Próbuję przekonwertować kolumnę czynnikową na zmienne fikcyjne:

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

Nie ma kolumny dla pierwszej wartości mojego współczynnika ( ".lte100"), który powinien być sklasyfikowany jako pierwszy wiersz. Jak mogę odzyskać te dane? A co oznacza kolumna Intercept, która wydaje się oznaczać wszystkie 1?

digitgopher
źródło
3
Jeśli masz zmienne fikcyjne „K”, wówczas model wynikowy będzie miał a.) Wyraz przechwytujący (który jest kolumną jedności) i b.) Dodatkowe kolumny „K-1”. Powodem jest to, że w przeciwnym razie kolumny wynikowej macierzy nie byłyby liniowo niezależne (w rezultacie nie byłoby możliwe wykonanie OLS ).
Steve S
2
Dlaczego „nie ma znaczenia”? To ten sam model z tym samym dobrem dopasowania, tylko sparametryzowany w inny sposób.
Wolfgang
2
@digitgopher: Kiedy uruchomisz regresję i skończysz z modelem takim jak ten: , technicznie skończysz z modelem takim jak this: , gdzie ten nowy termin jest zawsze równy „1” (stąd kolumna te). Jeśli miałbyś wyeliminować tę kolumnę z nich podczas przeprowadzania regresji regularnej, skończyłbyś się modelem tendencyjnym, ponieważ w efekcie zmuszałbyś każdy pojedynczy model do początku. y^=β0+β1x1y^=β0x0+β1x1x0
Steve S
2
@ SteveS: W rzeczywistości R jest tak przyjazny, że jeśli spróbujesz usunąć punkt przechwytujący, - 1gdy masz jeden predyktor jakościowy reprezentowany jako czynnik (jak w tym pytaniu), zakładasz, że tak naprawdę nie masz na myśli tego i przełącz się na użycie sum- kodowanie zera; co jest oczywiście tylko inną parametryzacją. Zbyt przyjacielski, jeśli mnie zapytasz.
Scortchi - Przywróć Monikę
2
@SteveS: Dzięki. Powinienem był sprawdzić: przełącza się na kodowanie komórkowe. Nie robi tego, czego można się spodziewać, co pasuje do modelu wymuszonego pochodzenia, przed którym całkiem słusznie ostrzegasz (zrobi to jednak, gdy kolumna jest typu numerycznego).
Scortchi - Przywróć Monikę

Odpowiedzi:

10

Rozważ następujące:

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)

Pierwsze dwa polecenia są identyczne. Ostatnie dwa polecenia określają, aby nie tworzyć przechwytywania i zachowuje dwie zmienne zastępcze.

RUser4512
źródło
1
Dziękuję - to wyjaśnia kod, który chciałem. Ale to nie wyjaśnia dlaczego ani nie pomaga mi zrozumieć.
digitgopher
2
@digitgopher: Zobacz ats.ucla.edu/stat/r/library/contrast_coding.htm, aby uzyskać wyjaśnienie kodowania na poziomie odniesienia i innych schematów kodowania.
Scortchi - Przywróć Monikę