0% encontró este documento útil (0 votos)
119 vistas8 páginas

Regresión en R

Este documento presenta una introducción al análisis de regresión en R. Primero, carga y describe un conjunto de datos de automóviles. Luego, realiza gráficos de dispersión de las variables y calcula las correlaciones entre ellas usando la función rcorr. La mayoría de las variables como mpg, cilindros, desplazamiento, potencia y peso están fuertemente correlacionadas, pero la aceleración y el peso no lo están.

Cargado por

samidlimon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
119 vistas8 páginas

Regresión en R

Este documento presenta una introducción al análisis de regresión en R. Primero, carga y describe un conjunto de datos de automóviles. Luego, realiza gráficos de dispersión de las variables y calcula las correlaciones entre ellas usando la función rcorr. La mayoría de las variables como mpg, cilindros, desplazamiento, potencia y peso están fuertemente correlacionadas, pero la aceleración y el peso no lo están.

Cargado por

samidlimon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

  Tatiana

 Petukhova,  “INTRODUCCIÓN A R”    
     

9. Regresión
En esta sección vamos a utilizar datos, determinar la línea de regresión de una variable dependiente dadas
variables independientes (variables explicativas), realizar predicciones y estimaciones a partir de la recta de
regresión mediante valores puntuales.

 
Directorio de trabajo

Estableceremos nosotros mismos un directorio donde queremos guardar los resultados.  


 
>  setwd(  ‘/Users/Documents/Curso')  
 
Datos

En esta sección vamos a utilizar datos “mtcars” que están disponibles en R. Los datos fueron extraídos de la revista
Motor Trend US 1974 y comprenden el rendimiento y 8 aspectos del diseño y rendimiento del automóvil para 32
automóviles (modelos 1973-74).

Cargaremos el conjunto de datos que queremos “mtcars”, usando la función data()  


 
>  data(mtcars)  
>  ?mtcars  
>  attach(mtcars)  
 
Formato:  
Un  marco  de  datos  con  32  observaciones  sobre  11  variables.  
 
[,  1]  mpg    -­‐  el  rendimiento  en  millas  /  galón  (EE.  UU.)  
[,  2]  cyl          -­‐  Número  de  cilindros  
[,  3]  disp.   -­‐  Desplazamiento  ([Link].)  
[,  4]  hp     -­‐  Potencia  bruta  
[,  5]  drat   -­‐  Radio  del  eje  trasero  
[,  6]  wt     -­‐  Peso  (1000  lbs)  
[,  7]  qsec    -­‐  Tiempo  de  1/4  milla  
[,  8]  vs     -­‐  El  tipo  de  motor  :  0=V-­‐motor  y  1=S-­‐motor  (motor  recto)  
[,  9]  am     -­‐  Transmisión  (0  =  automático,  1  =  manual)  
[,  10]gear  -­‐  Engranaje:  número  de  marchas  adelante  
[,  11]carb  -­‐  Número  de  carburadores  
 
>  str(mtcars)  
'[Link]':   32  obs.  of    11  variables:  
 $  mpg  :  num    21  21  22.8  21.4  18.7  18.1  14.3  24.4  22.8  19.2  ...  
 $  cyl  :  num    6  6  4  6  8  6  8  4  4  6  ...  
 $  disp:  num    160  160  108  258  360  ...  
 $  hp    :  num    110  110  93  110  175  105  245  62  95  123  ...  
 $  drat:  num    3.9  3.9  3.85  3.08  3.15  2.76  3.21  3.69  3.92  3.92  ...  
 $  wt    :  num    2.62  2.88  2.32  3.21  3.44  ...  
 $  qsec:  num    16.5  17  18.6  19.4  17  ...  
 $  vs    :  num    0  0  1  1  0  1  0  1  1  1  ...  
 $  am    :  num    1  1  1  0  0  0  0  0  0  0  ...  
 $  gear:  num    4  4  4  3  3  3  3  4  4  4  ...  
 $  carb:  num    4  4  1  1  2  1  4  2  2  4  ...  
 
Convertiremos las variables numéricas en factores:

>  mtcars$cyl=[Link](mtcars$cyl)  
   Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

>  mtcars$vs=[Link](mtcars$vs)  
>  mtcars$am=[Link](mtcars$am)  
>  mtcars$gear=[Link](mtcars$gear)  
>  mtcars$carb=[Link](mtcars$carb)  

Diagramas de dispersión
 
Realizaremos la matriz con los diagramas de dispersión mediante la función pairs

>  attach(mtcars)  
>  pairs(mtcars)  
 

La función rcorr(x,  type=c("pearson","spearman)) del paquete Hmisc produce correlaciones y niveles de significancia.

Argumentos:  
x   -­‐     una  matriz  numérica  con  al  menos  5  filas  y  al  menos  2  columnas  
type   -­‐   especifica  el  tipo  de  correlaciones                
 
Se comprueban las siguientes hipótesis:

Ho: la correlación verdadera es 0


Ha: la correlación verdadera no es 0

Seleccionaremos las columnas con algunas variables cuantitativas y obtendremos correlaciones entre ellas.
 
>  [Link]("Hmisc")  
>  library(Hmisc)  
>  rcorr([Link](coches[,c(1,3:7)]))  
                       mpg      disp        hp    drat        wt      qsec  
mpg      1.00  -­‐0.85  -­‐0.78    0.68  -­‐0.87    0.42  
  Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

disp    -­‐0.85    1.00    0.79  -­‐0.71    0.89  -­‐0.43  


hp          -­‐0.78    0.79    1.00  -­‐0.44    0.66  -­‐0.71  
drat      0.68  -­‐0.71  -­‐0.44    1.00  -­‐0.71    0.09  
wt          -­‐0.87    0.89    0.66  -­‐0.71    1.00  -­‐0.17  
qsec      0.42  -­‐0.43  -­‐0.71    0.09  -­‐0.17    1.00  
 
n=  32  
 
P  
                           mpg        disp                  hp                drat              wt              qsec      
mpg                                  0.0000  0.0000  0.0000  0.0000  0.0171  
disp      0.0000                              0.0000  0.0000  0.0000  0.0131  
hp            0.0000  0.0000                              0.0132  0.0000  0.0000  
drat      0.0000  0.0000  0.0132                              0.0000  0.6196  
wt              0.0000  0.0000  0.0000  0.0000                              0.3389  
qsec        0.0171  0.0131  0.0000  0.6196  0.3389  
 
La mayoría de la las variables están correlacionadas. Entre todas las variables, drat y qsec, wt y qsec no están
correlacionadas, pero drat y wt sí están correlacionadas. Por lo tanto, drat y wt no pueden estar incluidas en el
mismo modelo.

Pruebas de normalidad

Comprobaremos la hipótesis nula de que la muestra ha sido extraída de una población con una distribución de
probabilidad normal. A modo de ejemplo, las variables mpg (el  rendimiento  en  millas  /  galón  (EE.  UU)  y drat (Radio  
del  eje  trasero).

Prueba de Kolmogorov-Smirnov

La prueba se realiza con la función [Link](), la cuál contiene varias opciones predeterminadas.
Usaremos algunas de las ellas

[Link](x,  y,  …,    alternative  =  c("[Link]",  "less",  "greater),  exact  =  NULL)  


 
Argumentos:  
x                         -­‐un  vector  numérico  de  valores  de  datos.  
y           -­‐un  vector  numérico  de  valores  de  datos.  
…   -­‐  parámetros  de  la  distribución  especificada  (como  una  cadena  de  caracteres)  por  y.  
alternative     -­‐  indica  la  hipótesis  alternativa  y  debe  ser  uno  de  "[Link]"  (predeterminado),    
                       "less"  (menos)  o  "greater"  (mayor).  
exact   -­‐  un  argumento  lógico  que  indica  si  se  debe  calcular  un  valor  de  p  exacto.  
 

#  la  variable  mpg  (el  rendimiento  en  millas  /  galón  (EE.  UU)  
>  [Link](x=mpg,  "pnorm",  mean  =  mean(mpg),  sd  =  sd(mpg))  
 
One-­‐sample  Kolmogorov-­‐Smirnov  test  
 
data:    mpg  
D  =  0.1263,  p-­‐value  =  0.687  
alternative  hypothesis:  two-­‐sided  
 
 
#  la  variable  drat  (Radio  del  eje  trasero).  
>  [Link](x=drat,"pnorm",mean  =  mean(drat),  sd  =  sd(drat))  
 
One-­‐sample  Kolmogorov-­‐Smirnov  test  
   Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

 
data:    drat  
D  =  0.15976,  p-­‐value  =  0.3876  
alternative  hypothesis:  two-­‐sided  
 
 
Prueba de normalidad Shapiro-Wilk

La prueba se realiza para muestras pequeñas (n<30) con la función [Link]()  

>  [Link](x=mpg)  
 
Shapiro-­‐Wilk  normality  test  
 
data:    mpg  
W  =  0.94756,  p-­‐value  =  0.1229  

El análisis de regresión lineal múltiple

Determinaremos la línea de regresión de una variable dependiente dadas las variables independientes, usando la
función lm(), la cuál se basa en el método de mínimos cuadrados. Usaremos la ayuda en línea de R para consultar
como utilizar la función lm().

>?lm  
 
La función se determina como
lm(formula,  data,...)    
 
Argumentos:  
formula    
  la  expresión  que  define  el  modelo:  la  variable  dependiente  (numérica)  seguida  por  el  símbolo  tilda  “~”  y  la  variable  
independiente.  
data    
  los  datos  en  el  formato  de  marco  de  datos.  
…    
  argumentos  adicionales  predeterminados;  los  dejamos  sin  modificar.    

El algoritmo de la línea que ajuste mejor los datos y las funciones genéricas aplicadas al objeto es el siguiente

>  attach(mtcars)  
>  ajuste  =  lm(mpg~cyl+drat+qsec+vs+am+gear,  data=mtcars)  
>  summary(ajuste)  
 
Call:  
lm(formula  =  mpg  ~  cyl  +  drat  +  qsec  +  vs  +  am  +  gear,  data  =  mtcars)  
 
Residuals:  
       Min            1Q    Median            3Q          Max    
-­‐6.3851  -­‐1.5661    0.0514    1.5051    5.5417    
 
Coefficients:  
                       Estimate                    Std.  Error        t  value  Pr(>|t|)      
(Intercept)    11.9928        21.3463      0.562      0.5797      
cyl6                  -­‐4.3795          2.5905    -­‐1.691      0.1044      
cyl8                  -­‐7.1791          4.0838    -­‐1.758      0.0921  .  
drat                    1.4201          2.4069      0.590      0.5609      
qsec                    0.3208          0.8395      0.382      0.7059      
  Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

vs1                      1.5841          2.5156      0.630      0.5351      


am1                  4.6510          2.6219      1.774      0.0893  .  
gear4            -­‐2.2463          2.8736    -­‐0.782      0.4424      
gear5            -­‐2.4115          3.0254    -­‐0.797      0.4336      
-­‐-­‐-­‐  
Signif.  codes:    0  '***'  0.001  '**'  0.01  '*'  0.05  '.'  0.1  '  '  1  
 
Residual  standard  error:  3.287  on  23  degrees  of  freedom  
Multiple  R-­‐squared:    0.7793,   Adjusted  R-­‐squared:    0.7026    
F-­‐statistic:  10.15  on  8  and  23  DF,    p-­‐value:  5.862e-­‐06  
 
#  un  vector  nombrado  de  coeficientes  
>      ajuste$coefficients  
(Intercept)                  cyl                drat                qsec                    vs                    am                gear    
 28.5543163    -­‐1.9638545      0.9806355      0.1506520      1.1196981      4.2695900    -­‐1.2888397    
 
 
 
Análisis de residuos
 
Para ver si el modelo de regresión lineal es adecuado, analizaremos los residuos.

Residuos contra valores predictivos


La gráfica de los residuos contra valores predictivos permite detectar:

1. Heterocedasticidad – la varianza de los residuos no es constante: se deben transformar los datos (la
variable de respuesta 𝑌).
2. Error en el análisis: se ha realizado mal el ajuste y se verifica que los residuos negativos se corresponden
con los valores predictivos pequeños y los residuos positivos se corresponden con los valores predictivos
grandes, o al revés.
3. El modelo es inadecuado: falta de linealidad y se deben de transformar los datos o introducir nuevas
variables que pueden ser polinomios.
4. Existencia de observaciones atípicas o puntos extremos.

Las gráficas de los residuos se obtiene con la función plot(). La sintaxis de esta función es

>  par(mfrow=c(2,2))  
>  plot(ajuste)  
>  par(mfrow=c(1,1))  

Si después de ejecutar el código para hacer la gráfica, aparece un mensaje

>  plot(ajuste)  
Error  in  [Link]()  :  figure  margins  too  large  
 
¡tiene que aumentar el tamaño de la ventana de la gráfica!

Veremos como resultado las gráficas de los residuos que aparecen abajo
 
   Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

 
La gráfica “Residuals  vs  Fitted” (Residuos versus Valores Ajustados (pronosticados)) – ¿Hay algún patrón notable?
Los valores atípicos están etiquetados por su número de observación.

La gráfica “Normal  Q-­‐Q” (quantile-quantile de los residuos estandarizados) – la evaluación de la normalidad de los
residuos. Los residuos siguen una línea recta. Las desviaciones de la línea recta significarían que los errores no
siguen una distribución normal.
La gráfica “Scale-­‐Location” (Escala-Ubicación) - ¿Hay algún patrón notable?

La gráfica “Residuals vs Factor Levels” (Residuos versus niveles del factor) – ¿Hay observaciones influyentes?
 
Residuos contra una variable explicativa

La gráfica de residuos contra una variable explicativa permite detectar si la existencia de heterocedasticidad o la
falta de linealidad en el modelo son debidas a la variable explicativa.

Primero, tendremos que extraer los residuos del objeto de la clase lm con el comando resid(). El algoritmo para
obtener la gráfica es el siguiente

>  par(mfrow=c(2,3))  
>  plot(cyl,  residuos,  xlab="cilindros")   #residuos  vs  número  de  cilindros  
>  plot(drat,  residuos)       #residuos  vs  radio  del  eje  trasero  
>  plot(qsec,  residuos)       #residuos  vs  tiempo  de  1/4  milla  
>  plot(vs,  residuos,  xlab  =  "vs")     #residuos  vs  el  tipo  de  motor  
>  plot(am,  residuos,  xlab  =  "am")     #residuos  vs  transmisión  
>  plot(gear,  residuos,  xlab  =  "gear")   #residuos  vs  engranaje  
>  par(mfrow=c(1,1))  
 
 
 
  Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

 
 

Evaluación sobre si los errores están correlacionados entre sí.


Verificaremos si los errores están correlacionados entre sí utilizando la prueba de errores autocorrelacionados -
Prueba de Durbin-Watson con la función lmtest() del paquete lmtest.

Hipótesis nula: la correlación verdadera = 0


Hipótesis alternativa: la correlación verdadera ≠ 0 - una prueba de dos colas

>  [Link]("lmtest")  
>  library(lmtest)  
>  dwtest(ajuste)      
 
Durbin-­‐Watson  test  
data:    ajuste  
DW  =  1.8821,  p-­‐value  =  0.2111  
alternative  hypothesis:  true  autocorrelation  is  greater  than  0  
 

Predicciones
 
Si lo que queremos es ajustar el modelo para poder usarlo para predecir datos, utilizaremos la función predict(), la
cual contiene varias opciones predeterminadas. Para obtener la información sobre las variaciones disponibles de la
función predict(),  usaremos la ayuda en línea de R con el código

>  ?[Link]

La función se determina como


predict(object,    newdata,  interval=c("none",  "confidence",  "prediction"),  level  =  0.95)  
 
Argumentos:  
object  
  Objeto  de  clase  de  "lm"    
newdata  
  Marco  de  datos  con  los  valores  nuevos  de  las  variables  explicativas  
interval  
  Tipo  de  cálculo  de  intervalo:  "none"=ninguno,  "confidence"=confianza,  "prediction"=predicción  
level  
  Nivel  de  confianza,  el  valor  predeterminado  es  0.95  

Utilizaremos la función predict()  modificando algunas opciones


   Tatiana  Petukhova,  “INTRODUCCIÓN A R”    
     

>  [Link]=[Link](cyl  =6,  drat=4,    qsec=20,  vs=0,    am=0,    gear=5)  


>  predict(object=ajuste,    newdata=[Link],    interval="prediction")  
                                 fit                              lwr                              upr  
1  17.26257      7.470713        27.05443  

donde  fit  es  el  valor  predicho  de  la  variable  de  respuesta;  lwr  es  el  límite  inferior  del  intervalo  de  confianza,  upr  es  el  
límite  superior  del  intervalo  de  confianza  
 

También podría gustarte