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.
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:
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 |
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 |
# 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.
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:
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.
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.
# 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 <- lm(datos\(promedio ~ datos\)Horassueño)
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)
plot(modelo\(fitted.values, modelo\)residuals, main = “Residuos vs Valores Ajustados”, xlab = “Valores Ajustados”, ylab = “Residuos”) abline(h = 0, col = “blue”, lwd = 2)
hist(modelo$residuals, breaks = 10, main = “Histograma de los Residuos”, xlab = “Residuos”)
qqnorm(modelo\(residuals) qqline(modelo\)residuals, col = “red”, lwd = 2)
shapiro.test(modelo$residuals)
install.packages(“lmtest”) # Solo la primera vez library(lmtest) dwtest(modelo)
install.packages(“lmtest”) # Ya instalado si hiciste el anterior library(lmtest) bptest(modelo) ```