Давайте сначала сгенерируем несколько комбинаций имен переменных.
vars <- c("Gender", "Age", "Nationality", "RoomType")
comb.vars <- expand.grid(vars, vars, stringsAsFactors = FALSE)
comb.vars <- comb.vars[!(comb.vars[,1] == comb.vars[,2]),]
i.vars <- apply(comb.vars, 1, paste, collapse = "*")
Тогда давайте объединим взаимодействия в партии исчерпывающих комбинаций (вдохновение здесь ).
combs.vars <- list(i.vars)
k <- length(i.vars) - 1
while(k > 1){
combs <- t(combn(i.vars, k))
combs.vars <- c(combs.vars, split(combs, seq(nrow(combs))))
k <- k - 1
}
Наконец, давайте создадим формулы из комбинаций и запустим GLM на них.
res <- NULL
for(i in 1:length(combs.vars)){
f <- formula(paste("response ~ Gender + Age + Nationality + RoomType +",
paste(combs.vars[[i]], collapse = "+")))
fit <- glm(f, data = input.data)
res <- c(res, fit$call, AIC(fit))
}
res <- data.frame(matrix(res, ncol = 2, byrow = TRUE))
Обратите внимание, что response
и input.data
должны быть заменены вашими реальными именами соответствующего имени переменной ответа и data.frame
с данными.