Análisis de correlacion

Importar paquetes y definir folder de trabajo

library(pacman)
library(readxl)
p_load("base64enc", "htmltools", "mime", "xfun", "prettydoc", "ggplot2", "tidyr", "plotly", "DT")
setwd("~/PROBABILIDAD Y ESTADISTICA 2020")

Importar datos

grasas <- read.table("http://verso.mat.uam.es/~joser.berrendero/datos/EdadPesoGrasas.txt", header= TRUE)
names(grasas)
## [1] "peso"   "edad"   "grasas"

Descripción de datos

Se tienen datos de 25 personas de peso, edad y grasas.

datatable(grasas)

Correlación con matriz de diagrama de dispersión

pairs(grasas)

Cuantificar el grado de relación lineal (coef. de correlación)

cor(grasas)
##             peso      edad    grasas
## peso   1.0000000 0.2400133 0.2652935
## edad   0.2400133 1.0000000 0.8373534
## grasas 0.2652935 0.8373534 1.0000000

Estimación y representación de la recta de mínimos cuadrados

El comando básico es lm (linear models). El primer argumento de este comando es una fórmula y ~ x en la que se especifica cuál es la variable respuesta o dependiente (y) y cuál es la variable regresora o independiente (x). El segundo argumento, llamado data especifica cuál es el fichero en el que se encuentran las variables. El resultado lo guardamos en un objeto llamado regresion. Este objeto es una lista que contiene toda la información relevante sobre el análisis. Mediante el comando summary obtenemos un resumen de los principales resultados:

regresion <- lm(grasas ~   peso, data=grasas )
summary(regresion)
## 
## Call:
## lm(formula = grasas ~ peso, data = grasas)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -127.729  -53.686   -9.239   46.537  128.404 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  199.298     85.818   2.322   0.0294 *
## peso           1.622      1.229   1.320   0.2000  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 76.65 on 23 degrees of freedom
## Multiple R-squared:  0.07038,    Adjusted R-squared:  0.02996 
## F-statistic: 1.741 on 1 and 23 DF,  p-value: 0.2

Los parámetros de la ecuación de la recta de mínimos cuadrados que relaciona la cantidad de grasas en la sangre en función del peso vienen dados por la columna ´Estimate´ de la tabla ´Coefficients´ de la salida anterior. Por lo tanto, en este ejemplo la ecuación de la recta de mínimos cuadrados es:

\[ y = 199.298 + 1.622 x \]

Los siguientes comandos representan la nube de puntos (comando plot) y añaden la representación gráfica de la recta de mínimos cuadrados (comando abline aplicado al objeto generado por lm):

plot(grasas$peso, grasas$grasas, xlab="Peso", ylab="Grasas" )
abline(regresion)

El coeficiente de determinación (es decir, el coeficiente de correlación al cuadrado) mide la bondad del ajuste de la recta a los datos. A partir de la salida anterior, vemos que su valor en este caso es Multiple R-squared: 0.701.

Cálculo de predicciones

Supongamos que queremos utilizar la recta de mínimos cuadrados para predecir la cantidad de grasas para individuos de pesos 30,43,65,82…,90. Basta crear un fichero de datos que contenga las nuevas variables regresoras y usar el comando predict:

  1. Calcula y representa los intervalos de confianza al 95% de la cantidad de grasas media para los individuos entre 30 y 90 kg.
nuevas.peso <- data.frame(peso= seq(30,90))
predict(regresion,nuevas.peso)
##        1        2        3        4        5        6        7        8 
## 247.9678 249.5901 251.2125 252.8348 254.4572 256.0795 257.7018 259.3242 
##        9       10       11       12       13       14       15       16 
## 260.9465 262.5689 264.1912 265.8136 267.4359 269.0582 270.6806 272.3029 
##       17       18       19       20       21       22       23       24 
## 273.9253 275.5476 277.1700 278.7923 280.4146 282.0370 283.6593 285.2817 
##       25       26       27       28       29       30       31       32 
## 286.9040 288.5264 290.1487 291.7710 293.3934 295.0157 296.6381 298.2604 
##       33       34       35       36       37       38       39       40 
## 299.8828 301.5051 303.1274 304.7498 306.3721 307.9945 309.6168 311.2391 
##       41       42       43       44       45       46       47       48 
## 312.8615 314.4838 316.1062 317.7285 319.3509 320.9732 322.5955 324.2179 
##       49       50       51       52       53       54       55       56 
## 325.8402 327.4626 329.0849 330.7073 332.3296 333.9519 335.5743 337.1966 
##       57       58       59       60       61 
## 338.8190 340.4413 342.0637 343.6860 345.3083

Inferencia en el modelo de regresión simple

  • Suponemos ahora que los datos proceden de un modelo de regresión simple de la forma:

\[y_i = \beta_0 + \beta_1 x_i + \epsilon_i, \ \ \ \ i=1,\ldots,n, \]

en el cual los errores aleatorios \(\epsilon_i\) son independientes normal de media 0 y varianza σ2.

Bajo este modelo,

  1. Los errores típicos de los estimadores de los parámetros β0 y β1 se encuentran en la columna Std Error de la salida anterior. En el ejemplo, sus valores son 29.638 y 0.724 respectivamente.

  2. La columna t value contiene el estadístico t, es decir, cociente entre cada estimador y su error típico. Estos cocientes son la base para llevar a cabo los contrastes H0:β0=0 y H0:β1=0 . Los correspondientes p-valores aparecen en la columna Pr(>|t|). En este caso son muy pequeños por lo que se rechazan ambas hipótesis para los niveles de significación habituales.

  3. El estimador de la desviación típica de los errores σ aparece como Residual standard error y su valor en el ejemplo es 43.5

  4. Los intervalos de confianza para los parámetros se obtienen con el comando confint. El parámetro level permite elegir el nivel de confianza (por defecto es 0.95):

confint(regresion)
##                  2.5 %     97.5 %
## (Intercept) 21.7696109 376.825392
## peso        -0.9209324   4.165618
  1. Calula un intervalo de confianza para la pendiente de la recta de nivel 90%.
confint(regresion, level = 0.90)
##                    5 %       95 %
## (Intercept) 52.2166142 346.378389
## peso        -0.4847468   3.729432
  • Los intervalos de confianza para la respuesta media y los intervalos de predicción para la respuesta se pueden obtener usando el comando predict. Por ejemplo, el siguiente código calcula y representa los dos tipos de intervalos para el rango de peso que va de 55 a 89 kilogramos (los de predicción en azul):
nuevas.pesos <- data.frame(peso=seq(55,89))

#Gráfica de disperión y recta 
plot(grasas$peso, grasas$grasas, xlab="Peso", ylab="Grasas")
abline(regresion)

#Intervalos de confianza de la respuesta media 
#ic es una matriz de tres columnas: la primera es la predicción, las otras son los extremos del intervalo
ic <- predict(regresion, nuevas.pesos, interval="confidence" )
lines(nuevas.pesos$peso, ic[, 2], lty =2, col="darkblue"  )
lines(nuevas.pesos$peso, ic[, 3], lty =2, col="darkblue"  )


#Intervalo de predicción
ic <- predict(regresion, nuevas.pesos, interval="prediction" )
lines(nuevas.pesos$peso, ic[, 2], lty =2, col="darkblue"  )
lines(nuevas.pesos$peso, ic[, 3], lty =2, col="darkblue"  )

Análisis ANOVA

  • La tabla de análisis de la varianza de los errores se obtiene con el comando anova:
anova(regresion)
## Analysis of Variance Table
## 
## Response: grasas
##           Df Sum Sq Mean Sq F value Pr(>F)
## peso       1  10232 10231.7  1.7413    0.2
## Residuals 23 135145  5875.9

Diagnóstico del modelo

Los valores ajustados y^i y los residuos ei=y^i−yi se pueden obtener con los comandos fitted y residuals respectivamente. Los residuos estandarizados se obtienen con rstandard. Por ejemplo, el siguiente código obtiene una representación de los residuos estandarizados frente a los valores ajustados, que resulta útil al llevar a cabo el diagnóstico del modelo:

residuos <- rstandard(regresion)
valores.ajustados <- fitted(regresion)
plot(valores.ajustados, residuos)

No se observa ningún patrón especial, por lo que tanto la homocedasticidad como la linealidad resultan hipótesis razonables.

La hipótesis de normalidad se suele comprobar mediante un QQ plot de los residuos. El siguiente código sirve para obtenerlo:

qqnorm(residuos)
qqline(residuos)

Dado que los puntos están bastante alineados, la normalidad también parece aceptable.

Calcula y representa gráficamente la recta de regresión, junto con la correspondiente nube de puntos.

  1. ¿Cuánto vale el coeficiente de correlación al cuadrado en este caso?

En este caso el valor del coeficiente de correlación es 0.07038.

  1. ¿Cuánto valen los estimadores de todos los parámetros del modelo?

Residual standard error: 76.65 con 23 grados de libertad Error standard de la salida son iguales a 85.818 y 1.229

  1. Contrasta la hipótesis de que la pendiente de la recta es cero a nivel 0.05.

p-value (Pr(>|t|)) en este caso son 0.0294 y 0.2000 para los coeficientes de intercepción y peso respectivamente

  1. Calula un intervalo de confianza para la pendiente de la recta de nivel 90%.

tabla arriba

  1. Calcula y representa los intervalos de confianza al 95% de la cantidad de grasas media para los individuos entre 30 y 90 kg.

tabla arriba

xfun::embed_file("correlacionU4A2.rmd")
Download correlacionU4A2.rmd