Ограничение линейной модели взаимодействиями 3-го уровня в R
У меня есть набор данных с 14 двоичными переменными. Я уже проверил значимые переменные, но я также хотел бы проверить значимые взаимодействия. Тем не менее, я знаю, что взаимодействия более высокого уровня вряд ли будут существенными и просто запутывают модель. Можно ли в любом случае запустить линейную модель в R, но скажите, чтобы она проверяла только взаимодействие между максимум 3 переменными?
2 ответа
Решение
Используя первые 5 столбцов встроенного набора данных anscombe:
lm(y1 ~ .^3, anscombe[1:5])
давая:
Call:
lm(formula = y1 ~ .^3, data = anscombe[1:5])
Coefficients:
(Intercept) x1 x2 x3 x4 x1:x2
12.81992 -2.60371 NA NA -0.16258 0.36279
x1:x3 x1:x4 x2:x3 x2:x4 x3:x4 x1:x2:x3
NA NA NA NA NA -0.01345
x1:x2:x4 x1:x3:x4 x2:x3:x4
NA NA NA
Ручной подход
использование combn
составить триплетные комбинации функций
Comb <- combn(names(iris)[1:4],3)
Выход
[,1] [,2] [,3] [,4]
[1,] "Sepal.Length" "Sepal.Length" "Sepal.Length" "Sepal.Width"
[2,] "Sepal.Width" "Sepal.Width" "Petal.Length" "Petal.Length"
[3,] "Petal.Length" "Petal.Width" "Petal.Width" "Petal.Width"
Тогда используйте as.formula
вручную определить формулу, используя комбинации из 3 функций
ans <- apply(Comb, 2, function(x) glm(as.formula(paste0("Species ~ ", paste0(x, collapse=" + "))), data=iris, family=binomial()))
ans
Выход
[[1]]
Call: glm(formula = as.formula(paste0("Species ~ ", paste0(x, collapse = " + "))),
family = binomial(), data = iris)
Coefficients:
(Intercept) Sepal.Length Sepal.Width Petal.Length
71.80 -23.91 -13.51 34.95
Degrees of Freedom: 149 Total (i.e. Null); 146 Residual
Null Deviance: 191
Residual Deviance: 3.523e-09 AIC: 8
[[2]]
Call: glm(formula = as.formula(paste0("Species ~ ", paste0(x, collapse = " + "))),
family = binomial(), data = iris)
Coefficients:
(Intercept) Sepal.Length Sepal.Width Petal.Width
-25.477 6.762 -19.057 59.292
Degrees of Freedom: 149 Total (i.e. Null); 146 Residual
Null Deviance: 191
Residual Deviance: 4.144e-09 AIC: 8
# etc