#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
, чтобы иметь возможность отделять, какие выходные данные поступают из какого столбца.