5 votos

Coeficientes estandarizados para modelos lineales con variables numéricas y factoriales en regresión lineal múltiple utilizando la función scale() en R

Tengo una pregunta sobre los coeficientes estandarizados (beta) en los modelos lineales. Ya he hecho una pregunta aquí . De las respuestas asumo que debería usar las R scale() funcionan tanto en la variable dependiente como en todas las variables independientes (IV), para estimar los coeficientes estandarizados del modelo. Pero cuando utilicé la scale() en una IV, que pertenece a la clase de factor I, recibe el siguiente mensaje de error:

Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

Para ilustrar mi problema aquí hay una EPM:

Primero el modelo lineal con coeficientes no estandarizados:

> data(ChickWeight)
> aa <- lm(weight ~ Time + Diet, data=ChickWeight)
> summary(aa)

Call: 
lm(formula = weight ~ Time + Diet, data = ChickWeight)

Residuals:
     Min       1Q   Median       3Q      Max 
-136.851  -17.151   -2.595   15.033  141.816 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  10.9244     3.3607   3.251  0.00122 ** 
Time          8.7505     0.2218  39.451  < 2e-16 ***
Diet2        16.1661     4.0858   3.957 8.56e-05 ***
Diet3        36.4994     4.0858   8.933  < 2e-16 ***
Diet4        30.2335     4.1075   7.361 6.39e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 35.99 on 573 degrees of freedom
Multiple R-squared:  0.7453,    Adjusted R-squared:  0.7435 
F-statistic: 419.2 on 4 and 573 DF,  p-value: < 2.2e-16

Ahora quiero estimar los coeficientes estandarizados usando el scale que da como resultado el siguiente mensaje de error:

> bb <- lm(scale(weight) ~ scale(Time) + scale(Diet), data=ChickWeight)
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

Como me di cuenta por mí mismo el mensaje de error aparece, porque Diet pertenece a la clase de factor y no es una variable numérica como se requiere de la scale() función. Intenté lo siguiente de forma alternativa incluyendo la Diet variable sin scale() :

> cc <- lm(scale(weight) ~ scale(Time) + Diet, data=ChickWeight)
> summary(cc)

Call:
lm(formula = scale(weight) ~ scale(Time) + Diet, data = ChickWeight)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.92552 -0.24132 -0.03652  0.21151  1.99538 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.24069    0.03415  -7.048 5.25e-12 ***
scale(Time)  0.83210    0.02109  39.451  < 2e-16 ***
Diet2        0.22746    0.05749   3.957 8.56e-05 ***
Diet3        0.51356    0.05749   8.933  < 2e-16 ***
Diet4        0.42539    0.05779   7.361 6.39e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.5064 on 573 degrees of freedom
Multiple R-squared:  0.7453,    Adjusted R-squared:  0.7435 
F-statistic: 419.2 on 4 and 573 DF,  p-value: < 2.2e-16

Mi pregunta ahora es, si esta es la forma correcta de estimar los coeficientes estandarizados para un modelo con variables tanto numéricas como factoriales.

Muchas gracias de antemano por la respuesta.

Saludos,

Magnus

7voto

Brandon Grossutti Puntos 140

No estoy seguro de que los coeficientes estandarizados tengan mucho sentido cuando se tienen variables ficticias.

La idea de un coeficiente estandarizado es que pone las unidades de la variable de predicción en una forma que entendemos. Tengo una idea de lo que es una desviación estándar, mientras que si no sé lo que es el tiempo (o no sé si se mide en segundos, minutos, horas, días, semanas), no puedo interpretar las unidades.

Si tienes un factor, tus medidas están codificadas de forma ficticia: tienes dieta2, o tienes dieta1. Sé lo que significa esa escala. Andrew Gelman sugiere que en lugar de dividir por la DE, dividamos por 2 DE, y esto hace que el efecto de una variable continua sea comparable al efecto de una variable codificada con dummy. Documento aquí: http://www.stat.columbia.edu/~gelman/investigación/publicado/estandarización7.pdf entrada del blog aquí: http://andrewgelman.com/2006/06/21/standardizing_r/

De todos modos, lo que haces no es del todo correcto, porque no quieres coeficientes estandarizados para las variables ficticias (factoriales). Pero mientras las describas adecuadamente, no pasa nada.

Si realmente lo desea, puede estandarizar las variables antes de realizar el análisis y obtener coeficientes realmente estandarizados. Sin embargo, estos no tendrán ningún sentido:

ChickWeight$d2 <- scale(ChickWeight$Diet == 2)
ChickWeight$d3 <- scale(ChickWeight$Diet == 3)
ChickWeight$d4 <- scale(ChickWeight$Diet == 4) 
bb <- lm(scale(weight) ~ scale(Time) + d2 + d3 + d4, data=ChickWeight   )

0 votos

Gracias por su respuesta. Así que si nos quedamos con los ejemplos anteriores summary(bb) daría los mismos coeficientes estandarizados que lm.beta(aa) de la lm.beta paquete. Así que al final usando lm.beta() sería un poco más conveniente. He vuelto a comprobar los resultados con el SPSS, que estima los mismos valores para los coeficientes estandarizados.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X