La empresa Global Risk Analytics Corp. desea analizar los factores asociados a los niveles de arrestos por agresión en Estados Unidos utilizando la base de datos USArrests. El objetivo del análisis es aplicar estadística descriptiva, análisis gráfico, correlaciones y modelos de regresión lineal simple y múltiple para apoyar decisiones relacionadas con análisis de riesgo territorial. # Actividad 1. Reconocimiento de la base de datos
data("USArrests")
datos <- USArrests
head(datos)
La base de datos contiene información relacionada con criminalidad y urbanización en 50 estados de Estados Unidos.
dim(datos)
## [1] 50 4
La base de datos contiene 50 observaciones y 4 variables. Cada observación representa un estado de Estados Unidos.
head(datos)
Cada fila representa un estado de Estados Unidos y muestra información sobre arrestos por delitos violentos y porcentaje de población urbana.
str(datos)
## 'data.frame': 50 obs. of 4 variables:
## $ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
## $ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
## $ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
## $ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
Todas las variables son cuantitativas continuas porque representan tasas numéricas o porcentajes.
La variable dependiente será Assault, porque representa los arrestos por agresión que se desean explicar mediante otras variables.
names(datos)
## [1] "Murder" "Assault" "UrbanPop" "Rape"
Las variables predictoras serán Murder, UrbanPop y Rape, ya que podrían ayudar a explicar los niveles de Assault.
summary(datos)
## Murder Assault UrbanPop Rape
## Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
## 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
## Median : 7.250 Median :159.0 Median :66.00 Median :20.10
## Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
## 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
## Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
mean(datos$Assault)
## [1] 170.76
median(datos$Assault)
## [1] 159
El promedio muestra la cantidad promedio de arrestos por agresión entre los estados.
La mediana representa el valor central de la distribución.
Como el promedio es ligeramente mayor que la mediana, esto sugiere que algunos estados tienen niveles de agresión más altos que elevan el promedio general.
sapply(datos, sd)
## Murder Assault UrbanPop Rape
## 4.355510 83.337661 14.474763 9.366385
La variable con mayor desviación estándar presenta mayor variabilidad entre estados. Esto significa que sus valores cambian más respecto al promedio.
sapply(datos, range)
## Murder Assault UrbanPop Rape
## [1,] 0.8 45 32 7.3
## [2,] 17.4 337 91 46.0
Al revisar los valores mínimos y máximos de cada variable, se pueden ver diferencias bastante grandes entre estados.
Por ejemplo, en la variable Assault los valores van desde aproximadamente 45 hasta 337, lo cual muestra que hay estados con niveles de agresión muy bajos y otros muy altos.
Lo mismo pasa con Murder y Rape, donde también hay estados que se alejan bastante del resto.
Esto sugiere que sí pueden existir valores extremos (estados que están muy por encima o por debajo del comportamiento general), y estos pueden afectar los análisis porque hacen que los promedios y los modelos se inclinen hacia esos valores altos.
sd(datos$Assault)
## [1] 83.33766
La desviación estándar de Assault nos dice qué tanto varían los niveles de arrestos por agresión entre los estados.
En este caso, el valor es bastante alto (alrededor de 100), lo que significa que no todos los estados se comportan igual.
Hay estados con niveles muy bajos de agresión y otros con niveles bastante altos, muy por encima del promedio.
En otras palabras, los datos están bastante dispersos, lo que indica que la criminalidad no es uniforme en todo el país, sino que depende mucho del estado.
En general, los datos muestran que la criminalidad en Estados Unidos no es igual en todos los estados.
Algunos estados presentan niveles bajos de delitos como asesinato, agresión y violación, mientras que otros tienen valores bastante altos.
La variable Assault es una de las que más varía entre estados, lo que indica que la agresión no se comporta de forma estable en el país.
También se puede ver que la población urbana no necesariamente explica por sí sola estos niveles de criminalidad, ya que hay estados muy urbanos con baja criminalidad y otros con valores altos.
En resumen, la criminalidad cambia bastante de un estado a otro, lo que sugiere que influyen muchos factores diferentes y no solo uno en específico.
En esta parte se utilizan gráficos para entender cómo se comporta la variable Assault (arrestos por agresión) y cómo se relaciona con otras variables como UrbanPop, Murder y Rape.
Esto ayuda a tener una idea inicial antes de construir modelos de regresión.
graphics.off()
par(mfrow=c(1,1))
par(mar=c(5,5,4,2))
hist(datos$Assault,
col="steelblue",
border="white",
main="Distribución de arrestos por agresión (Assault)",
xlab="Assault",
ylab="Frecuencia")
La distribución de Assault no es completamente uniforme.
La mayoría de los estados se concentran en valores medios de arrestos por agresión, mientras que unos pocos estados tienen valores bastante altos.
Esto hace que la distribución tenga una forma ligeramente sesgada hacia la derecha, es decir, existen algunos estados con niveles de agresión mucho mayores que el promedio.
plot(datos$UrbanPop,
datos$Assault,
pch=19,
col="blue",
main="Relación entre población urbana y agresión",
xlab="UrbanPop",
ylab="Assault")
abline(lm(Assault ~ UrbanPop, data=datos), col="red")
La relación entre UrbanPop y Assault es débil. Los puntos están bastante dispersos y no se observa una tendencia clara. Esto indica que el porcentaje de población urbana no tiene un efecto fuerte sobre los niveles de agresión en los estados. Este gráfico muestra cómo se relaciona el porcentaje de población urbana (UrbanPop) con los arrestos por agresión (Assault). La línea roja indica la tendencia general. Se observa que la línea es ligeramente ascendente, lo que sugiere que cuando aumenta la población urbana, los niveles de agresión tienden a aumentar un poco. Sin embargo, los puntos están muy dispersos, lo que significa que esta relación no es fuerte. existe una relación positiva débil entre urbanización y agresión. —
plot(datos$Murder,
datos$Assault,
pch=19,
col="red",
main="Relación entre asesinatos y agresión",
xlab="Murder",
ylab="Assault")
abline(lm(Assault ~ Murder, data=datos), col="black")
La relación entre Murder y Assault es positiva.
Esto significa que a medida que aumentan los arrestos por asesinato, también tienden a aumentar los arrestos por agresión. Además, esta relación es más clara que la observada con UrbanPop. Este gráfico muestra la relación entre los arrestos por asesinato (Murder) y los arrestos por agresión (Assault). La línea roja tiene una inclinación más clara hacia arriba. Esto indica que a medida que aumentan los asesinatos en un estado, también aumentan los casos de agresión. Los puntos están más alineados que en la gráfica anterior, por lo que la relación es más evidente. existe una relación positiva más fuerte entre Murder y Assault.
plot(datos$Rape,
datos$Assault,
pch=19,
col="darkgreen",
main="Relación entre violación y agresión",
xlab="Rape",
ylab="Assault")
abline(lm(Assault ~ Rape, data=datos), col="black")
La relación entre Murder y Assault es la más adecuada para iniciar un modelo de regresión simple. Esto se debe a que muestra una tendencia más clara y ordenada en comparación con las otras variables. Este gráfico muestra la relación entre los arrestos por violación (Rape) y los arrestos por agresión (Assault). La línea roja también es ascendente, lo que indica una relación positiva. Esto significa que en estados donde hay más casos de violación, también suelen registrarse más casos de agresión. Sin embargo, los puntos están algo dispersos, por lo que la relación no es perfecta. existe una relación positiva moderada entre Rape y Assault.
boxplot(datos$Assault,
col="orange",
main="Valores de Assault y posibles atípicos",
ylab="Assault")
Este gráfico sirve para analizar la distribución de los valores de Assault y detectar posibles valores extremos.
La caja representa la mayoría de los datos, mientras que los puntos fuera de los límites representan estados que se alejan del comportamiento general.
Se observa que algunos estados tienen valores de agresión bastante altos en comparación con el resto.
Estos valores se consideran posibles atípicos.En el boxplot se observan algunos estados con valores de Assault mucho más altos que el resto.
Estos valores pueden considerarse atípicos.
Este tipo de datos puede afectar el modelo de regresión, ya que pueden influir demasiado en la pendiente y hacer que los resultados no representen bien el comportamiento general de todos los estados.
En esta parte se analiza la relación entre las variables del conjunto de datos.
La correlación permite ver si dos variables tienden a aumentar o disminuir juntas.
round(cor(datos),2)
## Murder Assault UrbanPop Rape
## Murder 1.00 0.80 0.07 0.56
## Assault 0.80 1.00 0.26 0.67
## UrbanPop 0.07 0.26 1.00 0.41
## Rape 0.56 0.67 0.41 1.00
Al revisar la matriz de correlación, se observa que la variable Murder es la que tiene la relación más fuerte y positiva con Assault.
Esto significa que en los estados donde hay más asesinatos, también suele haber más agresiones.
Es la relación más clara dentro de todas las variables.
cor(datos$UrbanPop, datos$Assault)
## [1] 0.2588717
La relación entre UrbanPop y Assault es débil.
Esto se nota porque el valor de correlación es bajo.
En términos simples, significa que vivir en un estado más urbano no garantiza que haya más o menos agresiones.
cor(datos[,c("Murder","UrbanPop","Rape")])
## Murder UrbanPop Rape
## Murder 1.00000000 0.06957262 0.5635788
## UrbanPop 0.06957262 1.00000000 0.4113412
## Rape 0.56357883 0.41134124 1.0000000
Entre las variables independientes sí existen algunas relaciones, pero no son extremadamente fuertes.
Por ejemplo, Murder y Rape tienen una relación moderada.
Esto indica que en algunos estados donde aumentan ciertos delitos, también pueden aumentar otros, pero no es una relación perfecta.
En general, no hay problemas graves de repetición de información entre variables.
Que dos variables estén relacionadas no significa que una sea la causa de la otra.
Por ejemplo, que Murder y Assault estén correlacionadas no quiere decir que una provoque la otra.
Puede haber otros factores que influyan en ambas, como condiciones sociales, económicas o políticas.
Por eso, la correlación solo muestra relación, pero no demuestra causa.
Para el modelo múltiple es recomendable incluir Murder, UrbanPop y Rape.
Esto se debe a que las tres variables representan diferentes aspectos del comportamiento criminal y social.
Murder parece tener una relación fuerte con Assault, Rape una relación moderada, y UrbanPop aporta información del contexto poblacional.
Usarlas juntas permite construir un modelo más completo y con mejor capacidad de explicación.
En esta parte se construye un modelo de regresión lineal simple para analizar si la población urbana (UrbanPop) puede explicar los arrestos por agresión (Assault).
modelo_simple_urban <- lm(Assault ~ UrbanPop, data=datos)
summary(modelo_simple_urban)
##
## Call:
## lm(formula = Assault ~ UrbanPop, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -150.78 -61.85 -18.68 58.05 196.85
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 73.0766 53.8508 1.357 0.1811
## UrbanPop 1.4904 0.8027 1.857 0.0695 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 81.33 on 48 degrees of freedom
## Multiple R-squared: 0.06701, Adjusted R-squared: 0.04758
## F-statistic: 3.448 on 1 and 48 DF, p-value: 0.06948
La ecuación del modelo se interpreta así:
\[ Assault = \beta_0 + \beta_1(UrbanPop) \]
En términos del resultado del modelo, se reemplazan los valores estimados:
\[ Assault = b_0 + b_1(UrbanPop) \]
Esto significa que Assault depende de UrbanPop, pero también existe un margen de error porque no todo puede explicarse con una sola variable.
El intercepto representa el valor estimado de Assault cuando UrbanPop es igual a 0.
En este contexto, no tiene un significado real, porque no existen estados con 0% de población urbana.
Sin embargo, sirve como punto de inicio matemático de la recta.
El coeficiente de UrbanPop indica cuánto cambia Assault cuando la población urbana aumenta en una unidad.
Si el coeficiente es positivo, significa que al aumentar la urbanización, los arrestos por agresión tienden a aumentar ligeramente.
Sin embargo, este efecto no es fuerte, lo que indica que UrbanPop no es un gran predictor de Assault.
Para esto se observa el valor p-value en el resumen del modelo.
En este caso, UrbanPop no tiene una relación suficientemente fuerte con Assault, por lo que puede no ser estadísticamente significativa.
El R cuadrado indica qué tanto del comportamiento de Assault es explicado por UrbanPop.
En este modelo, el valor es bajo, lo que significa que UrbanPop explica muy poco de la variación en los arrestos por agresión.
En palabras simples: este modelo no logra explicar bien el problema.
No, este modelo no es suficiente.
Esto se debe a que usa solo una variable (UrbanPop), y los resultados muestran que no tiene una relación fuerte con Assault.
Por lo tanto, se necesita incluir más variables como Murder y Rape para obtener un modelo más completo y preciso.
En esta parte se construye un segundo modelo de regresión lineal simple, esta vez usando la variable Murder para explicar los arrestos por agresión (Assault).
La idea es comparar si Murder es un mejor predictor que UrbanPop.
modelo_simple_murder <- lm(Assault ~ Murder, data=datos)
summary(modelo_simple_murder)
##
## Call:
## lm(formula = Assault ~ Murder, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -107.24 -36.35 -3.67 32.15 118.45
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 51.27 14.69 3.490 0.00105 **
## Murder 15.34 1.65 9.298 2.6e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 50.31 on 48 degrees of freedom
## Multiple R-squared: 0.643, Adjusted R-squared: 0.6356
## F-statistic: 86.45 on 1 and 48 DF, p-value: 2.596e-12
La ecuación del modelo es:
\[ Assault = \beta_0 + \beta_1(Murder) \]
Con los resultados del modelo, se reemplazan los coeficientes estimados:
\[ Assault = b_0 + b_1(Murder) \]
Esto indica que los niveles de agresión dependen del número de asesinatos en cada estado.
El coeficiente de Murder indica cuánto cambia Assault cuando los arrestos por asesinato aumentan en una unidad.
En este caso, el coeficiente es positivo, lo que significa que cuando aumentan los asesinatos, también aumentan los arrestos por agresión.
Esto sugiere una relación directa entre ambos tipos de delitos.
Para evaluar esto se observa el valor p del modelo.
En este caso, Murder sí suele ser estadísticamente significativa, lo que indica que su relación con Assault no es casual.
Al comparar los R cuadrado de ambos modelos:
Esto significa que Murder es un mejor predictor de Assault que UrbanPop.
El modelo más conveniente es el que usa Murder como variable explicativa.
Esto se debe a que:
En conclusión, Murder es un mejor predictor que UrbanPop para explicar los arrestos por agresión.
En esta parte se comparan los dos modelos simples construidos anteriormente:
Se evalúan usando R², R² ajustado, AIC y BIC para determinar cuál modelo es mejor.
summary(modelo_simple_urban)$r.squared
## [1] 0.06701456
summary(modelo_simple_murder)$r.squared
## [1] 0.6430008
summary(modelo_simple_urban)$adj.r.squared
## [1] 0.04757736
summary(modelo_simple_murder)$adj.r.squared
## [1] 0.6355633
AIC(modelo_simple_urban, modelo_simple_murder)
BIC(modelo_simple_urban, modelo_simple_murder)
El modelo que utiliza Murder como variable explicativa tiene un mayor R cuadrado.
Esto significa que explica mejor la variabilidad de los arrestos por agresión en comparación con el modelo de UrbanPop.
El modelo con Murder también presenta menores valores de AIC y BIC.
Esto es importante porque estos criterios indican qué modelo es más eficiente:
Por lo tanto, el modelo con Murder es más adecuado.
No, el mejor modelo no se debe elegir solo por números.
Aunque R², AIC y BIC son importantes, también se debe considerar el sentido lógico y contextual de las variables.
Un modelo puede tener buenos números, pero no tener sentido en la realidad.
Para una primera aproximación, se recomienda el modelo que usa Murder.
Esto se debe a que tiene mejor capacidad explicativa y una relación más clara con Assault.
Además, es más coherente con el contexto de criminalidad.
Trabajar con regresión simple tiene varias limitaciones:
Por eso es necesario avanzar a modelos múltiples.
En esta parte se construye un modelo de regresión lineal múltiple para explicar los arrestos por agresión (Assault) usando tres variables:
La idea es ver cómo se comportan todas juntas dentro del mismo modelo.
modelo_multiple <- lm(Assault ~ Murder + UrbanPop + Rape, data=datos)
summary(modelo_multiple)
##
## Call:
## lm(formula = Assault ~ Murder + UrbanPop + Rape, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -102.420 -21.226 -4.897 21.999 125.744
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -15.4520 31.8581 -0.485 0.6300
## Murder 12.4700 1.8533 6.729 2.33e-08 ***
## UrbanPop 0.6304 0.5054 1.247 0.2186
## Rape 2.2502 0.9432 2.386 0.0212 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 45.58 on 46 degrees of freedom
## Multiple R-squared: 0.7192, Adjusted R-squared: 0.7009
## F-statistic: 39.27 on 3 and 46 DF, p-value: 9.678e-13
La ecuación del modelo es:
\[ Assault = \beta_0 + \beta_1(Murder) + \beta_2(UrbanPop) + \beta_3(Rape) \]
Con los resultados del modelo se reemplaza por los valores estimados:
\[ Assault = b_0 + b_1(Murder) + b_2(UrbanPop) + b_3(Rape) \]
Esto significa que Assault depende simultáneamente de las tres variables.
El coeficiente de Murder indica cuánto cambia Assault cuando Murder aumenta en una unidad, manteniendo constantes UrbanPop y Rape.
Si el coeficiente es positivo, significa que a mayor número de asesinatos, también aumentan las agresiones.
Esto confirma que Murder es una variable importante dentro del modelo.
Este coeficiente muestra el efecto de la población urbana sobre Assault, manteniendo constantes las demás variables.
En muchos casos, este efecto es pequeño, lo que indica que UrbanPop no tiene un impacto tan fuerte cuando se analizan todas las variables juntas.
El coeficiente de Rape indica cómo cambian los arrestos por agresión cuando aumentan los casos de violación.
Si es positivo, significa que ambos delitos tienden a aumentar juntos.
Sin embargo, su impacto puede ser menor en comparación con Murder.
Para esto se revisan los valores p del modelo:
En este caso, es común que Murder sea la variable más significativa, mientras que UrbanPop puede no serlo.
El R cuadrado indica qué tan bien el modelo explica los datos.
En este modelo, el R² es más alto que en los modelos simples, lo que significa que ahora se explica mejor el comportamiento de Assault.
El R² ajustado corrige el efecto de incluir varias variables, y también ayuda a confirmar que el modelo es más sólido.
El modelo múltiple es mejor que los modelos simples porque:
Por eso, es el modelo más adecuado hasta ahora.
En general, los signos de los coeficientes deben tener sentido con el contexto.
Por ejemplo:
En este caso, los resultados son en su mayoría coherentes con el comportamiento esperado del crimen.
En esta parte se revisa si el modelo de regresión lineal múltiple cumple con los supuestos básicos.
Esto es importante porque un modelo solo es confiable si sus supuestos se cumplen.
par(mfrow=c(2,2))
plot(modelo_multiple)
En el gráfico de residuos vs valores ajustados, lo ideal es que los puntos se distribuyan de forma aleatoria.
En este caso, los residuos no muestran un patrón muy claro, lo cual es una buena señal.
Esto indica que el modelo no presenta errores sistemáticos fuertes.
shapiro.test(residuals(modelo_multiple))
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_multiple)
## W = 0.9725, p-value = 0.2915
La prueba Shapiro-Wilk sirve para verificar si los residuos siguen una distribución normal.
En este caso, si el valor p es mayor a 0.05, se puede asumir normalidad de los residuos.
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.3
## Cargando paquete requerido: zoo
## Warning: package 'zoo' was built under R version 4.4.3
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(modelo_multiple)
##
## studentized Breusch-Pagan test
##
## data: modelo_multiple
## BP = 4.6168, df = 3, p-value = 0.2021
Esta prueba evalúa si los errores tienen varianza constante.
Si el resultado es mayor a 0.05, el modelo cumple este supuesto.
library(car)
## Warning: package 'car' was built under R version 4.4.3
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.4.3
vif(modelo_multiple)
## Murder UrbanPop Rape
## 1.536825 1.262276 1.840863
El VIF mide si las variables independientes están muy relacionadas entre sí.
En este caso, si los valores son bajos, significa que las variables pueden usarse juntas sin problemas graves.
En los gráficos de diagnóstico se pueden ver algunos puntos que se alejan del resto.
Estos pueden ser observaciones influyentes, es decir, datos que afectan el modelo más de lo normal.
Sin embargo, si no son muchos, el modelo sigue siendo confiable.
En general, el modelo cumple de forma aceptable con los supuestos de regresión lineal.
Los residuos no muestran patrones fuertes, la normalidad es razonable y no hay problemas graves de multicolinealidad.
Esto indica que el modelo múltiple es válido y puede ser utilizado para análisis e interpretación.
En esta parte se usa el modelo de regresión lineal múltiple para predecir el nivel de arrestos por agresión (Assault) en un estado hipotético.
Esto permite ver cómo se puede usar el modelo en la toma de decisiones.
nuevo_estado <- data.frame(
Murder = 8,
UrbanPop = 70,
Rape = 25
)
nuevo_estado
predict(modelo_multiple, nuevo_estado, interval = "confidence")
## fit lwr upr
## 1 184.6941 170.3306 199.0577
Este resultado muestra el valor estimado promedio de Assault para un estado con esas características.
El intervalo de confianza indica el rango donde probablemente se encuentre el promedio real.
predict(modelo_multiple, nuevo_estado, interval = "prediction")
## fit lwr upr
## 1 184.6941 91.83006 277.5582
Este resultado es más amplio porque estima el valor de Assault para un nuevo estado específico.
El intervalo de predicción es más grande porque incluye la variabilidad natural entre estados.
La predicción puntual es el valor estimado de arrestos por agresión para el estado con las características dadas.
Este valor representa la mejor estimación según el modelo construido.
El intervalo de confianza muestra el rango donde se espera que esté el promedio real de Assault.
En otras palabras, indica qué tan seguro está el modelo sobre el valor promedio estimado.
El intervalo de predicción es más amplio porque estima un valor individual de Assault para un estado nuevo.
Esto incluye la variabilidad natural entre estados, por eso siempre es más grande que el intervalo de confianza.
La diferencia principal es:
El primero es más preciso y estrecho, el segundo es más amplio porque incluye más incertidumbre.
Una empresa como Global Risk Analytics Corp. puede usar este tipo de predicciones para evaluar el nivel de riesgo en diferentes estados.
Por ejemplo:
En resumen, este modelo ayuda a tomar decisiones basadas en datos reales y no solo en intuición.