COAHUILA

# Preparación Base de Datos (Coahuila)

library(readr)
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
# 1. Lectura de datos

Base = read.csv("conjunto_de_datos_tper_vic1_envipe2025.csv", encoding="UTF-8")

# 2. Filtrar Coahuila y variable: Sexo, Estrato, Percepción de caminar en la noche y todas las de AP4_4-01 a AP4_4-12

Base_Coahuila <- Base %>%
  filter(CVE_ENT == 5) %>%
  select(
    SEXO,
    ESTRATO,
    PERCEPCION_CAM = AP4_4_A,
    CASA = AP4_4_01,
    TRABAJO = AP4_4_02,
    CALLE = AP4_4_03,
    ESCUELA = AP4_4_04,
    MERCADO = AP4_4_05,
    CENTRO_COMERCIAL = AP4_4_06,
    BANCO = AP4_4_07,
    CAJERO = AP4_4_08,
    TRANSPORTE_PUBLICO = AP4_4_09,
    AUTOMOVIL = AP4_4_10,
    CARRETERA = AP4_4_11,
    CENTRO_RECREATIVO = AP4_4_12
  )

# 3. Verificar datos faltantes

summary(Base_Coahuila) #Si alguna variable tiene datos faltantes se marcarán en el resumen estadístico después del máximo.
##       SEXO          ESTRATO     PERCEPCION_CAM       CASA          TRABAJO     
##  Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:2.00   1st Qu.:2.000   1st Qu.:1.000   1st Qu.:1.000  
##  Median :2.000   Median :2.00   Median :3.000   Median :1.000   Median :1.000  
##  Mean   :1.548   Mean   :2.63   Mean   :2.663   Mean   :1.131   Mean   :1.748  
##  3rd Qu.:2.000   3rd Qu.:3.00   3rd Qu.:3.000   3rd Qu.:1.000   3rd Qu.:3.000  
##  Max.   :2.000   Max.   :4.00   Max.   :9.000   Max.   :9.000   Max.   :9.000  
##      CALLE          ESCUELA         MERCADO      CENTRO_COMERCIAL
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   
##  1st Qu.:1.000   1st Qu.:3.000   1st Qu.:1.000   1st Qu.:1.000   
##  Median :1.000   Median :3.000   Median :1.000   Median :1.000   
##  Mean   :1.451   Mean   :2.921   Mean   :1.455   Mean   :1.278   
##  3rd Qu.:2.000   3rd Qu.:3.000   3rd Qu.:2.000   3rd Qu.:1.000   
##  Max.   :9.000   Max.   :9.000   Max.   :9.000   Max.   :9.000   
##      BANCO           CAJERO      TRANSPORTE_PUBLICO   AUTOMOVIL    
##  Min.   :1.000   Min.   :1.000   Min.   :1.000      Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000      1st Qu.:1.000  
##  Median :1.000   Median :2.000   Median :2.000      Median :1.000  
##  Mean   :1.553   Mean   :1.689   Mean   :2.089      Mean   :1.264  
##  3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:3.000      3rd Qu.:1.000  
##  Max.   :9.000   Max.   :9.000   Max.   :9.000      Max.   :9.000  
##    CARRETERA    CENTRO_RECREATIVO
##  Min.   :1.00   Min.   :1.000    
##  1st Qu.:1.00   1st Qu.:1.000    
##  Median :1.00   Median :1.000    
##  Mean   :1.56   Mean   :1.474    
##  3rd Qu.:2.00   3rd Qu.:2.000    
##  Max.   :9.00   Max.   :9.000
# 4. Ver estructura de la base

cat("\nEstructura Base de Datos Coahuila:\n")
## 
## Estructura Base de Datos Coahuila:
glimpse(Base_Coahuila)
## Rows: 2,670
## Columns: 15
## $ SEXO               <int> 1, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, …
## $ ESTRATO            <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, …
## $ PERCEPCION_CAM     <int> 2, 2, 2, 2, 2, 2, 3, 5, 9, 2, 1, 2, 2, 2, 2, 3, 2, …
## $ CASA               <int> 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ TRABAJO            <int> 1, 1, 3, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ CALLE              <int> 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ ESCUELA            <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 1, 3, 2, 3, …
## $ MERCADO            <int> 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ CENTRO_COMERCIAL   <int> 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ BANCO              <int> 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, …
## $ CAJERO             <int> 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ TRANSPORTE_PUBLICO <int> 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 1, 3, 3, 2, 1, 1, …
## $ AUTOMOVIL          <int> 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ CARRETERA          <int> 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ CENTRO_RECREATIVO  <int> 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 1, 1, 2, 1, 1, …
# ÍNDICE DE PERCEPCIÓN DE SEGURIDAD - COAHUILA

# 5. Obtener el índice de seguridad con base en la pregunta 4.4 sobre la percepción de seguridad en cuanto a delincuencia (una nueva columna de la proporción de 1=seguros de la pregunta APA4.4)

Base_Coahuila$Suma_Seguros <- 
  as.numeric(Base_Coahuila$CASA == 1) +
  as.numeric(Base_Coahuila$TRABAJO == 1) + 
  as.numeric(Base_Coahuila$CALLE == 1) + 
  as.numeric(Base_Coahuila$ESCUELA == 1) +
  as.numeric(Base_Coahuila$MERCADO == 1) +
  as.numeric(Base_Coahuila$CENTRO_COMERCIAL == 1) +
  as.numeric(Base_Coahuila$BANCO == 1) +
  as.numeric(Base_Coahuila$CAJERO == 1) +
  as.numeric(Base_Coahuila$TRANSPORTE_PUBLICO == 1) +
  as.numeric(Base_Coahuila$AUTOMOVIL == 1) +
  as.numeric(Base_Coahuila$CARRETERA == 1) +
  as.numeric(Base_Coahuila$CENTRO_RECREATIVO == 1)

# Proporción de lugares seguros
Base_Coahuila$Indice_Seguridad <- Base_Coahuila$Suma_Seguros / 12

# Observar que se añadió la nueva variable (Indice_Seguridad)
names(Base_Coahuila)
##  [1] "SEXO"               "ESTRATO"            "PERCEPCION_CAM"    
##  [4] "CASA"               "TRABAJO"            "CALLE"             
##  [7] "ESCUELA"            "MERCADO"            "CENTRO_COMERCIAL"  
## [10] "BANCO"              "CAJERO"             "TRANSPORTE_PUBLICO"
## [13] "AUTOMOVIL"          "CARRETERA"          "CENTRO_RECREATIVO" 
## [16] "Suma_Seguros"       "Indice_Seguridad"
# Verificar el nuevo índice
cat("RESUMEN DEL ÍNDICE DE SEGURIDAD (0 = Inseguro, 1 = Seguro):\n")
## RESUMEN DEL ÍNDICE DE SEGURIDAD (0 = Inseguro, 1 = Seguro):
summary(Base_Coahuila$Indice_Seguridad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.3333  0.5833  0.5618  0.7500  1.0000
# PREGUNTA 1: PRUEBA DE INDEPENDENCIA
# "En Coahuila, ¿Podríamos inferir que hay independencia entre el estrato social y la percepción de la seguridad al caminar por la noche?

# Hipótesis:
# Ho: La percepción de seguridad ES INDEPENDIENTE del estrato social (No hay relación entre el estrato y qué tan seguro/inseguro se percibe)
# Ha: La percepción de seguridad DEPENDE del estrato social (Existe relación entre el estrato y qué tan seguro/inseguro se percibe)

library(tidyr)

# 1. Crear base para análisis

# Estrato: 1–4
Base_Coahuila$Estrato_cat <- ifelse(Base_Coahuila$ESTRATO == 1, "Bajo",
                             ifelse(Base_Coahuila$ESTRATO == 2, "Medio bajo",
                             ifelse(Base_Coahuila$ESTRATO == 3, "Medio alto",
                             ifelse(Base_Coahuila$ESTRATO == 4, "Alto", NA))))

# Percepción de seguridad al caminar por la noche (PERCEPCION_CAM)
# 2 = Seguro, 3 = Inseguro
Base_Coahuila$Percep_noche <- ifelse(Base_Coahuila$PERCEPCION_CAM == 2, "Seguro",
                              ifelse(Base_Coahuila$PERCEPCION_CAM == 3, "Inseguro", NA))

# Nos quedamos solo con casos válidos (no nulos)
datos <- subset(Base_Coahuila,
                !is.na(Estrato_cat) & !is.na(Percep_noche))

# Acomodamos el orden de las categorías
datos$Estrato_cat  <- factor(datos$Estrato_cat,
                             levels = c("Bajo","Medio bajo","Medio alto","Alto"))
datos$Percep_noche <- factor(datos$Percep_noche,
                             levels = c("Seguro","Inseguro"))


# 2. Tabla de contingencia

tabla <- table(datos$Estrato_cat, datos$Percep_noche)

cat("TABLA DE CONTINGENCIA - ESTRATO vs PERCEPCIÓN:\n")
## TABLA DE CONTINGENCIA - ESTRATO vs PERCEPCIÓN:
print(tabla)
##             
##              Seguro Inseguro
##   Bajo            8        7
##   Medio bajo    482      500
##   Medio alto    364      366
##   Alto          193      101
cat("\nPORCENTAJES POR ESTRATO:\n")
## 
## PORCENTAJES POR ESTRATO:
porcentajes <- prop.table(tabla, margin = 1) * 100
print(round(porcentajes, 1))
##             
##              Seguro Inseguro
##   Bajo         53.3     46.7
##   Medio bajo   49.1     50.9
##   Medio alto   49.9     50.1
##   Alto         65.6     34.4
# 3. Prueba Chi-cuadrado de independencia

cat("\nPRUEBA CHI-CUADRADO DE INDEPENDENCIA:\n")
## 
## PRUEBA CHI-CUADRADO DE INDEPENDENCIA:
chi_test <- chisq.test(tabla)
print(chi_test)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 26.589, df = 3, p-value = 7.179e-06
# 4. Interpretación

cat("\nINTERPRETACIÓN:\n")
## 
## INTERPRETACIÓN:
cat("Como el valor de p (0.000007179) es menor a alfa = 0.05 se tiene evidencia para rechazar Ho. Entonces lo más probable es que la percepción de seguridad al caminar por la noche DEPENDE del estrato social (las variables no son independientes)")
## Como el valor de p (0.000007179) es menor a alfa = 0.05 se tiene evidencia para rechazar Ho. Entonces lo más probable es que la percepción de seguridad al caminar por la noche DEPENDE del estrato social (las variables no son independientes)
# 5. Gráfica de barras apiladas

# Preparar datos para el gráfico (a partir de 'porcentajes')
datos_grafico <- as.data.frame(porcentajes)
colnames(datos_grafico) <- c("Estrato", "Percepcion", "Porcentaje")

datos_grafico$Percepcion <- factor(datos_grafico$Percepcion,
                                   levels = c("Seguro", "Inseguro"))

library(ggplot2)

ggplot(datos_grafico, aes(x = Estrato, y = Porcentaje, fill = Percepcion)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("Seguro" = "lightgreen", "Inseguro" = "lightcoral")) +
  labs(title = "Percepción de Seguridad al Caminar de Noche por Estrato en Coahuila",
       x = "Estrato social", 
       y = "Porcentaje (%)",
       fill = "Percepción") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5, face = "bold")) +
  geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), 
            position = position_stack(vjust = 0.5), size = 3)

# PREGUNTA 2: PRUEBA DE HIPÓTESIS con z.test
# "¿Podríamos inferir que difieren las medias de la percepción de seguridad en términos de delincuencia entre hombres y mujeres en el estado de Coahuila?"

library(BSDA)
## Loading required package: lattice
## 
## Attaching package: 'BSDA'
## The following object is masked from 'package:datasets':
## 
##     Orange
# Hipótesis:
# Ho: μ_hombres = μ_mujeres (El índice de seguridad es igual)
# Ha: μ_hombres > μ_mujeres (Los hombres tienen MAYOR índice de seguridad)

# Dividir la base de Coahuila en los dos grupos que queremos comparar: hombres y mujeres.
hombres = subset(Base_Coahuila,Base_Coahuila$SEXO==1)
mujeres = subset(Base_Coahuila,Base_Coahuila$SEXO==2)


# 1. Prueba de normalidad (Shapiro-Wilk) para decidir estadístico

shapiro.test(hombres$Indice_Seguridad)
## 
##  Shapiro-Wilk normality test
## 
## data:  hombres$Indice_Seguridad
## W = 0.90551, p-value < 2.2e-16
shapiro.test(mujeres$Indice_Seguridad)
## 
##  Shapiro-Wilk normality test
## 
## data:  mujeres$Indice_Seguridad
## W = 0.95543, p-value < 2.2e-16
# Interpretación de normalidad
# Segun el resultado de los valores p de la prueba de Normalidad (< 0.00000000000000022 para ambas), podemos concluir que las distribuciones del índice de seguridad para las mujeres y para los hombres de Coahuila no son normales. Sin embargo, debido al gran tamaño de muestra y bajo el Teorema del Límite Central, se recomienda que usemos el estadístico Z para la prueba de dos medias poblacionales.

# 2. Análisis Descriptivo: Estadísticos Descriptivos (Variable cuantitativa: Índice de Seguridad)

library(knitr)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
media=tapply(Base_Coahuila$Indice_Seguridad,Base_Coahuila$SEXO,function(x) round(mean(x), 5))
mediana=tapply(Base_Coahuila$Indice_Seguridad,Base_Coahuila$SEXO,function(x) round(median(x), 5))
desviacionstd=tapply(Base_Coahuila$Indice_Seguridad,Base_Coahuila$SEXO,function(x) round(sd(x), 5))
varianza = tapply(Base_Coahuila$Indice_Seguridad, Base_Coahuila$SEXO, function(x) round(var(x), 5))
descriptive<-data.frame(media,mediana,desviacionstd,varianza)
colnames(descriptive)=c("Media", "Mediana","Desviación Std", "Varianza")
rownames(descriptive)=c("Hombres", "Mujeres")
kable(descriptive, caption = "ESTADÍSTICOS DESCRIPTIVOS - ÍNDICE DE SEGURIDAD", format = "html") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE, color = "white", background = "#003f5c") %>%   # Encabezado azul
  row_spec(1, background = "#e1eff6") %>%                                 # Renglón 1
  row_spec(2, background = "#f5faff")%>%
  column_spec(1, width = "2cm") %>%
  column_spec(2, width = "3cm") %>%
  column_spec(3, width = "3cm") %>%
  column_spec(4, width = "3.2cm")%>%
  column_spec(5, width = "3cm")
ESTADÍSTICOS DESCRIPTIVOS - ÍNDICE DE SEGURIDAD
Media Mediana Desviación Std Varianza
Hombres 0.63611 0.66667 0.24200 0.05856
Mujeres 0.50040 0.50000 0.25679 0.06594
# 3. Prueba de Hipótesis con z.test

# Hipótesis:
# Ho: μ_hombres = μ_mujeres (El índice de seguridad es igual)
# Ha: μ_hombres > μ_mujeres (Los hombres tienen MAYOR índice de seguridad)

z_test = z.test(hombres$Indice_Seguridad, mujeres$Indice_Seguridad, conf.level=0.95, sigma.x=sd(hombres$Indice_Seguridad), sigma.y=sd(mujeres$Indice_Seguridad), alternative = "greater")

Z = z_test$statistic
valor_p = z_test$p.value
media1 = z_test$estimate[1]
media2 = z_test$estimate[2]

cat("\nRESUMEN PRUEBA DE HIPÓTESIS:\n")
## 
## RESUMEN PRUEBA DE HIPÓTESIS:
cat("Estadístico Z =", round(Z, 4), "\n")
## Estadístico Z = 14.0284
cat("Valor p =", format.pval(valor_p, digits = 6), "\n")
## Valor p = < 2.22e-16
cat("Media Hombres =", round(media1, 4), "\n")
## Media Hombres = 0.6361
cat("Media Mujeres =", round(media2, 4), "\n")
## Media Mujeres = 0.5004
cat("Diferencia =", round(media1 - media2, 4), "\n")
## Diferencia = 0.1357
cat("\nINTERPRETACIÓN:\n")
## 
## INTERPRETACIÓN:
cat("Como el valor de p (< 0.00000000000000022) es menor que alfa = 0.05, se tiene evidencia suficiente para rechazar Ho. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Coahuila el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres, es decir, la evidencia estadística soporta la hipótesis alternativa siendo lo más probable μ_hombres < μ_mujeres.")
## Como el valor de p (< 0.00000000000000022) es menor que alfa = 0.05, se tiene evidencia suficiente para rechazar Ho. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Coahuila el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres, es decir, la evidencia estadística soporta la hipótesis alternativa siendo lo más probable μ_hombres < μ_mujeres.
# 4. Análisis Descriptivo: Gráficas

densidad_hombres = density(hombres$Indice_Seguridad)
densidad_mujeres = density(mujeres$Indice_Seguridad)

# Encontrar la densidad máxima
densidad_max = max(max(densidad_hombres$y), max(densidad_mujeres$y))
y_lim_superior = densidad_max + 0.5

# Gráfica de densidad Hombres vs Mujeres

plot(density(hombres$Indice_Seguridad), col="blue", lwd = 3, 
     main = "Índice de Seguridad por Género en Coahuila",
     xlab = "Índice de Seguridad (0 = Inseguro, 1 = Seguro)",
     ylab = "Densidad de Probabilidad",
     xlim = c(0, 1), ylim = c(0, y_lim_superior),
     cex.main = 1.2, cex.lab = 1.1, font.lab = 2)

lines(density(mujeres$Indice_Seguridad), col = "magenta", lwd = 3)

# Líneas verticales para las medias
abline(v = media1, col = "blue", lty = 2, lwd = 2)
abline(v = media2, col = "magenta", lty = 2, lwd = 2)

legend("topright", 
       legend = c(paste("Hombres (μ =", round(media1, 4), ")"), 
                  paste("Mujeres (μ =", round(media2, 4), ")")),
       col = c("blue", "magenta"), lwd = 3, lty = 1,
       bty = "n", cex = 0.9)

grid(col = "gray80", lty = 3)

# PREGUNTA 2: INTERVALO DE CONFIANZA Z 
# "¿Podríamos inferir que difieren las medias de la percepción de seguridad en términos de delincuencia entre hombres y mujeres en el estado de Coahuila?"

library(BSDA)
z_test_2 = z.test(hombres$Indice_Seguridad, mujeres$Indice_Seguridad, conf.level=0.95, sigma.x=sd(hombres$Indice_Seguridad), sigma.y=sd(mujeres$Indice_Seguridad))

z_test_2
## 
##  Two-sample z-Test
## 
## data:  hombres$Indice_Seguridad and mujeres$Indice_Seguridad
## z = 14.028, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.1167473 0.1546678
## sample estimates:
## mean of x mean of y 
## 0.6361065 0.5003990
LI = z_test_2$conf.int[1]
LS = z_test_2$conf.int[2]
valor_p <- z_test_2$p.value

cat("\nRESUMEN INTERVALO DE CONFIANZA:\n")
## 
## RESUMEN INTERVALO DE CONFIANZA:
cat("Valor p =", format.pval(valor_p, digits = 6), "\n")
## Valor p = < 2.22e-16
cat("Intervalo de confianza al 95%: [", round(LI, 4), ",", round(LS, 4), "]\n\n")
## Intervalo de confianza al 95%: [ 0.1167 , 0.1547 ]
cat("\nINTERPRETACIÓN:\n")
## 
## INTERPRETACIÓN:
cat("Con base en la evidencia estadística (z.test), estimamos que la diferencia de las dos medias poblacionales podría encontrarse entre 0.1167 y 0.1547 con un 95% de confianza. Como el cero no está incluido dentro de los límites de este intervalo, lo más probable es que las medias poblacionales sean diferentes. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Coahuila el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres.")
## Con base en la evidencia estadística (z.test), estimamos que la diferencia de las dos medias poblacionales podría encontrarse entre 0.1167 y 0.1547 con un 95% de confianza. Como el cero no está incluido dentro de los límites de este intervalo, lo más probable es que las medias poblacionales sean diferentes. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Coahuila el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres.

SINALOA

# Preparación Base de Datos (Sinaloa)

library(readr)
library(dplyr)

# 1. Lectura de datos

Base = read.csv("conjunto_de_datos_tper_vic1_envipe2025.csv", encoding="UTF-8")

# 2. Filtrar Sinaloa y variable: Sexo, Estrato, Percepción de caminar en la noche y todas las de AP4_4-01 a AP4_4-12

Base_Sinaloa <- Base %>%
  filter(CVE_ENT == 25) %>%
  select(
    SEXO,
    ESTRATO,
    PERCEPCION_CAM = AP4_4_A,
    CASA = AP4_4_01,
    TRABAJO = AP4_4_02,
    CALLE = AP4_4_03,
    ESCUELA = AP4_4_04,
    MERCADO = AP4_4_05,
    CENTRO_COMERCIAL = AP4_4_06,
    BANCO = AP4_4_07,
    CAJERO = AP4_4_08,
    TRANSPORTE_PUBLICO = AP4_4_09,
    AUTOMOVIL = AP4_4_10,
    CARRETERA = AP4_4_11,
    CENTRO_RECREATIVO = AP4_4_12
  )

# 3. Verificar datos faltantes

summary(Base_Sinaloa) #Si alguna variable tiene datos faltantes se marcarán en el resumen estadístico después del máximo.
##       SEXO          ESTRATO      PERCEPCION_CAM       CASA      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:2.000   1st Qu.:2.000   1st Qu.:1.000  
##  Median :2.000   Median :2.000   Median :3.000   Median :1.000  
##  Mean   :1.545   Mean   :2.523   Mean   :2.817   Mean   :1.135  
##  3rd Qu.:2.000   3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.:1.000  
##  Max.   :2.000   Max.   :4.000   Max.   :9.000   Max.   :9.000  
##     TRABAJO          CALLE          ESCUELA         MERCADO     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:3.000   1st Qu.:1.000  
##  Median :2.000   Median :2.000   Median :3.000   Median :2.000  
##  Mean   :1.874   Mean   :1.613   Mean   :2.873   Mean   :1.638  
##  3rd Qu.:3.000   3rd Qu.:2.000   3rd Qu.:3.000   3rd Qu.:2.000  
##  Max.   :9.000   Max.   :9.000   Max.   :9.000   Max.   :3.000  
##  CENTRO_COMERCIAL     BANCO           CAJERO      TRANSPORTE_PUBLICO
##  Min.   :1.000    Min.   :1.000   Min.   :1.000   Min.   :1.000     
##  1st Qu.:1.000    1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000     
##  Median :1.000    Median :2.000   Median :2.000   Median :2.000     
##  Mean   :1.555    Mean   :1.779   Mean   :1.842   Mean   :1.927     
##  3rd Qu.:2.000    3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:3.000     
##  Max.   :9.000    Max.   :3.000   Max.   :3.000   Max.   :9.000     
##    AUTOMOVIL       CARRETERA     CENTRO_RECREATIVO
##  Min.   :1.000   Min.   :1.000   Min.   :1.000    
##  1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000    
##  Median :1.000   Median :2.000   Median :2.000    
##  Mean   :1.503   Mean   :1.694   Mean   :1.885    
##  3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:2.000    
##  Max.   :9.000   Max.   :9.000   Max.   :9.000
# 4. Ver estructura de la base

cat("\nEstructura Base de Datos Sinaloa:\n")
## 
## Estructura Base de Datos Sinaloa:
glimpse(Base_Sinaloa)
## Rows: 3,527
## Columns: 15
## $ SEXO               <int> 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, …
## $ ESTRATO            <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, …
## $ PERCEPCION_CAM     <int> 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, 3, 2, 2, …
## $ CASA               <int> 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ TRABAJO            <int> 1, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, …
## $ CALLE              <int> 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, …
## $ ESCUELA            <int> 3, 2, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 1, …
## $ MERCADO            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ CENTRO_COMERCIAL   <int> 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ BANCO              <int> 1, 2, 1, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ CAJERO             <int> 2, 2, 1, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, …
## $ TRANSPORTE_PUBLICO <int> 3, 2, 3, 2, 1, 3, 3, 1, 1, 1, 3, 3, 3, 1, 2, 1, 1, …
## $ AUTOMOVIL          <int> 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, …
## $ CARRETERA          <int> 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, …
## $ CENTRO_RECREATIVO  <int> 1, 1, 1, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, …
# ÍNDICE DE PERCEPCIÓN DE SEGURIDAD - SINALOA

# 5. Obtener el índice de seguridad con base en la pregunta 4.4 sobre la percepción de seguridad en cuanto a delincuencia (una nueva columna de la proporción de 1=seguros de la pregunta APA4.4)

Base_Sinaloa$Suma_Seguros2 <- 
  as.numeric(Base_Sinaloa$CASA == 1) +
  as.numeric(Base_Sinaloa$TRABAJO == 1) + 
  as.numeric(Base_Sinaloa$CALLE == 1) + 
  as.numeric(Base_Sinaloa$ESCUELA == 1) +
  as.numeric(Base_Sinaloa$MERCADO == 1) +
  as.numeric(Base_Sinaloa$CENTRO_COMERCIAL == 1) +
  as.numeric(Base_Sinaloa$BANCO == 1) +
  as.numeric(Base_Sinaloa$CAJERO == 1) +
  as.numeric(Base_Sinaloa$TRANSPORTE_PUBLICO == 1) +
  as.numeric(Base_Sinaloa$AUTOMOVIL == 1) +
  as.numeric(Base_Sinaloa$CARRETERA == 1) +
  as.numeric(Base_Sinaloa$CENTRO_RECREATIVO == 1)

# Proporción de lugares seguros
Base_Sinaloa$Indice_Seguridad2 <- Base_Sinaloa$Suma_Seguros2 / 12

# Observar que se añadió la nueva variable (Indice_Seguridad)
names(Base_Sinaloa)
##  [1] "SEXO"               "ESTRATO"            "PERCEPCION_CAM"    
##  [4] "CASA"               "TRABAJO"            "CALLE"             
##  [7] "ESCUELA"            "MERCADO"            "CENTRO_COMERCIAL"  
## [10] "BANCO"              "CAJERO"             "TRANSPORTE_PUBLICO"
## [13] "AUTOMOVIL"          "CARRETERA"          "CENTRO_RECREATIVO" 
## [16] "Suma_Seguros2"      "Indice_Seguridad2"
# Verificar el nuevo índice
cat("RESUMEN DEL ÍNDICE DE SEGURIDAD (0 = Inseguro, 1 = Seguro):\n")
## RESUMEN DEL ÍNDICE DE SEGURIDAD (0 = Inseguro, 1 = Seguro):
summary(Base_Sinaloa$Indice_Seguridad2)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.1667  0.4167  0.4192  0.6667  1.0000
# PREGUNTA 1: PRUEBA DE INDEPENDENCIA
# "En Sinaloa, ¿Podríamos inferir que hay independencia entre el estrato social y la percepción de la seguridad al caminar por la noche?

# Hipótesis:
# Ho: La percepción de seguridad ES INDEPENDIENTE del estrato social (No hay relación entre el estrato y qué tan seguro/inseguro se percibe)
# Ha: La percepción de seguridad DEPENDE del estrato social (Existe relación entre el estrato y qué tan seguro/inseguro se percibe)

library(tidyr)

# 1. Crear base para análisis

# Estrato: 1–4
Base_Sinaloa$Estrato_cat2 <- ifelse(Base_Sinaloa$ESTRATO == 1, "Bajo",
                             ifelse(Base_Sinaloa$ESTRATO == 2, "Medio bajo",
                             ifelse(Base_Sinaloa$ESTRATO == 3, "Medio alto",
                             ifelse(Base_Sinaloa$ESTRATO == 4, "Alto", NA))))

# Percepción de seguridad al caminar por la noche (PERCEPCION_CAM)
# 2 = Seguro, 3 = Inseguro
Base_Sinaloa$Percep_noche2 <- ifelse(Base_Sinaloa$PERCEPCION_CAM == 2, "Seguro",
                              ifelse(Base_Sinaloa$PERCEPCION_CAM == 3, "Inseguro", NA))

# Nos quedamos solo con casos válidos (no nulos)
datos2 <- subset(Base_Sinaloa,
                !is.na(Estrato_cat2) & !is.na(Percep_noche2))

# Acomodamos el orden de las categorías
datos2$Estrato_cat2  <- factor(datos2$Estrato_cat2,
                             levels = c("Bajo","Medio bajo","Medio alto","Alto"))
datos2$Percep_noche2 <- factor(datos2$Percep_noche2,
                             levels = c("Seguro","Inseguro"))


# 2. Tabla de contingencia

tabla2 <- table(datos2$Estrato_cat2, datos2$Percep_noche2)

cat("TABLA DE CONTINGENCIA - ESTRATO vs PERCEPCIÓN:\n")
## TABLA DE CONTINGENCIA - ESTRATO vs PERCEPCIÓN:
print(tabla2)
##             
##              Seguro Inseguro
##   Bajo          114      133
##   Medio bajo    585      547
##   Medio alto    387      474
##   Alto          144      181
cat("\nPORCENTAJES POR ESTRATO:\n")
## 
## PORCENTAJES POR ESTRATO:
porcentajes2 <- prop.table(tabla2, margin = 1) * 100
print(round(porcentajes2, 1))
##             
##              Seguro Inseguro
##   Bajo         46.2     53.8
##   Medio bajo   51.7     48.3
##   Medio alto   44.9     55.1
##   Alto         44.3     55.7
# 3. Prueba Chi-cuadrado de independencia

cat("\nPRUEBA CHI-CUADRADO DE INDEPENDENCIA:\n")
## 
## PRUEBA CHI-CUADRADO DE INDEPENDENCIA:
chi_test2 <- chisq.test(tabla2)
print(chi_test2)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla2
## X-squared = 11.461, df = 3, p-value = 0.009476
# 4. Interpretación

cat("\nINTERPRETACIÓN:\n")
## 
## INTERPRETACIÓN:
cat("Como el valor de p (0.009476) es menor a alfa = 0.05 se tiene evidencia para rechazar Ho. Entonces lo más probable es que la percepción de seguridad al caminar por la noche DEPENDE del estrato social (las variables no son independientes)")
## Como el valor de p (0.009476) es menor a alfa = 0.05 se tiene evidencia para rechazar Ho. Entonces lo más probable es que la percepción de seguridad al caminar por la noche DEPENDE del estrato social (las variables no son independientes)
# 5. Gráfica de barras apiladas

# Preparar datos para el gráfico (a partir de 'porcentajes')
datos_grafico2 <- as.data.frame(porcentajes2)
colnames(datos_grafico2) <- c("Estrato", "Percepcion", "Porcentaje")

datos_grafico2$Percepcion <- factor(datos_grafico2$Percepcion,
                                   levels = c("Seguro", "Inseguro"))

library(ggplot2)

ggplot(datos_grafico2, aes(x = Estrato, y = Porcentaje, fill = Percepcion)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("Seguro" = "lightgreen", "Inseguro" = "lightcoral")) +
  labs(title = "Percepción de Seguridad al Caminar de Noche por Estrato en Sinaloa",
       x = "Estrato social", 
       y = "Porcentaje (%)",
       fill = "Percepción") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5, face = "bold")) +
  geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), 
            position = position_stack(vjust = 0.5), size = 3)

# PREGUNTA 2: PRUEBA DE HIPÓTESIS con z.test
# "¿Podríamos inferir que difieren las medias de la percepción de seguridad en términos de delincuencia entre hombres y mujeres en el estado de Sinaloa?"

library(BSDA)

# Hipótesis:
# Ho: μ_hombres = μ_mujeres (El índice de seguridad es igual)
# Ha: μ_hombres > μ_mujeres (Los hombres tienen MAYOR índice de seguridad)

# Dividir la base de Sinaloa en los dos grupos que queremos comparar: hombres y mujeres.
hombres2 = subset(Base_Sinaloa,Base_Sinaloa$SEXO==1)
mujeres2 = subset(Base_Sinaloa,Base_Sinaloa$SEXO==2)


# 1. Prueba de normalidad (Shapiro-Wilk) para decidir estadístico

shapiro.test(hombres2$Indice_Seguridad2)
## 
##  Shapiro-Wilk normality test
## 
## data:  hombres2$Indice_Seguridad2
## W = 0.92716, p-value < 2.2e-16
shapiro.test(mujeres2$Indice_Seguridad2)
## 
##  Shapiro-Wilk normality test
## 
## data:  mujeres2$Indice_Seguridad2
## W = 0.92399, p-value < 2.2e-16
# Interpretación de normalidad
# Segun el resultado de los valores p de la prueba de Normalidad (< 0.00000000000000022 para ambas), podemos concluir que las distribuciones del índice de seguridad para las mujeres y para los hombres de Sinaloa no son normales. Sin embargo, debido al gran tamaño de muestra y bajo el Teorema del Límite Central, se recomienda que usemos el estadístico Z para la prueba de dos medias poblacionales.

# 2. Análisis Descriptivo: Estadísticos Descriptivos (Variable cuantitativa: Índice de Seguridad)

library(knitr)
library(kableExtra)
media2=tapply(Base_Sinaloa$Indice_Seguridad2,Base_Sinaloa$SEXO,function(x) round(mean(x), 5))
mediana2=tapply(Base_Sinaloa$Indice_Seguridad2,Base_Sinaloa$SEXO,function(x) round(median(x), 5))
desviacionstd2=tapply(Base_Sinaloa$Indice_Seguridad2,Base_Sinaloa$SEXO,function(x) round(sd(x), 5))
varianza2 = tapply(Base_Sinaloa$Indice_Seguridad2, Base_Sinaloa$SEXO, function(x) round(var(x), 5))
descriptive<-data.frame(media2,mediana2,desviacionstd2,varianza2)
colnames(descriptive)=c("Media", "Mediana","Desviación Std", "Varianza")
rownames(descriptive)=c("Hombres", "Mujeres")
kable(descriptive, caption = "ESTADÍSTICOS DESCRIPTIVOS - ÍNDICE DE SEGURIDAD", format = "html") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE, color = "white", background = "#003f5c") %>%   # Encabezado azul
  row_spec(1, background = "#e1eff6") %>%                                 # Renglón 1
  row_spec(2, background = "#f5faff")%>%
  column_spec(1, width = "2cm") %>%
  column_spec(2, width = "3cm") %>%
  column_spec(3, width = "3cm") %>%
  column_spec(4, width = "3.2cm")%>%
  column_spec(5, width = "3cm")
ESTADÍSTICOS DESCRIPTIVOS - ÍNDICE DE SEGURIDAD
Media Mediana Desviación Std Varianza
Hombres 0.49019 0.50000 0.30530 0.09321
Mujeres 0.35993 0.33333 0.27318 0.07463
# 3. Prueba de Hipótesis con z.test

# Hipótesis:
# Ho: μ_hombres = μ_mujeres (El índice de seguridad es igual)
# Ha: μ_hombres > μ_mujeres (Los hombres tienen MAYOR índice de seguridad)

z_test2 = z.test(hombres2$Indice_Seguridad2, mujeres2$Indice_Seguridad2, conf.level=0.95, sigma.x=sd(hombres2$Indice_Seguridad2), sigma.y=sd(mujeres2$Indice_Seguridad2), alternative = "greater")

Z2 = z_test2$statistic
valor_p2 = z_test2$p.value
media1_2 = z_test2$estimate[1]
media2_2 = z_test2$estimate[2]

cat("\nRESUMEN PRUEBA DE HIPÓTESIS:\n")
## 
## RESUMEN PRUEBA DE HIPÓTESIS:
cat("Estadístico Z =", round(Z2, 4), "\n")
## Estadístico Z = 13.2343
cat("Valor p =", format.pval(valor_p2, digits = 6), "\n")
## Valor p = < 2.22e-16
cat("Media Hombres =", round(media1_2, 4), "\n")
## Media Hombres = 0.4902
cat("Media Mujeres =", round(media2_2, 4), "\n")
## Media Mujeres = 0.3599
cat("Diferencia =", round(media1_2 - media2_2, 4), "\n")
## Diferencia = 0.1303
cat("\nINTERPRETACIÓN:\n")
## 
## INTERPRETACIÓN:
cat("Como el valor de p (< 0.000000000000000222) es menor que alfa = 0.05, se tiene evidencia suficiente para rechazar Ho. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Sinaloa el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres, es decir, la evidencia estadística soporta la hipótesis alternativa siendo lo más probable μ_hombres < μ_mujeres.")
## Como el valor de p (< 0.000000000000000222) es menor que alfa = 0.05, se tiene evidencia suficiente para rechazar Ho. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Sinaloa el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres, es decir, la evidencia estadística soporta la hipótesis alternativa siendo lo más probable μ_hombres < μ_mujeres.
# 4. Análisis Descriptivo: Gráficas

densidad_hombres2 = density(hombres2$Indice_Seguridad2)
densidad_mujeres2 = density(mujeres2$Indice_Seguridad2)

# Encontrar la densidad máxima
densidad_max2 = max(max(densidad_hombres2$y), max(densidad_mujeres2$y))
y_lim_superior2 = densidad_max2 + 0.5

# Gráfica de densidad Hombres vs Mujeres

plot(density(hombres2$Indice_Seguridad2), col="blue", lwd = 3, 
     main = "Índice de Seguridad por Género en Sinaloa",
     xlab = "Índice de Seguridad (0 = Inseguro, 1 = Seguro)",
     ylab = "Densidad de Probabilidad",
     xlim = c(0, 1), ylim = c(0, y_lim_superior2),
     cex.main = 1.2, cex.lab = 1.1, font.lab = 2)

lines(density(mujeres2$Indice_Seguridad2), col = "magenta", lwd = 3)

# Líneas verticales para las medias
abline(v = media1_2, col = "blue", lty = 2, lwd = 2)
abline(v = media2_2, col = "magenta", lty = 2, lwd = 2)

legend("topright", 
       legend = c(paste("Hombres (μ =", round(media1_2, 4), ")"), 
                  paste("Mujeres (μ =", round(media2_2, 4), ")")),
       col = c("blue", "magenta"), lwd = 3, lty = 1,
       bty = "n", cex = 0.9)

grid(col = "gray80", lty = 3)

# PREGUNTA 2: INTERVALO DE CONFIANZA Z 
# "¿Podríamos inferir que difieren las medias de la percepción de seguridad en términos de delincuencia entre hombres y mujeres en el estado de Sinaloa?"

library(BSDA)
z_test_22 = z.test(hombres2$Indice_Seguridad2, mujeres2$Indice_Seguridad2, conf.level=0.95, sigma.x=sd(hombres2$Indice_Seguridad2), sigma.y=sd(mujeres2$Indice_Seguridad2))

z_test_22
## 
##  Two-sample z-Test
## 
## data:  hombres2$Indice_Seguridad2 and mujeres2$Indice_Seguridad2
## z = 13.234, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.1109754 0.1495599
## sample estimates:
## mean of x mean of y 
## 0.4901930 0.3599254
LI2 = z_test_22$conf.int[1]
LS2 = z_test_22$conf.int[2]
valor_p2 <- z_test_22$p.value

cat("\nRESUMEN INTERVALO DE CONFIANZA:\n")
## 
## RESUMEN INTERVALO DE CONFIANZA:
cat("Valor p =", format.pval(valor_p2, digits = 6), "\n")
## Valor p = < 2.22e-16
cat("Intervalo de confianza al 95%: [", round(LI2, 4), ",", round(LS2, 4), "]\n\n")
## Intervalo de confianza al 95%: [ 0.111 , 0.1496 ]
cat("\nINTERPRETACIÓN:\n")
## 
## INTERPRETACIÓN:
cat("Con base en la evidencia estadística (z.test), estimamos que la diferencia de las dos medias poblacionales podría encontrarse entre 0.111 y 0.1496 con un 95% de confianza. Como el cero no está incluido dentro de los límites de este intervalo, lo más probable es que las medias poblacionales sean diferentes. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Sinaloa el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres.")
## Con base en la evidencia estadística (z.test), estimamos que la diferencia de las dos medias poblacionales podría encontrarse entre 0.111 y 0.1496 con un 95% de confianza. Como el cero no está incluido dentro de los límites de este intervalo, lo más probable es que las medias poblacionales sean diferentes. Por lo tanto, con un nivel de significancia del 5%, concluimos que lo más probable es que en Sinaloa el índice de seguridad en términos de delincuencia de los hombres es MAYOR en comparación con las mujeres.