Переберите список и добавьте, чтобы выполнить регрессию в R - PullRequest
3 голосов
/ 16 апреля 2019

Я знаю, что где-то будет существовать такой вопрос, но я не смог его найти. У меня есть переменные a, b, c, d, и я хочу написать цикл, чтобы я регрессировал и добавлял переменные и снова регрессировал с дополнительной переменной

lm(Y ~ a, data = data), затем lm(Y ~ a + b, data = data), затем

lm(Y ~ a + b + c, data = data) и т. Д.

Как бы вы это сделали?

Редактировать

Вот следующий связанный вопрос: Ссылка

Ответы [ 3 ]

3 голосов
/ 16 апреля 2019

Использование paste и as.formula , пример использования mtcars набор данных:

myFits <- lapply(2:ncol(mtcars), function(i){
  x <- as.formula(paste("mpg", 
                        paste(colnames(mtcars)[2:i], collapse = "+"), 
                        sep = "~"))
  lm(formula = x, data = mtcars)
})

Примечание: выглядит как повторяющийся пост, я нашел лучшее решение для этого типа вопросов, не могу найти в данный момент.

3 голосов
/ 16 апреля 2019

Вы можете сделать это с помощью подхода lapply / reformulate.

formulae <- lapply(ivars, function(x) reformulate(x, response="Y"))
lapply(formulae, function(x) summary(do.call("lm", list(x, quote(dat)))))

Данные

set.seed(42)
dat <- data.frame(matrix(rnorm(80), 20, 4, dimnames=list(NULL, c("Y", letters[1:3]))))
ivars <- sapply(1:3, function(x) letters[1:x])  # create an example vector ov indep. variables
2 голосов
/ 16 апреля 2019
vars = c('a', 'b', 'c', 'd')
# might want to use a subset of names(data) instead of
# manually typing the names

reg_list = list()
for (i in seq_along(vars)) {
  my_formula = as.formula(sprintf('Y ~ %s', paste(vars[1:i], collapse = " + ")))
  reg_list[[i]] = lm(my_formula, data = data)
}

Затем можно проверить отдельный результат, например, summary(reg_list[[2]]) (для 2-го).

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