En este trabajo se analizará la regresión lineal simple utilizando como variables el año y la tasa de mortalidad por cáncer de colon en Atlántico/Colombia, a partir de los datos contenidos en el archivo mortalidad_data.csv. Para facilitar la interpretación y el análisis, se emplearán diferentes herramientas gráficas, como diagramas de dispersión, cajas y bigotes, curvas de tendencia frente a valores observados, gráficos de residuos, gráficos Q-Q para verificar la normalidad y gráficos de escala-ubicación. Estos recursos ayudarán a obtener conclusiones más claras y precisas.
library(readr)
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(broom)
library(ggpubr)
mortalidad_data <- read_delim("mortalidad_data.csv",
delim = ";", escape_double = FALSE, trim_ws = TRUE) #Analisis descriptivo de los datos
## Rows: 20 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## dbl (2): Tiempo, Tasamortalidad
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Para verificar las variables de la base de datos utilizamos la siguiente funcion:
names(mortalidad_data)
## [1] "Tiempo" "Tasamortalidad"
Se va a aplicar un modelo de regresión lineal, por lo tanto se va a probar la normalidad:
hist(mortalidad_data$Tasamortalidad)
Aparentemente las variables se ajustan a la forma de campana.
Para conocer cómo se relacionan las variables entre sí, se puede utilizar una matriz de diagramas de dispersión. Se observa que hay una relación lineal bastante clara entre el año y la tasa de mortalidad.
pairs(mortalidad_data)
Para medir el grado de relación lineal entre las variables, se puede calcular la matriz de correlaciones:
cor(mortalidad_data)
## Tiempo Tasamortalidad
## Tiempo 1.0000000 0.9209015
## Tasamortalidad 0.9209015 1.0000000
Se observa que la relación entre el Tiempo y la Tasa de mortalidad da como valor 0.9209015 lo que sugiere una relación lineal muy fuerte entre las variables, es positiva lo que indica que ambas variables creen juntas.
El comando lm (modelo lineal) se utiliza para ajustar un modelo de regresión. En la fórmula y ~ x, se indica cuál es la variable dependiente (y) y cuál la independiente (x). El argumento data señala el conjunto de datos utilizado. El resultado del modelo se guarda en el objeto llamado regresion, que contiene toda la información del análisis. Con el comando summary podemos ver un resumen de los principales resultados.
regresion <- lm(Tasamortalidad ~ Tiempo, data = mortalidad_data)
summary(regresion)
##
## Call:
## lm(formula = Tasamortalidad ~ Tiempo, data = mortalidad_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.72444 -0.28421 0.06523 0.34803 0.55714
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -316.64173 32.03201 -9.885 1.07e-08 ***
## Tiempo 0.15977 0.01594 10.023 8.62e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4111 on 18 degrees of freedom
## Multiple R-squared: 0.8481, Adjusted R-squared: 0.8396
## F-statistic: 100.5 on 1 and 18 DF, p-value: 8.616e-09
El coeficiente de determinación (R²), que indica qué tan bien se ajusta la recta a los datos, según el resumen anterior vemos que su valor ubicado en Multiple R-squared es 0.8481.
Los coeficientes de la ecuación de la recta de mínimos cuadrados que relaciona la tasa de mortalidad con el tiempo se encuentran en la columna Estimate de la tabla de Coefficients, este ultimo valor se multiplica por la variable “x” (Tiempo). En este caso, la ecuación obtenida es:
\[y=-316.64173+0.15977*Tiempo\]
El coeficiente 0.15977 indica que por cada año adicional, se estima que la tasa de mortalidad aumenta en 0.15977 unidades, en promedio, el intercepto –316.64173 es el valor estimado de la tasa de mortalidad cuando el tiempo es 0 (aunque fuera del rango de observación, es necesario para la fórmula matemática).
graficaregresion <- ggplot(mortalidad_data, aes(x = Tiempo, y = Tasamortalidad)) +
geom_point() +
geom_smooth(method = "lm", col = "green") +
labs(x = "Tiempo", y = "Tasa de mortalidad",
title = "Regresión lineal: Tasa de mortalidad vs. Tiempo")
graficaregresion
## `geom_smooth()` using formula = 'y ~ x'
Observamos que a medida que el tiempo avanza la tasa de mortalidad tambien lo hace, es decir hay una tendencia creciente positiva.
Se genera un vector de valores de tiempo para hacer predicciones:
nuevas.mortalidades <- data.frame(Tiempo = seq(2000, 2019))
predict(regresion, nuevas.mortalidades)
## 1 2 3 4 5 6 7 8
## 2.907143 3.066917 3.226692 3.386466 3.546241 3.706015 3.865789 4.025564
## 9 10 11 12 13 14 15 16
## 4.185338 4.345113 4.504887 4.664662 4.824436 4.984211 5.143985 5.303759
## 17 18 19 20
## 5.463534 5.623308 5.783083 5.942857
Bajo este modelo:
Los errores estándar de los estimadores de los parámetros β₀ y β₁ se encuentran en la columna Std Error. En este caso, los valores son 32.03201 y 0.01594, respectivamente.
La columna t value muestra el estadístico t, que se calcula como el cociente entre el estimador y su error estándar. Este valor se usa para probar las hipótesis nulas H₀: β₀=0 y H₀: β₁=0. Los p-valores correspondientes están en la columna Pr(>|t|), y como son muy bajos, se rechazan ambas hipótesis bajo niveles comunes de significancia.
El estimador de la desviación estándar de los errores (σ) aparece como Residual standard error, y su valor en este caso es 0.4111.
Los intervalos de confianza para los parámetros del modelo se obtienen con el comando confint. El argumento level permite ajustar el nivel de confianza (por defecto 0.95):
confint(regresion)
## 2.5 % 97.5 %
## (Intercept) -383.9384893 -249.3449694
## Tiempo 0.1262853 0.1932636
confint(regresion, level = 0.90)
## 5 % 95 %
## (Intercept) -372.1872755 -261.0961831
## Tiempo 0.1321331 0.1874158
Para verificar la homocedasticidad, se grafica la relación entre los valores ajustados y los residuos estandarizados:
Datos <- rstandard(regresion)
mortalidad <- fitted(regresion)
plot(mortalidad, Datos,
main = "Tiempo vs Tasa de mortalidad",
xlab = "Tasa de mortalidad", ylab = "Tiempo")
abline(h = 0, col = "green")
No se observa ningún patrón especial en el gráfico, lo que sugiere que las hipótesis de homocedasticidad y linealidad son razonables
La normalidad de los residuos se evalúa mediante un gráfico Q-Q. Este gráfico permite comparar la distribución de los residuos con la distribución normal teórica:
qqnorm(residuos)
qqline(residuos)
También se puede realizar una prueba estadística para verificar la normalidad:
Hipótesis:
H₀: Los residuos siguen una distribución normal.
H₁: Los residuos no siguen una distribución normal.
Criterio de decisión:
Se acepta H₀ si p > 0.05.
Se rechaza H₀ si p < 0.05.
shapiro.test(residuos)
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.94293, p-value = 0.2722
Como p-value es mayor a 0.05 se acepta la H₀, lo que quiere decir que los residuos siguen una distribución normal.
anova <- aov(Tasamortalidad ~ Tiempo, data = mortalidad_data)
summary(anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## Tiempo 1 16.976 16.976 100.5 8.62e-09 ***
## Residuals 18 3.041 0.169
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(anova)
El modelo es estadísticamente significativo: la variable Tiempo explica una parte importante de la variabilidad de la variable dependiente, el valor de F muy alto y el p-valor tan bajo indican que el modelo tiene un buen poder explicativo.
El análisis realizado muestra que existe una relación positiva, fuerte y estadísticamente significativa entre el tiempo y la tasa de mortalidad. El modelo de regresión lineal se ajusta bien a los datos, cumple con los supuestos necesarios, y es útil tanto para la interpretación como para la predicción de tendencias futuras en la mortalidad por cancer de colon. Puede ser una herramienta válida para el análisis demográfico o epidemiológico en contextos similares.