Loop de regresión lineal para cada variable independiente individualmente contra dependiente

Quiero averiguar cómo crear un bucle o usar una de las funciones de aplicar para obtener información de regresión individual 1: 1 para cada variable en un conjunto de datos contra la variable dependiente.

Digamos que estoy usando mtcars. ¿Cómo escribiría en el código R que toma cada variable en el dataframe y la regresa contra MPG?

Aún mejor sería obtener un resumen de cada variable independiente con y tener algún tipo de asignación de nombre como x1 =, x2 = etc.

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

Hola, intente algo así:

 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 

Esto lo hará por ti.

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

Un objeto data.frame es una lista con algunas otras características, por lo que pasará por cada columna de mtcars, excluyendo la primera y realizará las regresiones. Si guarda la lista resultante en algo como L entonces puede acceder a cada uno fácilmente con solo usar el mismo nombre o número que la columna en el data.frame original. Entonces L$cyl da el resumen de regresión para mpg en cyl .

Una versión data.table de la solución de Johns

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

Algunas explicaciones del código

  • data.table convertirá mtcars en un objeto data.table
  • .SD también es un objeto data.table que contiene las columnas en las que uno quiere operar
  • .SDcols = -1 le dice a .SD no use la primera columna (ya que no queremos ajustar lm(mpg ~ mpg)
  • lapply simplemente ejecuta el modelo sobre todas las columnas en .SD (excepto el que omitimos) y devuelve objetos de la list de clase

Fit será una lista de resúmenes, puede inspeccionarlos usando

 Fits$MyFits 

Pero también puede operar sobre ellos, por ejemplo, aplicando la función coef en cada ajuste

 Fits[, lapply(MyFits, coef)] 

O recibiendo el r.squered

 Fits[, lapply(MyFits, `[[`, "r.squared")]