Не удаляйте идеально коллинеарные переменные из model.matrix

Я знаю, что могу построить модель матрицы следующим образом:

df <- data.frame(outcome = rnorm(4),
                 group1 = rep(c('A', 'B'), each = 2),
                 group2 = rep(c('A', 'B'), times = 2))

model.matrix(outcome ~ group1 + group2 - 1, data=df)

Что дает

  group1A group1B group2B
1       1       0       0
2       1       0       1
3       0       1       0
4       0       1       1
attr(,"assign")
[1] 1 1 2
attr(,"contrasts")
attr(,"contrasts")$group1
[1] "contr.treatment"

attr(,"contrasts")$group2
[1] "contr.treatment"

Обратите внимание, что один из уровней факторов отброшен, потому что если бы он включал матрицу проектирования, был бы дефицит ранга. Тем не менее, в модели, которую я хочу оценить, это на самом деле хорошо, и я хотел бы сохранить четвертый столбец. Есть ли способ сохранить model.matrix бросить это?

1 ответ

У меня недавно возникла такая же проблема. Я спешил и пришел к этому безобразному решению:

res <- as.list(vector(length = ncol(df[,-1])))
for(i in 1:ncol(df[,-1])) {
    res[[i]] <-  model.matrix(~ -1 + ., data = df[,i+1, drop = FALSE])
}
res <- do.call(cbind, res)

Действительно интересно узнать, возможно ли это напрямую с model.matrix

Другие вопросы по тегам