Запустите все возможные взаимодействия в регрессии GLM, используя R - PullRequest
0 голосов
/ 11 мая 2018

У меня есть большой набор требований по медицинскому страхованию, к которым я хочу применить регрессию GLM. У меня есть 4 категориальных переменных предиктора, в частности, пол, возрастные группы, национальность и тип номера (VIP, обычный и т. Д.).

Моя базовая модель GLM будет включать в себя термин перехват и эти 4 переменные. Теперь я хочу ввести двусторонние взаимодействия, но я не уверен, какие взаимодействия важны для модели, а какие нет. Для этой цели я хочу запустить все возможные комбинации взаимодействий вместе с 4 базовыми предикторами, а затем сравнить все результаты модели на основе определенной характеристики, такой как AIC или BIC или R-квадрат.

Я хочу знать, есть ли в R функция или простой способ запустить все возможные взаимодействия и сохранить их AIC / BIC / R-квадрат без необходимости записывать функцию glm для каждой возможной модели.

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

 1. intercept + Gender + Age + Nationality + RoomType
 2. intercept + Gender + Age + Nationality + RoomType + gender*age
 3. intercept + Gender + Age + Nationality + RoomType + gender*nationality
 4. intercept + Gender + Age + Nationality + RoomType + gender*roomtype
 5. intercept + Gender + Age + Nationality + RoomType + age*nationality
 6. intercept + Gender + Age + Nationality + RoomType + age*roomtype
 7. intercept + Gender + Age + Nationality + RoomType + nationality*roomtype
 8. intercept + Gender + Age + Nationality + RoomType + gender*age + gender*nationality

и т. Д.

1 Ответ

0 голосов
/ 11 мая 2018

Давайте сначала сгенерируем несколько комбинаций имен переменных.

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 с данными.

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