Modelos de Regresión

Unidad 1: Correlación y Regresión Lineal Simple


Objetivo de Aprendizaje

Comprender e interpretar la relación entre dos variables cuantitativas mediante el análisis de correlación y regresión lineal simple, e implementar modelos básicos usando R.


1. Conceptos Fundamentales

¿Qué es la Correlación?

La correlación es una medida estadística que evalúa la fuerza y dirección de la relación lineal entre dos variables cuantitativas. Se representa habitualmente mediante el coeficiente de correlación de Pearson (\(r\)), que toma valores entre -1 y 1:

  • \(r > 0\): Relación positiva.
  • \(r < 0\): Relación negativa.
  • \(r = 0\): No hay relación lineal.

Interpretación de \(r\)

Valor de \(r\) Interpretación
\(r > 0.7\) Correlación fuerte positiva
\(0.4 < r \leq 0.7\) Correlación moderada positiva
\(0 < r \leq 0.4\) Correlación débil positiva
\(r \approx 0\) Correlación nula
\(-0.4 \leq r < 0\) Correlación débil negativa
\(-0.7 \leq r < -0.4\) Correlación moderada negativa
\(r < -0.7\) Correlación fuerte negativa

Tipos de Correlación

Tipo de Correlación Uso Principal Requisitos
Pearson Variables continuas, relación lineal Normalidad y escala de razón o intervalo
Spearman (rho) Datos ordinales o relaciones monótonas No requiere normalidad
Kendall (tau) Muestras pequeñas o datos con empates Datos ordinales o no paramétricos

2. Ejercicio Práctico: Análisis de Correlación en R

# Cargar librerías
library(ggplot2)
library(dplyr)

# Simular datos
set.seed(42)
horas <- 1:10
nota <- c(52, 55, 61, 64, 67, 69, 74, 76, 80, 82)
datos <- data.frame(horas, nota)

# Visualización de dispersión
ggplot(datos, aes(x = horas, y = nota)) +
  geom_point(size = 3) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  theme_minimal() +
  labs(title = "Relación entre Horas de Estudio y Nota",
       x = "Horas de Estudio",
       y = "Nota")

el gráfico de dispersión muestra una relación positiva y aproximadamente lineal entre las horas de estudio y la nota obtenida.

Coeficientes de Correlación

A continuación, calculamos los coeficientes de correlación de Pearson, Spearman y Kendall utilizando R.

# Correlación de Pearson
cor.test(datos$horas, datos$nota, method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  datos$horas and datos$nota
## t = 29.215, df = 8, p-value = 2.041e-09
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.9796841 0.9989404
## sample estimates:
##       cor 
## 0.9953462

Mide la fuerza y dirección de una relación lineal entre dos variables continuas. Un valor de 𝑟 cercano a 1 o -1 indica una fuerte relación lineal.

# Correlación de Spearman
cor.test(datos$horas, datos$nota, method = "spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  datos$horas and datos$nota
## S = 3.6637e-14, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho 
##   1

Evalúa relaciones monótonas (crecientes o decrecientes), usando los rangos de los datos. Es menos sensible a valores atípicos.

# Correlación de Kendall
cor.test(datos$horas, datos$nota, method = "kendall")
## 
##  Kendall's rank correlation tau
## 
## data:  datos$horas and datos$nota
## T = 45, p-value = 5.511e-07
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau 
##   1

Similar a Spearman, pero más robusto en presencia de datos con muchos empates o tamaños de muestra pequeños.

# Instalar readxl solo si no está instalado
if (!require(readxl)) {
  install.packages("readxl")
}
## Loading required package: readxl
## Warning: package 'readxl' was built under R version 4.0.5
library(readxl)

# Leer el archivo Excel
data <- read_excel("C:/Users/asus/OneDrive - Secretaría de Educación del Huila/Documentos/Ejemplo.xlsx")

# Verificar nombres de las columnas
colnames(data)
## [1] "Horassueño" "promedio"
# Realizar la prueba de correlación
cor.test(data$Horassueño, data$promedio)
## 
##  Pearson's product-moment correlation
## 
## data:  data$Horassueño and data$promedio
## t = 13.482, df = 35, p-value = 2.015e-15
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8413254 0.9560620
## sample estimates:
##       cor 
## 0.9157154

\(cor = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n}(y_i - \bar{y})^2}}\)

Donde:

  • \(x_i, y_i\) son los valores de las variables.
  • \(\bar{x}, \bar{y}\) son las medias de \(x\) y \(y\), respectivamente.
  • \(n\) es el número de observaciones.

Regresión Lineal Simple

La regresión lineal simple busca modelar la relación entre una variable dependiente \(y\) y una variable independiente \(x\) mediante la ecuación:

\(𝑌=𝛽_0+𝛽_1X+𝜀\) Donde:

\(𝛽_0\) es el intercepto (valor de \(y\) cuando \(x=0\)),

\(𝛽_1\) es la pendiente (cambio esperado en \(y\) por cada unidad de cambio en \(x\)),

\(𝜀\) es el término de error aleatorio.

Ejemplo Aplicado: Horas de Estudio y Nota

# Visualización del modelo ajustado
ggplot(datos, aes(x = horas, y = nota)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "Modelo de Regresión Lineal: Nota ~ Horas",
       x = "Horas de Estudio", y = "Nota")
## `geom_smooth()` using formula = 'y ~ x'

El gráfico muestra que conforme aumentan las horas de estudio, las notas también tienden a incrementarse, siguiendo una tendencia aproximadamente lineal positiva.

Ajuste modelo de regresión

# Ajuste del modelo
modelo <- lm(nota ~ horas, data = datos)

# Resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = nota ~ horas, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.29091 -0.87727 -0.03636  0.90455  1.36364 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  49.6000     0.7105   69.81 1.97e-12 ***
## horas         3.3455     0.1145   29.21 2.04e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.04 on 8 degrees of freedom
## Multiple R-squared:  0.9907, Adjusted R-squared:  0.9896 
## F-statistic: 853.5 on 1 and 8 DF,  p-value: 2.041e-09

Analisis Intercepto (\(𝛽_0)\): Representa la nota esperada cuando las horas de estudio son cero.

Es importante interpretar este valor en el contexto del problema (aunque a veces puede no ser realista).

Pendiente (\(𝛽_1\)): Indica el cambio promedio en la nota por cada hora adicional de estudio. Una pendiente positiva confirma que a más horas de estudio, mayor será la nota.

R-squared (\(𝑅2\)): Representa la proporción de la variabilidad en la nota que puede ser explicada por las horas de estudio. Un \(R2\) alto indica un buen ajuste del modelo.

Valor p: Evalúa si la variable independiente (horas) tiene un efecto significativo sobre la variable dependiente (nota). Si \(𝑝<0.05\), se considera estadísticamente significativo.

Analisis Se identificó una fuerte correlación positiva entre las horas de estudio y la nota.

El modelo de regresión lineal simple proporciona una forma sencilla de predecir la nota basándose en las horas de estudio.

Introducción

La regresión lineal permite modelar la relación entre una variable dependiente \(Y\) y una o más variables independientes \(X\).

La ecuación general es:

\(Y = \beta_0 + \beta_1 X + \epsilon\)

Donde: - \(\beta_0\) es la ordenada al origen. - \(\beta_1\) es la pendiente. - \(\epsilon\) es el error.

Análisis en R

# Cargar datos de ejemplo
data(mtcars)

# Ajustar el modelo
modelo <- lm(mpg ~ wt, data = mtcars)

# Resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = mpg ~ wt, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.5432 -2.3647 -0.1252  1.4096  6.8727 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
## wt           -5.3445     0.5591  -9.559 1.29e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.046 on 30 degrees of freedom
## Multiple R-squared:  0.7528, Adjusted R-squared:  0.7446 
## F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10
#Linealidad
plot(mtcars$wt, mtcars$mpg, main = "Dispersión entre Peso y Consumo", xlab = "Peso (wt)", ylab = "Millas por Galón (mpg)")
abline(modelo, col="red")

#Independencia
# Instalar si es necesario
if (!require(lmtest)) install.packages("lmtest")
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.0.5
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(lmtest)

# Test de Durbin-Watson
dwtest(modelo)
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 1.2517, p-value = 0.0102
## alternative hypothesis: true autocorrelation is greater than 0

SUPUESTOS : 1. Linealidad

2 Independencia de los errores

3 Homoscedasticidad (varianza constante)

4 Normalidad de los errores

Relación lineal: La relación entre las variables independientes (predictoras) y la variable dependiente debe ser lineal. Puedes verificarlo con gráficos de dispersión.

Independencia: Los errores (residuos) deben ser independientes entre sí. Esto es especialmente importante en datos de series de tiempo.

Homoscedasticidad: La varianza de los errores debe ser constante para todos los valores de las variables independientes. Si la dispersión de los errores cambia (por ejemplo, se hace más grande o más pequeña), hay heteroscedasticidad.

Normalidad de los errores: Los residuos deben seguir una distribución normal, especialmente importante si quieres construir intervalos de confianza o hacer pruebas de hipótesis.

Ausencia de multicolinealidad: Las variables independientes no deben estar altamente correlacionadas entre sí. Si lo están, puede ser difícil interpretar los coeficientes.

##eJEMPLO

install.packages("readxl")
## Warning: package 'readxl' is in use and will not be installed
library(readxl)
data<-read_excel("C:/Users/asus/OneDrive - Secretaría de Educación del Huila/Documentos/Ejemplo.xlsx")
cor.test(data$Horassueño, data$promedio, method="pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  data$Horassueño and data$promedio
## t = 13.482, df = 35, p-value = 2.015e-15
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8413254 0.9560620
## sample estimates:
##       cor 
## 0.9157154

modelo

modelo <- lm(datos\(promedio ~ datos\)Horassueño)

1. Linealidad: gráfico de dispersión + línea de regresión

plot(datos\(Horassueño, datos\)promedio, main = “Relación Horas de Sueño vs Promedio”, xlab = “Horas de Sueño”, ylab = “Promedio”) abline(modelo, col = “red”, lwd = 2)

2. Residuales vs Ajustados: Homocedasticidad

plot(modelo\(fitted.values, modelo\)residuals, main = “Residuos vs Valores Ajustados”, xlab = “Valores Ajustados”, ylab = “Residuos”) abline(h = 0, col = “blue”, lwd = 2)

3. Normalidad de los errores

Histograma de residuos

hist(modelo$residuals, breaks = 10, main = “Histograma de los Residuos”, xlab = “Residuos”)

QQ plot

qqnorm(modelo\(residuals) qqline(modelo\)residuals, col = “red”, lwd = 2)

Test formal de normalidad (Shapiro-Wilk test)

shapiro.test(modelo$residuals)

4. Independencia de los errores

Test de Durbin-Watson

install.packages(“lmtest”) # Solo la primera vez library(lmtest) dwtest(modelo)

5. Homocedasticidad: Test de Breusch-Pagan

install.packages(“lmtest”) # Ya instalado si hiciste el anterior library(lmtest) bptest(modelo) ```