CLASE 2. MÉTODO DE ANÁLISIS GRÁFICO DE DISPERSIÓN Y REGRESIÓN LINEAL SIMPLE

En esta clase aprenderemos a realizar interpretaciones gráficas de dispersión de datos y el modelo de regresión lineal simple entre sus respectivos análisis básicos.

COMANDOS A UTILIZAR

# AltGr + tecla (+) = ~ ---> símbolo de dependencia
# Ctrl + Alt + i  ---> abre una línea de código en R Markdown
# Ctrl + Alt + p ---> Corre todo el código de inicio a fin

LIBRERÍAS A DESCARGAR

# install.packages("openxlsx")
# install.packages("readxl")
# install.packages("ggplot2")
# install.packages("lmtest")
# install.packages("forecast")
# install.packages("dplyr")

CARGAMOS LAS LIBRERÍAS

library(openxlsx)
library(readxl)
library(ggplot2)
library(lmtest)
library(forecast)
library(dplyr)

BUSCAMOS LA RUTA DEL ARCHIVO

choose.files()
## [1] "C:\\Users\\Brook\\Desktop\\CURSO RSTUDIO\\Clase 2\\Clase-2.html"

COPIAMOS LA RUTA DEL ARCHIVO, NOTA: TIENE QUE SER CON LAS COMILLAS

Ejercicio_1 = read.xlsx("C:\\Users\\Brook\\Desktop\\CURSO RSTUDIO\\Clase 2\\Ejercicio 1. Clase 2 (Relación Peso contra altura).xlsx")

VIZUALIZAMOS NUESTROS DATOS

View(Ejercicio_1)

En este ejercicio tratámos de encontrar la relación que hay entre el Peso y la Altura que tienen 40 personas observadas dentro de una muestra de datos que obtuvimos gracias a una encuesta médica.

Lo que procede ahora es crear nuestro gráfico de dispersión entre las variables. Tal y como se muestra, escribiremos el peso en el eje de las Y y la altura en el eje de las X, porque queremos explicr el peso a través de una variable que queremos que sea expicativa.

GENERAMOS NUESTRO GRÁFICO DE DISPERSIÓN

# Creamos el gráfico con el código
Dispersion1.1 = ggplot(data = Ejercicio_1, mapping = aes(x = Ejercicio_1$Altura.xi, y = Ejercicio_1$Peso.yi)) + geom_point()


# Añadimos la recta de ajuste del modelo de dispersión
Dispersion1.2 = ggplot(data = Ejercicio_1, mapping = aes(x = Ejercicio_1$Altura.xi, y = Ejercicio_1$Peso.yi)) + geom_point() + geom_smooth(method = "lm")


# Añadimos ahora los títulos
Dispersion1.3 = ggplot(data = Ejercicio_1, mapping = aes(x = Ejercicio_1$Altura.xi, y = Ejercicio_1$Peso.yi)) + geom_point() + geom_smooth(method = "lm") + labs(title = "Relación Peso - Altura", subtitle = "Para una muestra de 40 personas observadas", caption = "Elaboración propia") + ylab("Peso, en Kg") + xlab("Altura, en metros")


# Visualizamos los 3 gráficos de dispersión que hemos creado
Dispersion1.1

Dispersion1.2

Dispersion1.3

Ahora, queremos saber si nuestros datos son correctos. Para esto debemos de formularnos una prueba de Hipótesis a nuestros datos estadísticos. Para ello, solamente podemos plantear 2 Hipótesis. Normalmente lo realizamos para nuestra pendiente de análisis de regresión: \[H0: Hipóteis Nula. \beta_1 = 0\] \[H1: Hipótesis Alternativa.\beta_1 \neq 0\]

¿QUÉ SIGNIFICA CADA UNA DE ESTAS HIPÓTESIS?

Consideraremos \(H0\) verdadera siempre y cuando no se muestre lo contrario. La Hipótesis con mayor interés plantea que la pendiente \(\beta_1\) sea distinto de cero; en otras palabras, debemos de rechazar \(H_0\).

CALCULAMOS NUESTRA ECUACIÓN DE LA RECTA DE REGRESIÓN LINEAL SIMPLE

# Ecuación de regresión lineal simple
Regresion1.1 = lm(Ejercicio_1$Peso.yi ~ Ejercicio_1$Altura.xi)

# Observamos el resumen de los datos
summary(Regresion1.1)
## 
## Call:
## lm(formula = Ejercicio_1$Peso.yi ~ Ejercicio_1$Altura.xi)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.48108 -0.28330 -0.09651  0.24478  1.31275 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -98.5748     0.8234  -119.7   <2e-16 ***
## Ejercicio_1$Altura.xi  99.3829     0.4915   202.2   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4235 on 38 degrees of freedom
## Multiple R-squared:  0.9991, Adjusted R-squared:  0.999 
## F-statistic: 4.088e+04 on 1 and 38 DF,  p-value: < 2.2e-16

Observamos que nuestra ecuación de regresión lineal simple queradía como: \[Peso(\hat{Y_i})=-98.5748+99.3829_{Altrura}(X_i)\] Un análisis rápido que podemos decir es que El peso depende de un intercepto de \(-105.268\) más una pendiente con valor de \(103.809\) por cada dato observado de nuestra muestra.

¿QUÉ PASA SI B1 = 0 y si B0 = 0?

Nos encontramos entonces de que la muestra de nuestros datos tendrían una relación sin sentido de: \[Peso(\hat{Y_i})=-98.5748+(0)(X_i)\] \[Peso(\hat{Y_i})=99.3829_{Altura}(X_i)\] Entonces nuestra gráfica de dispersión tendría una relación como la que se muestra a continuación:

# Generamos una nueva variable dentro de nuestros datos del ejercicio 1 a través del comando "mutate" que se llame "Intercepto"
Ejercicio_1 = mutate(Ejercicio_1, Intercepto = rep(-98.5748))


# Generamos una nueva variable dentro de nuestros datos del ejercicio 1 a través del comando "mutate" que se llame "Pendiente"
Ejercicio_1 = mutate(Ejercicio_1, Pendiente = rep(99.3829*Ejercicio_1$Altura.xi))


# Vizualizamos nuestras nuevas variables
View(Ejercicio_1)

GRAFICAMOS EL MODELO DE DISPERSIÓN DONDE B1 = 0 Y B0 = 0

# Generamos nuestro código de dispersión con B1 = 0
Dispersion1.4 = ggplot(data = Ejercicio_1, mapping = aes(x = Ejercicio_1$Peso.yi, y = Ejercicio_1$Intercepto)) + geom_point() + geom_smooth(method = "lm") + labs(title = "Gráfico de dispersión, Relación Peso y Altura", subtitle = "Con la pendiente B1 = 0", caption = "Elaboración propia") + ylab("Altura, Intercepto = -98.5748") + xlab("Peso, en Kg")


# Generamos nuestro código de dispersión con B0 = 0
Dispersion1.5 = ggplot(data = Ejercicio_1, mapping = aes(x = Ejercicio_1$Pendiente, y = Ejercicio_1$Peso.yi)) + geom_point() + geom_smooth(method = "lm") + labs(title = "Gráfico de dispersión, Relación Peso y Altura", subtitle = "Con el intercepto B0 = 0", caption = "Elaboración propia") + ylab("Peso, en Kg") + xlab("Pendiente estimada de la altura, en metros")


# Vizualizamos Ambos gráficos
Dispersion1.4

Dispersion1.5

¿CÓMO GRAFICAR EL MODELO ESTIMADO CORRECTO?

# Generamos una nueva variable dentro de nuestros datos de ejercicio 
Ejercicio_1 = mutate(Ejercicio_1, Estimado = predict(Regresion1.1))


# Graficamos el modelo normal
Dispersion1.3

# Graficamos el modelo de regresión lineal estimado
plot(x = Ejercicio_1$Altura.xi, y = Ejercicio_1$Estimado, main = "Relación Peso - Altura estimada", sub = "Ecuación de la recta: Y = - 98.5748 + 99.3829Xi",xlab = "Altura", ylab = "Peso estimado", panel.first = grid(col = "gray60"), col = "Blue", pch = 20)

# Le ponemos la recta de ajuste estimada
abline(Regresion1.1, col = "red")

Observamos que: Los valores de nuestra regresión lineal simple se encuentran dentro de la recta de ajuste con los valores estimados.

¿CÓMO INTERPRETAMOS EL ANÁLISIS DE LA RECTA DEL MODELO DE REGRESIÓN LINEAL SIMPLE?

El análisis es sencillo, solamente tenemos que interpretar el valor de nuestra variable dependiente a través de un intercepto más el cambio generado en nuestra variable independiente. En nuestro caso podemos decir que el peso estimado de las personas que hemos analizado depende de un intercepto que se encuentra en el eje de las Y con un valor de - 98.5748, más un cambio de 99.3829 que multiplica a la altura.

¿QUÉ OTRO ANÁLISIS FALTA?

  • Debemos de interpretar el coeficiente de correlación que está entre la variable independiente y la variable dependiente \(R\)

  • Debemos de interpretar el coeficiente de determinación del modelo de regresión lineal simple \(R^2\)

  • Debemos de interpretar los errores del modelo de regresión lineal simple \(E_i=Y_i - \hat{Y_i}\)

  • Debemos de interpretar que nuestros errores del modelo de regresión lineal simple se encuentren dentro de una distribución normal (que su media y varianza se encuentren dentro de una constante igual a 0 para saber que se encuentran bien distribuidos)

  • Debemos de interpretar que nuestro modelo de regresión lineal simple no esté sobrestimado ó subestimado a través de la autocorrelación de nuestros errores

COEFICIENTE DE CORRELACIÓN

# Vizualizamos  nuevamente el resumen de nuestro modelo
summary(Regresion1.1)
## 
## Call:
## lm(formula = Ejercicio_1$Peso.yi ~ Ejercicio_1$Altura.xi)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.48108 -0.28330 -0.09651  0.24478  1.31275 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -98.5748     0.8234  -119.7   <2e-16 ***
## Ejercicio_1$Altura.xi  99.3829     0.4915   202.2   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4235 on 38 degrees of freedom
## Multiple R-squared:  0.9991, Adjusted R-squared:  0.999 
## F-statistic: 4.088e+04 on 1 and 38 DF,  p-value: < 2.2e-16
sqrt(0.9991) # el comando sqrt() ayuda a sacar la raiz cuadrada 
## [1] 0.9995499

Podemos decir que hay una correlación fuerte y positiva entre la variable independiente y la variable dependiente. Es por esta razón que observamos en el gráfico de dispersión la recta de ajuste lineal positiva, e incluso por eso tenemos ese valor positivo dentro de la pendiente de nuestro coeficiente \(\beta_1\)

COEFICIENTE DE DETERMINACIÓN

# Vizualizamos nuevamente el resumen de nuestro modelo
summary(Regresion1.1)
## 
## Call:
## lm(formula = Ejercicio_1$Peso.yi ~ Ejercicio_1$Altura.xi)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.48108 -0.28330 -0.09651  0.24478  1.31275 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -98.5748     0.8234  -119.7   <2e-16 ***
## Ejercicio_1$Altura.xi  99.3829     0.4915   202.2   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4235 on 38 degrees of freedom
## Multiple R-squared:  0.9991, Adjusted R-squared:  0.999 
## F-statistic: 4.088e+04 on 1 and 38 DF,  p-value: < 2.2e-16

Observamos dos valores, un \(R^2=0.9991\) y el segundo \(R^2Ajustado=0.999\). ¿A cuál de los dos le hacemos caso? ¿Qué significan estos coeficientes? Ambos son buenos para hacer respuestas. El primero nos indica que el 99.91% de los datos son explicados por las variables que tenemos, el 0.09% restante lo explican otros factores fuera de los que estamos analizando. El segundo coeficiente, nos indíca que el 99.90% de los datos son estrictamente determinados (ni más ni menos) que explican el modelo, el 0.10% restante lo explican otros factores fuera de los que estamos analizando.

ERRORES DEL MODELO DE REGRESIÓN LINEAL SIMPLE

# Podemos calcular los errores de dos formas
Errores_1 = Ejercicio_1$Peso.yi - Ejercicio_1$Estimado
Errores_2 = residuals(Regresion1.1)


# Graficamos nuestros errores del modelo
plot(Errores_1, pch = 20, main = "Errores del modelo de regresión lineal simple", xlab = "Observaciones", ylab = "Error", panel.first = grid(col = "cornflowerblue"))

# Graficamos nuestro respectivo Histograma para conocer la distribución de los errores
hist(x = Errores_1, breaks = 10, col = "#c7fcae", border = "#408a1d", main = "Histograma de los Errores", xlab = "Errores", ylab = "Frecuencia", panel.first = grid(col = "gray60"))

PODEMOS MEJORAR LOS GRÁFICOS

# Primero el gráfico de dispersión
Error = ggplot(mapping = aes(x = Ejercicio_1$Estimado, y = Errores_2)) + geom_point() + labs(title = "Errores del modelo", subtitle = "Modelo de regresión lineal simple", caption = "Elaboración propia") + ylab("Errores") + xlab("Observaciones")


# Seguimos con el Histograma
Histograma = ggplot(data = NULL, aes(x = Errores_1)) + geom_histogram(col = "white") + labs(title = "Histograma de los Errores", subtitle = "Distribución normal de los errores del modelo de regresión lineal simple", caption = "Elaboración Propia") + xlab("Errores") + ylab("Frecuencia")


# Vizualisamos ambos gráficos
Error

Histograma

PRUEBA DE AUTOCORRELACIÓN DENTRO DE LOS ERRORES

dwtest(Regresion1.1)
## 
##  Durbin-Watson test
## 
## data:  Regresion1.1
## DW = 1.9092, p-value = 0.3232
## alternative hypothesis: true autocorrelation is greater than 0

Observamos que nuestro coeficiente Durbin - Watson está cercano al valor 2, siendo de 1.9092 por lo que podemos concluir que no existe autocorrelación dentro de nuestro modelo de regresión lineal simple. En otras palabras, no está sobrestimado o subestimado. Si el coeficiente hubiera estado entre el rango de 0 a 1.85 decimos que existe autocorrelación positiva y está sobrestimado el modelo por lo que deberíamos de quitar observaciones a nuestros datos de regresión lineal simple; de lo contrario, si el coeficiente hubiera estado entre el rango de 2.25 a 4 decimos que existe autocorrelación negativa y está subestimado el modelo por lo que deberíamos de agregar observaciones a nuestros datos de regresión lineal simple.

¿QUÉ PODEMOS HACER AHORA? ¿ESTIMAR Ó PREDECIR?

Ya teniendo un análisis resumido de nuestro modelo, hemos concluido que es útil para estimar valores, en este caso podemos estimar el peso de las personas a través de la altura. Recordemos entonces que nuestra ecuación de regresión lineal simple es: \[Peso(\hat{Y_i})=-98.5748+99.3829_{Altrura}(X_i)\] Entonces podemos realizar una estimación, como ejemplo, el peso estimado de una persona que mide 1.35 metros

# Escribimos la ecuación para obtener el resultado estimado
-98.5748 + (99.3829*1.35)
## [1] 35.59212

Tendremos como resultado que esta persona va a pesar un estimado de \(35.59Kg\)