En este taller de regresión, aprenderás los conceptos básicos de la regresión y sus aplicaciones. Estudiaremos modelos de regresión lineal, su formulación matemática y cómo interpretar los resultados. Discutiremos las suposiciones necesarias para la validez del modelo, y aprenderás a evaluar la calidad del mismo usando diversas métricas. También exploraremos métodos avanzados de regresión no lineal. Finalmente, realizarás ejercicios prácticos con software estadístico para aplicar los conceptos y trabajar con datos reales.
Primer Ejercicio 1. El artículo .The Incorporation of Uranium and Silver by Hydrothermally Synthesized Galena (Econ. Geology, 1964: 1003-1024) reporta sobre la determinación de contenido de plata de cristales de galena desarrollados en un sistema hidrotérmico cerrado dentro de un rango de temperatura. Con x : temperatura de cristalización en °C y y : Ag2S en mol %, los datos son los siguientes:
Aplique el análisis de regresión lineal simple (gráfico de dispersión, ajuste del modelo, hipótesis para los parámetros del modelo, anova , verificación de los supuestos) a los datos y publicar los resultados e Rpub.
Suponga que previamente se creía que cuando la temperatura de cristalización era de 410°C, el contenido de plata promedio verdadero sería de 0.20. Realice una prueba a un nivel de significación de 0.05 para decidir si los datos muestrales contradicen esta creencia previa
x <- c(398, 292, 352, 575, 568, 450, 550, 408, 484, 350, 503, 600, 600)
y <- c(0.15, 0.05, 0.23, 0.43, 0.23, 0.40, 0.44, 0.44, 0.45, 0.09, 0.59, 0.63, 0.63)
plot(x, y, main="Gráfico de dispersión de Temperatura vs Ag2S", xlab="Temperatura (°C)", ylab="Ag2S (mol%)")
modelo <- lm(y ~ x)
summary(modelo)
##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.27713 -0.08736 0.03855 0.07610 0.17786
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.3230052 0.1754542 -1.841 0.09273 .
## x 0.0014615 0.0003639 4.016 0.00203 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.132 on 11 degrees of freedom
## Multiple R-squared: 0.5945, Adjusted R-squared: 0.5577
## F-statistic: 16.13 on 1 and 11 DF, p-value: 0.002029
plot(x, y, main="Gráfico de dispersión de Temperatura vs Ag2S", xlab="Temperatura (°C)", ylab="Ag2S (mol%)")
abline(modelo, col="black")
anova(modelo)
## Analysis of Variance Table
##
## Response: y
## Df Sum Sq Mean Sq F value Pr(>F)
## x 1 0.28093 0.280927 16.13 0.002029 **
## Residuals 11 0.19158 0.017416
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par(mfrow=c(2,2))
plot(modelo)
nuevo_dato <- data.frame(x = 410)
prediccion <- predict(modelo, nuevo_dato, interval = "confidence")
prediccion
## fit lwr upr
## 1 0.2762147 0.1817718 0.3706575
#Prueba t
t.test(y, mu=0.20, alternative="two.sided", conf.level=0.95)
##
## One Sample t-test
##
## data: y
## t = 3.019, df = 12, p-value = 0.01068
## alternative hypothesis: true mean is not equal to 0.2
## 95 percent confidence interval:
## 0.2462420 0.4860657
## sample estimates:
## mean of x
## 0.3661538
En el primer ejercicio del taller de regresión, los participantes aplican los conceptos fundamentales de la regresión lineal simple utilizando un conjunto de datos real. Construyen un modelo de regresión para analizar la relación entre dos variables, enfatizando la interpretación de los coeficientes y la evaluación del modelo a través del análisis de residuos y métricas de rendimiento. Al concluir el ejercicio, los participantes deben ser capaces de evaluar la efectividad del modelo y comprender cómo las variaciones en la variable independiente influyen en la variable dependiente.
segundo Ejercicio 2. queremos predecir el y : tiempo de respuesta de un servidor (en milisegundos) en función de varias variables independientes: el x1: número de usuarios concurrentes, x2 uso de la CPU ( %), x3 cantidad de memoria disponible (MB), x4 ancho de banda (Mbps) y x5 latencia de red (ms)
datos <- data.frame(
tiempo_respuesta = c(170, 165, 168, 175, 180, 190, 185, 220, 220, 240),
usuarios_concurrentes = c(13, 12, 11, 16, 15, 20, 19, 24, 25, 28),
uso_cpu = c(40, 35, 32, 40, 60, 55, 55, 65, 72, 75),
memoria_disponible = c(1648, 1900, 1740, 1710, 1600, 1500, 1360, 1300, 1200, 1100),
ancho_banda = c(80, 95, 85, 82, 80, 75, 70, 65, 60, 55),
latencia_red = c(18, 25, 28, 30, 40, 45, 50, 55, 60, 65)
)
modelo_multiple <- lm(tiempo_respuesta ~ ., data=datos)
summary(modelo_multiple)
##
## Call:
## lm(formula = tiempo_respuesta ~ ., data = datos)
##
## Residuals:
## 1 2 3 4 5 6 7 8 9 10
## 1.0267 5.6131 5.7701 -7.8724 -0.7862 -6.4893 -6.7745 4.9594 -1.8551 6.4082
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 125.26435 88.78967 1.411 0.231
## usuarios_concurrentes 2.93885 2.04789 1.435 0.225
## uso_cpu 0.23891 0.58176 0.411 0.702
## memoria_disponible 0.09949 0.14408 0.690 0.528
## ancho_banda -2.16073 2.76459 -0.782 0.478
## latencia_red 0.26966 0.77829 0.346 0.746
##
## Residual standard error: 8.449 on 4 degrees of freedom
## Multiple R-squared: 0.9535, Adjusted R-squared: 0.8954
## F-statistic: 16.41 on 5 and 4 DF, p-value: 0.009021
anova(modelo_multiple)
## Analysis of Variance Table
##
## Response: tiempo_respuesta
## Df Sum Sq Mean Sq F value Pr(>F)
## usuarios_concurrentes 1 5797.2 5797.2 81.2057 0.0008397 ***
## uso_cpu 1 10.9 10.9 0.1530 0.7156091
## memoria_disponible 1 3.2 3.2 0.0445 0.8431616
## ancho_banda 1 36.7 36.7 0.5142 0.5129565
## latencia_red 1 8.6 8.6 0.1200 0.7464419
## Residuals 4 285.6 71.4
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par(mfrow=c(2,2))
plot(modelo_multiple)
## Warning in sqrt(crit * p * (1 - hh)/hh): Se han producido NaNs
## Warning in sqrt(crit * p * (1 - hh)/hh): Se han producido NaNs
modelo_backward <- step(modelo_multiple, direction="backward")
## Start: AIC=45.52
## tiempo_respuesta ~ usuarios_concurrentes + uso_cpu + memoria_disponible +
## ancho_banda + latencia_red
##
## Df Sum of Sq RSS AIC
## - latencia_red 1 8.570 294.12 43.814
## - uso_cpu 1 12.039 297.59 43.931
## - memoria_disponible 1 34.037 319.59 44.645
## - ancho_banda 1 43.608 329.16 44.940
## <none> 285.55 45.518
## - usuarios_concurrentes 1 147.018 432.57 47.672
##
## Step: AIC=43.81
## tiempo_respuesta ~ usuarios_concurrentes + uso_cpu + memoria_disponible +
## ancho_banda
##
## Df Sum of Sq RSS AIC
## - uso_cpu 1 18.574 312.70 42.427
## - memoria_disponible 1 26.232 320.36 42.668
## - ancho_banda 1 36.710 330.84 42.990
## <none> 294.12 43.814
## - usuarios_concurrentes 1 289.324 583.45 48.664
##
## Step: AIC=42.43
## tiempo_respuesta ~ usuarios_concurrentes + memoria_disponible +
## ancho_banda
##
## Df Sum of Sq RSS AIC
## - memoria_disponible 1 12.14 324.84 40.808
## - ancho_banda 1 23.14 335.84 41.140
## <none> 312.70 42.427
## - usuarios_concurrentes 1 435.74 748.44 49.154
##
## Step: AIC=40.81
## tiempo_respuesta ~ usuarios_concurrentes + ancho_banda
##
## Df Sum of Sq RSS AIC
## - ancho_banda 1 20.10 344.94 39.408
## <none> 324.84 40.808
## - usuarios_concurrentes 1 425.26 750.10 47.176
##
## Step: AIC=39.41
## tiempo_respuesta ~ usuarios_concurrentes
##
## Df Sum of Sq RSS AIC
## <none> 344.9 39.408
## - usuarios_concurrentes 1 5797.2 6142.1 66.203
summary(modelo_backward)
##
## Call:
## lm(formula = tiempo_respuesta ~ usuarios_concurrentes, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.317 -4.835 1.197 3.831 8.162
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 112.4300 7.1118 15.81 2.56e-07 ***
## usuarios_concurrentes 4.3098 0.3717 11.60 2.78e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.566 on 8 degrees of freedom
## Multiple R-squared: 0.9438, Adjusted R-squared: 0.9368
## F-statistic: 134.5 on 1 and 8 DF, p-value: 2.783e-06
modelo_forward <- step(lm(tiempo_respuesta ~ 1, data=datos), scope=formula(modelo_multiple), direction="forward")
## Start: AIC=66.2
## tiempo_respuesta ~ 1
##
## Df Sum of Sq RSS AIC
## + usuarios_concurrentes 1 5797.2 344.9 39.408
## + ancho_banda 1 5392.0 750.1 47.176
## + memoria_disponible 1 5345.0 797.1 47.784
## + latencia_red 1 5194.2 947.9 49.517
## + uso_cpu 1 5124.1 1018.0 50.230
## <none> 6142.1 66.203
##
## Step: AIC=39.41
## tiempo_respuesta ~ usuarios_concurrentes
##
## Df Sum of Sq RSS AIC
## <none> 344.94 39.408
## + ancho_banda 1 20.0960 324.84 40.808
## + uso_cpu 1 10.9239 334.01 41.086
## + memoria_disponible 1 9.1019 335.84 41.140
## + latencia_red 1 0.7420 344.20 41.386
summary(modelo_forward)
##
## Call:
## lm(formula = tiempo_respuesta ~ usuarios_concurrentes, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.317 -4.835 1.197 3.831 8.162
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 112.4300 7.1118 15.81 2.56e-07 ***
## usuarios_concurrentes 4.3098 0.3717 11.60 2.78e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.566 on 8 degrees of freedom
## Multiple R-squared: 0.9438, Adjusted R-squared: 0.9368
## F-statistic: 134.5 on 1 and 8 DF, p-value: 2.783e-06
En el segundo ejercicio del taller de regresión, los participantes exploran modelos de regresión múltiple para analizar la influencia de varias variables independientes sobre una variable dependiente. Utilizando un conjunto de datos más complejo, construyen un modelo que permite evaluar la contribución individual de cada variable independiente. Al concluir el ejercicio, los participantes deben ser capaces de interpretar los coeficientes de cada variable, entender las interacciones entre ellas y evaluar la robustez del modelo. Este ejercicio resalta la importancia de considerar múltiples factores al analizar datos y mejora la capacidad de construir modelos predictivos más precisos.