Цикл линейной регрессии для каждой независимой переменной отдельно от зависимой

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

Допустим, я использую mtcars. Как бы я написал в коде R, который берет каждую переменную в кадре данных и регрессирует ее в MPG?

Еще лучше было бы получить сводку по каждой независимой переменной и иметь какое-либо присвоение имени, такое как x1=, x2= и т. Д.

summary(lm(mpg~eachvar,data=mtcars))

3 ответа

Решение

Привет, попробуй что-нибудь подобное:

models <- lapply(paste("mpg", names(mtcars)[-1], sep = "~"), formula)
res.models <- lapply(models, FUN = function(x) {summary(lm(formula = x, data = mtcars))})
names(res.models) <- paste("mpg", names(mtcars)[-1], sep = "~")
res.models[["mpg~disp"]]


# Call:
# lm(formula = x, data = mtcars)

# Residuals:
#     Min      1Q  Median      3Q     Max 
# -4.8922 -2.2022 -0.9631  1.6272  7.2305 

# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)    
# (Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
# disp        -0.041215   0.004712  -8.747 9.38e-10 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# Residual standard error: 3.251 on 30 degrees of freedom
# Multiple R-squared:  0.7183,  Adjusted R-squared:  0.709 
# F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10

Это сделает это за вас.

lapply( mtcars[,-1], function(x) summary(lm(mtcars$mpg ~ x)) )

Объект data.frame представляет собой список с некоторыми другими функциями, поэтому он будет проходить через каждый столбец mtcars, за исключением первого, и выполнять регрессии. Если вы сохраните полученный список в нечто вроде L тогда вы можете легко получить доступ к каждому из них, просто используя то же имя или номер, что и столбец в оригинальном файле данных. Так L$cyl дает регрессионное резюме для mpg на cyl,

Data.table версия решения Johns

library(data.table)
Fits <- 
    data.table(mtcars)[, 
              .(MyFits = lapply(.SD, function(x) summary(lm(mpg ~ x)))), 
              .SDcols = -1]

Некоторые объяснения кода

  • data.table преобразует mtcars к data.table объект
  • .SD также data.table объект, который содержит столбцы, над которыми нужно работать
  • .SDcols = -1 говорит .SD не использовать первый столбец (так как мы не хотим соответствовать lm(mpg ~ mpg)
  • lapply просто запускает модель по всем столбцам в .SD (кроме пропущенного нами) и возвращает объекты класса list

Fit будет список резюме, вы можете проверить их с помощью

Fits$MyFits

Но вы также можете оперировать ими, например, применяя coef функция на каждой посадке

Fits[, lapply(MyFits, coef)]

Или получить r.squered

Fits[, lapply(MyFits, `[[`, "r.squared")]
Другие вопросы по тегам