Цикл линейной регрессии для каждой независимой переменной отдельно от зависимой
Я хочу выяснить, как создать цикл или использовать одну из функций применения, чтобы получить индивидуальную регрессионную информацию 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")]