Запустить линейную модель в наборе переменных - PullRequest
0 голосов
/ 05 декабря 2018

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

Простой пример:

names <- c("Var1", "Var2", "Var3") 
vars <- ggm::powerset(names, sort = T, nonempty = T) 

Функция powerset дает мне все комбинации из 3 переменных - список из 7 элементов, каждый элемент имеет тип символа.(фактический код, который я пытаюсь запустить, имеет 16 переменных, поэтому я не хочу писать каждую модель вручную).

Теперь я хотел бы запустить модели в каждой из этих моделей.комбинации переменных.На данный момент я написал следующий код (он не работает, но может быть хорошим началом):

i <- 1
for (dep_var in vars){
  assign(paste0("modelo", i), lm(lapply(paste("Y", dep_var, sep = "~"), formula), 
  data = data))
  i <- i+1
}

В конечном счете, я хотел бы создать разные модели и выбрать лучшую модель из комбинациив образце AIC и BIC и вне образца MAE и RMSE.

Большое спасибо!Любая помощь приветствуется!

1 Ответ

0 голосов
/ 05 декабря 2018

Простой пример работы с mtcars данными с mpg в качестве зависимой переменной и коллекцией AIC для выбора модели.Я согласен, что существует множество пакетов R для тестирования нескольких моделей по некоторому критерию (bestglm, leaps, glmulti, MASS).

mtcars_exp <- mtcars %>%
  select(-mpg)

vars <- ggm::powerset(names(mtcars_exp), sort = T, nonempty = T) 

results <- data.frame(AIC_lm_fit =  vector("numeric"),
           model = vector("character"))

Для петли для подгонки линейных моделей

for (j in 1:length(vars)){
  lm_fit <- lm(mpg ~ ., data = mtcars[,c("mpg", vars[[j]])])
  results <- rbind(results,
                   data.frame(AIC_lm_fit =  AIC(lm_fit),
                            model = toString(vars[[j]])))
}

Выбор модели с минимальным AIC

results[AIC_lm_fit==min(AIC_lm_fit),]
        AIC_lm_fit        model
105   154.1194 wt, qsec, am

Сравнение с результатами функции MASS :: stepAIC

library(MASS)
lm_fit <- lm(mpg ~ ., data = mtcars)
lm_fit_2 <- stepAIC(lm_fit)
lm_fit_2$call

lm(formula = mpg ~ wt + qsec + am, data = mtcars)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...