Добавьте все взаимодействия среди категориальных переменных в лассо в R - PullRequest
1 голос
/ 08 марта 2020

Я хочу добавить все возможные взаимодействия среди восьми переменных, которые являются категориальными. Мой набор данных выглядит следующим образом введите описание изображения здесь

Я использую as.formula, чтобы включить все взаимодействия. Мой код ниже

f = as.formula(y ~ .^8)
x = model.matrix(f, data)[, -1]
y = data$y

Однако мой x становится следующим введите описание изображения здесь

И всего 6560 столбцов. Я понятия не имею, почему это становится этим. Разве это не должно быть 1, 2, 3 в x переменных? Могу я спросить, как мне это исправить или интерпретировать?

Спасибо!

1 Ответ

0 голосов
/ 09 марта 2020

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

Существует 3 ^ 8 различных возможных комбинаций значений для ваших предикторов. Таким образом, в вашей матрице дизайна есть 3 ^ 8 = 6561 возможных основных эффектов и взаимодействий (включая перехват).

Чтобы увидеть, как они кодируются, рассмотрим один трехуровневый предиктор:

> model.matrix(lm(y ~ x1))
  (Intercept) x12 x13
1           1   0   0
2           1   1   0
3           1   0   1

Один трехуровневый коэффициент кодируется как 3 столбца, перехват и две фиктивные переменные.

Теперь добавьте второй трехуровневый предиктор и их взаимодействие:

> model.matrix(lm(y ~ (x1+x2)^2))
  (Intercept) x12 x13 x22 x23 x12:x22 x13:x22 x12:x23 x13:x23
1           1   0   0   0   1       0       0       0       0
2           1   1   0   1   0       1       0       0       0
3           1   0   1   0   0       0       0       0       0

Так что здесь 9 допустимых комбинаций этих двоичных переменных. Когда вы получаете до 8 переменных, каждая из ваших 6561 возможных комбинаций предикторов представляется допустимыми комбинациями этих двоичных переменных. (очевидно, вы не можете иметь одновременно и x12, и x13 положительный результат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...