Почему столбец пересечения в 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?

digitgopher
источник
3
Если у вас есть фиктивные переменные «K», тогда ваша результирующая модель будет иметь.) Термин «перехват» (который является столбцом из них) и b.) «K-1» дополнительные столбцы. Причина в том, что в противном случае столбцы результирующей матрицы не были бы линейно независимыми (и, как следствие, вы не сможете выполнять OLS ).
Стив С
2
Почему «не имеет смысла»? Это та же модель с тем же качеством подгонки, просто параметризованная по-другому.
Вольфганг
2
@digitgopher: Когда вы запускаете регрессию и получаете такую ​​модель: , технически вы получаете такую ​​модель, как this: , где этот новый термин всегда равен «1» (отсюда и столбец из них). Если бы вы исключили этот столбец единиц при запуске регулярной регрессии, вы бы получили предвзятую модель, поскольку фактически вы бы заставляли каждую модель проходить через источник. y^=β0+β1x1y^=β0x0+β1x1x0
Стив С
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)

Первые две команды идентичны. Последние две команды указывают, что они не должны производить перехват, и сохраняют две фиктивные переменные.

RUser4512
источник
1
Спасибо - это объясняет код, который я хотел. Но это не объясняет почему или помогает мне понять.
цифровик
2
@digitgopher: См ats.ucla.edu/stat/r/library/contrast_coding.htm для объяснения опорного уровня кодирования и других схем кодирования.
Scortchi - Восстановить Монику