Ограничение линейной модели взаимодействиями 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
Другие вопросы по тегам