Как запустить регрессию с различными переменными в R, используя цикл?

#r #loops #regression

Вопрос:

Я хочу оценить следующие регрессионные модели:

 y <- rnorm(1:100)
x1 <- 1:100
x2 <- 1:100
x3 <- 1:100

my_data <- data.frame(cbind(y, x1, x2, x3))

m1 <- lm(y ~ x1, data = my_data)
m2 <- lm(y ~ x2, data = my_data)
m3 <- lm(y ~ x3, data = my_data)
 

Я хочу запустить несколько подобных моделей, используя один и тот же набор данных и разные независимые переменные в каждой модели. Как я могу использовать цикл для запуска каждой модели?

Ответ №1:

Это может быть легко достигнуто с помощью apply() функции:

 data_to_analyse <- my_data[, -1] # leave out the y column for this analysis

out <- apply(data_to_analyse, 2, function(current_col){

lm.out <- lm(my_data$y ~ current_col)

})
 

При этом берется каждый столбец data.frame («current_col»), а затем выполняется линейная регрессия. Вывод функции представляет собой список, содержащий результаты каждой регрессии, каждая запись названа именем переменной.

Комментарии:

1. Для более простого сравнения вы могли broom::tidy бы вывести результат, прежде чем помещать его в список, а затем dplyr::bind_rows получить один кадр данных со всеми вашими результатами. Обязательно включите .id = "name" в свой bind_rows , чтобы иметь возможность отделять, какие выходные данные поступают из какого столбца.