3 votos

Cómo eliminar "NA" en la salida del resumen de lm

Los datos con los que estoy trabajando se encuentran aquí http://www.stat.ucla.edu/projects/datasets/

Son los datos de los gemelos y he descargado el archivo de Stata.

Estoy realizando una regresión múltiple y esto es lo que tengo

library(foreign)
twin.data=read.dta("twins.dta")

attach(twin.data)
head(twin.data)
twin.data=na.omit(twin.data)
m1=lm(dlhrwage~deduc1+age+agesq+hrwageh+whiteh+maleh+educh+hrwagel+whitel+malel+educl+deduc2+dten+dmarried+duncov)
summary(m1)

Call:
lm(formula = dlhrwage ~ deduc1 + age + agesq + hrwageh + whiteh + 
maleh + educh + hrwagel + whitel + malel + educl + deduc2 + 
dten + dmarried + duncov)

 Residuals:
 Min       1Q   Median       3Q      Max 
-0.66072 -0.18017 -0.04059  0.11919  1.04205 

 Coefficients: (2 not defined because of singularities)
          Estimate Std. Error t value Pr(>|t|)    
(Intercept)  6.087e-01  3.690e-01   1.650 0.101391    
deduc1       4.005e-02  1.896e-02   2.112 0.036522 *  
age         -1.355e-02  1.560e-02  -0.869 0.386628    
agesq        9.995e-05  1.932e-04   0.517 0.605846    
hrwageh      4.521e-02  3.183e-03  14.204  < 2e-16 ***
whiteh      -1.322e-01  1.946e-01  -0.679 0.498151    
maleh       -3.259e-02  5.192e-02  -0.628 0.531299    
educh       -2.886e-02  1.370e-02  -2.107 0.037006 *  
hrwagel     -3.239e-02  2.746e-03 -11.798  < 2e-16 ***
whitel       1.754e-01  2.014e-01   0.871 0.385267    
malel               NA         NA      NA       NA    
educl               NA         NA      NA       NA    
deduc2       1.505e-02  1.656e-02   0.909 0.365160    
dten         1.476e-02  3.741e-03   3.947 0.000128 ***
dmarried     4.486e-02  4.878e-02   0.920 0.359483    
duncov      -1.575e-02  5.399e-02  -0.292 0.770992    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2977 on 133 degrees of freedom
(36 observations deleted due to missingness)
Multiple R-squared:  0.7626,    Adjusted R-squared:  0.7394 
F-statistic: 32.86 on 13 and 133 DF,  p-value: < 2.2e-16

El problema aquí es el 'NA' que aparece tanto para malel como para educ1

MALEL es 1 si el gemelo 1 es varón, 0 en caso contrario. (categórico)

EDUCL es la educación autodeclarada (en años) del gemelo 1. (numérico)

¿cómo puedo hacer frente a esto?

la salida de malel es

 malel
  [1] 0 0 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0
 [40] 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 1 0 0 0
[79] 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1  0 1 1
[118] 0 1 0 0 1 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1
[157] 0 0 1 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0

La salida de educl es

> educl
  [1] 16 10 12 12 14 14 15 14 14 12 13 12 12 19 12 14 16 12 12 12 12 16 12 14 14 12
 [27] 12 14 12 20 12 16 12 11 12 18 18 16 12 14 16 12 16 18 16 13 15 17 16 12 20 14
 [53] 14 12 13 19 13 13 18 16 13 14 18 16 13 12  8 18 14 13 15 16 16 16 14 19 16 12
 [79] 14 12 15 12 12 16 13 16 10 13 12 12 14 12 14 14 16 14 16 12 18 12 16 16 13 16
[105] 12 14 14 16 12 14 16 15 12 13 14 16 15 13 15 10 12 18 12 16 14 14 12 13 15 12
[131] 20 12 14 14 16 16 13 15 16 14 16 12 12 12 12 12 16 12 18 12 12 15 12 12 15 14
[157] 12 12 12 12 12 13 13 13 16 12 13 13 16 18 12 16 10 13 12 12 12 14 12 16 12 16
[183] 16

5voto

Pere Puntos 658

El problema aquí es que malel y educl son combinaciones lineales de otros predictores.

Puede ver que $malel=maleh$ :

> with(twin.data,MALEL-MALEH)
  [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[112] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[149] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Y eso $educl=educh-deduc1$ :

> with(twin.data,EDUCL-(EDUCH-DEDUC1))
  [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[112] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[149] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Cuando los predictores no son linealmente independientes el sistema algunos parámetros son indefinidos. Esto sólo puede resolverse eliminando los predictores redundantes hasta que todos los predictores sean linealmente independientes.

Y como nota final: la forma de averiguar las combinaciones lineales ha sido ajustando un modelo lineal con la variable sospechosa como respuesta: summary(lm(EDUCL~.-DLHRWAGE,data=twin.data))


Editar sobre cómo "resolver" el problema, después de los comentarios:

Voy a poner un ejemplo del mismo problema.

Una vez un ganadero quiso contar el número de vacas de su rebaño. Supuso que podía hacerlo contando el número de cabezas, patas y orejas del rebaño. Intentó realizar un análisis de regresión y obtuvo los parámetros 1 para las cabezas y NA para las orejas y las patas. Es decir, que podía contar las vacas sólo contando las cabezas.

Sin embargo, decidió que descartar los predictores redundantes era un problema y pidió consejo a un vecino que resultó ser matemático y le dio el método que buscaba: sumar el número de cabezas, patas y orejas del rebaño y dividir la suma entre 7 para obtener el número de vacas.

De todos modos, por favor, observe que la adición de variables redundantes no ha cambiado el modelo - sus predicciones son exactamente las mismas. El matemático sólo lo ha complicado.

Por lo tanto, eliminar las variables exactamente redundantes no es un problema. Sólo se trata de sanear los datos.

El problema para el que están creados la regresión ridge y el Lasso es la colinealidad, y es un problema diferente, porque en la colinealidad la redundancia no es exacta. Aquí la regresión ridge - si funcionara - sería sólo una forma de encontrar una de las muchas estimaciones infinitas de parámetros, y no necesariamente la mejor porque la regresión ridge no reduce los parámetros a cero. Quizá el lazo podría eliminar automáticamente los parámetros redundantes porque sí reduce los parámetros a cero.

Sin embargo, eso no es mejor que lo que ya hace la función lm en R: eliminar los predictores devolviendo NA como estimación del parámetro.

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