L oop для множественной линейной регрессии - PullRequest
0 голосов
/ 07 апреля 2020

Привет, я начинаю использовать r и зацикливаюсь на анализе моих данных. У меня есть датафрейм, который имеет 80 столбцов. Столбец 1 является зависимой переменной, а от столбца 2 до 80 они являются независимыми переменными. Я хочу выполнить 78 множественных линейных регрессий, оставив фиксированную первую независимую переменную модели (столбец 2), и создать список, в котором я могу сохранить все регрессии, чтобы позже иметь возможность сравнивать модели с использованием оценок AI C. как я могу это сделать?

Вот мой л oop

data.frame

for(i in 2:80)

{
Regressions <- lm(data.frame$column1 ~ data.frame$column2 + data.frame [,i])  
}

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

С помощью for l oop мы можем инициализировать list для хранения вывода

nm1 <- names(df1)[2:80]
Regressions <- vector('list', length(nm1))
for(i in seq_along(Regressions)) {
   Regressions[[i]] <- lm(reformulate(c("column2", nm1[i]), "column1"), data = df1)
  }

Или использовать paste вместо reformulate

for(i in seq_along(Regressions)) {
   Regressions[[i]] <- lm(as.formula(paste0("column1 ~ column2 + ", 
                                nm1[i])), data = df1)
  }

Используя воспроизводимый пример

nm2 <- names(iris)[3:5]
Regressions2 <- vector('list', length(nm2))
for(i in seq_along(Regressions2)) {
    Regressions2[[i]] <- lm(reformulate(c("Sepal.Width", nm2[i]), "Sepal.Length"), data = iris)
 }



Regressions2[[1]]

#Call:
#lm(formula = reformulate(c("Sepal.Width", nm2[i]), "Sepal.Length"), 
#    data = iris)

#Coefficients:
# (Intercept)   Sepal.Width  Petal.Length  
#      2.2491        0.5955        0.4719  
0 голосов
/ 07 апреля 2020

Используя набор данных iris в качестве примера, вы можете сделать:

lapply(seq_along(iris)[-c(1:2)], function(x) lm(data = iris[,c(1:2, x)]))

[[1]]

Call:
lm(data = iris[, c(1:2, x)])

Coefficients:
 (Intercept)   Sepal.Width  Petal.Length  
      2.2491        0.5955        0.4719  


[[2]]

Call:
lm(data = iris[, c(1:2, x)])

Coefficients:
(Intercept)  Sepal.Width  Petal.Width  
     3.4573       0.3991       0.9721  


[[3]]

Call:
lm(data = iris[, c(1:2, x)])

Coefficients:
      (Intercept)        Sepal.Width  Speciesversicolor   Speciesvirginica  
           2.2514             0.8036             1.4587             1.9468  

Это работает, потому что, когда вы передаете фрейм данных в lm() без формулы, он применяет функцию DF2formula() под капотом. который обрабатывает первый столбец как ответ, а все остальные столбцы - как предикторы.

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