extrayendo coeficientes estandarizados de lm en R


Mis disculpas por la pregunta tonta...pero no puedo encontrar una solución simple

Quiero extraer los coeficientes estandarizados de un modelo lineal ajustado (en R) debe haber una forma simple o función que haga eso. ¿puedes decirme qué es?

EDITAR (siguiendo algunos de los comentarios a continuación): Probablemente debería haber proporcionado más información contextual sobre mi pregunta. Estaba enseñando un taller introductorio de R para un grupo de psicólogos. Para ellos, un modelo lineal sin la capacidad de obtener coeficientes estandarizados, es como si no se ejecuta el modelo en todos (ok, esto es un poco exagerado, pero usted consigue el punto). Cuando hemos hecho algunas regresiones esta fue su primera pregunta, que (mi mal) no anticipé (no soy psicólogo). Por supuesto que puedo programar esto yo mismo, y por supuesto puedo buscar paquetes que lo hagan por mí. Pero al mismo tiempo, creo que esto es una especie de característica básica y común requerida de modelos lineales, que en el spot, pensé que debería haber una función básica que lo haga sin necesidad de instalar más y más paquetes (lo que se percibe como una dificultad para los principiantes). Así que pregunté (y esto también fue una oportunidad para mostrarles cómo obtener ayuda cuando la necesitan).

Mis disculpas por aquellos que piensan que hice una pregunta estúpida, y mis muchas gracias por aquellos que se tomaron el tiempo para responderla.

Author: amit, 2014-06-19

2 answers

Hay una función de conveniencia en el paquete QuantPsyc para eso, llamada lm.beta. Sin embargo, creo que la forma más fácil es estandarizar las variables. Los coeficientes serán entonces automáticamente los coeficientes "beta" estandarizados (es decir, coeficientes en términos de desviaciones estándar).

Por ejemplo,

 lm(scale(your.y) ~ scale(your.x), data=your.Data)

Le dará el coeficiente estandarizado.

¿Son realmente iguales? Lo siguiente ilustra que ambos son idéntico:

library("QuantPsyc")
mod <- lm(weight ~ height, data=women)
coef_lmbeta <- lm.beta(mod)

coef_lmbeta
> height 
  0.9955 

mod2 <- lm(scale(weight) ~ scale(height), data=women)
coef_scale <- coef(mod2)[2]

coef_scale
> scale(height) 
  0.9955 

all.equal(coef_lmbeta, coef_scale, check.attributes=F)
[1] TRUE

Que muestra que ambos son idénticos, como deberían ser.

¿Cómo evitar nombres de variables torpes? En caso de que no desee tratar con estos nombres de variables torpes como scale(height), una opción es estandarizar las variables fuera de la llamada lm en el propio conjunto de datos. Por ejemplo,

women2 <- lapply(women, scale) # standardizes all variables

mod3 <- lm(weight ~ height, data=women2)
coef_alt <- coef(mod3)[2]
coef_alt
> height 
  0.9955 

all.equal(coef_lmbeta, coef_alt)
[1] TRUE

¿Cómo estandarizo múltiples variables convenientemente? En el probable caso de que no desee estandarizar todas las variables en su conjunto de datos, usted podría elegir todo lo que ocurre en su fórmula. Por ejemplo, haciendo referencia al mtcars-dataset now (ya que women solo contiene height y weight):

Digamos que el siguiente es el modelo de regresión que quiero estimar:{[17]]}

 modelformula <- mpg ~ cyl + disp + hp + drat + qsec

Podemos usar el hecho de que all.vars me da un vector de los nombres de las variables.

 all.vars(modelformula)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "qsec"

Podemos usar esto para subconjuntos del conjunto de datos en consecuencia. Por ejemplo,

mycars <- lapply(mtcars[, all.vars(modelformula)], scale) 

Me dará un conjunto de datos en el que todas las variables han sido estandarizar. Las regresiones lineales usando mycars ahora darán betas estandarizadas. Por favor, asegúrese de que la estandarización de todas estas variables tiene sentido, sin embargo!

 35
Author: coffeinjunky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-31 16:58:03

Simplemente use colnames (data) con lapply o sapply como: lapply(data[, colnames (data)], scale)

 0
Author: user10430359,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-28 16:00:10