Чому стовпець перехоплення в model.matrix замінює перший фактор?


9

Я намагаюся перетворити свій факторний стовпчик на фіктивні змінні:

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

Немає стовпця для першого значення мого коефіцієнта ( ".lte100"), саме так слід класифікувати перший рядок. Як повернути ці дані? І що означає стовпчик «Перехоплення», який, здається, означає 1?


3
Якщо у вас є фіктивні змінні "K", то в отриманій вами моделі буде встановлено а.) Термін перехоплення (який є стовпцем з них) та b.) "K-1" додаткові стовпці. Причина полягає в тому, що в іншому випадку стовпці отриманої матриці не були б лінійно незалежними (і, як результат, ви не змогли б зробити OLS ).
Стів S

2
Чому "не має сенсу"? Це та сама модель з однаковою придатністю, просто параметризована по-іншому.
Вольфганг

2
@digitgopher: Коли ви запускаєте регресію і закінчуєте подібну модель: , ви технічно закінчуєте таку модель, як це: , де цей новий термін завжди дорівнює "1" (звідси стовпчик ті). Якщо ви будете усунути цей стовпець з цих рядків під час регулярної регресії, ви отримаєте упереджену модель, оскільки ви, фактично, змушуєте кожну модель через походження. y^=β0+β1x1y^=β0x0+β1x1x0
Стів S

2
@SteveS: Насправді R настільки доброзичливий, що якщо ви спробуєте зняти перехоплення, - 1коли у вас є один категоричний предиктор, представлений як фактор (як у цьому питанні), ви вважаєте, що ви насправді цього не означаєте і переходите до використання sum- нульове кодування; що, звичайно, просто інша параметризація. Занадто доброзичливо, якщо ви запитаєте мене.
Scortchi

2
@SteveS: Дякую Я повинен був перевірити: він переходить на кодування - означає кодування. Це не робить те, що ви можете очікувати, що відповідає моделі примусового проходження за походженням, про яку ви цілком справедливо попереджаєте (це зробить це, хоча, коли стовпець числового типу).
Scortchi

Відповіді:


10

Розглянемо наступне:

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)

Перші дві команди однакові. Останні дві команди вказують не виробляти перехоплення і зберігає дві створені фіктивні змінні.


1
Дякую - це пояснює код, який я хотів. Але це не пояснює, чому чи допоможе мені зрозуміти.
digitgopher

2
@digitgopher: Див. ats.ucla.edu/stat/r/library/contrast_coding.htm для пояснення еталонного кодування та інших схем кодування.
Scortchi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.