#Originalmente, la variable Accident.State que identifica los estados se presentaba con una naturaleza cualitativa nominal, sirviendo únicamente como una etiqueta geográfica. Sin embargo, se optó por una transformación a variable cualitativa ordinal (Accidentes por nivel de riesgo en los estados) .Esta reclasificación se fundamenta en la densidad de accidentes acumulada, permitiendo establecer una jerarquía. Al categorizar los estados en siete niveles (desde "Muy bajo" hasta "Muy alto"), la variable adquiere un valor predictivo y comparativo, transformando datos de ubicación en un indicador de riesgo
cargar datos, librerias
y Diccionario de estados
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(ggplot2)
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
datos <- read.csv("database (1).csv", header = TRUE, sep = ",", dec = ".")
## diccionario de estados
estado_nombre <- c(
"AL"="Alabama","AK"="Alaska","AZ"="Arizona","AR"="Arkansas",
"CA"="California","CO"="Colorado","CT"="Connecticut",
"DE"="Delaware","FL"="Florida","GA"="Georgia","HI"="Hawaii",
"ID"="Idaho","IL"="Illinois","IN"="Indiana","IA"="Iowa",
"KS"="Kansas","KY"="Kentucky","LA"="Louisiana","ME"="Maine",
"MD"="Maryland","MA"="Massachusetts","MI"="Michigan",
"MN"="Minnesota","MS"="Mississippi","MO"="Missouri",
"MT"="Montana","NE"="Nebraska","NV"="Nevada",
"NH"="New Hampshire","NJ"="New Jersey","NM"="New Mexico",
"NY"="New York","NC"="North Carolina","ND"="North Dakota",
"OH"="Ohio","OK"="Oklahoma","OR"="Oregon",
"PA"="Pennsylvania","RI"="Rhode Island","SC"="South Carolina",
"SD"="South Dakota","TN"="Tennessee","TX"="Texas",
"UT"="Utah","VT"="Vermont","VA"="Virginia",
"WA"="Washington","WV"="West Virginia","WI"="Wisconsin",
"WY"="Wyoming"
)
Tabla de
frecuencia
freq_estado <- datos %>%
mutate(Estado = estado_nombre[Accident.State]) %>%
filter(!is.na(Estado)) %>%
count(Estado, name = "ni")
freq_estado <- freq_estado %>%
mutate(
Nivel_Riesgo = ntile(ni, 7),
Nivel_Riesgo = factor(
Nivel_Riesgo,
levels = 1:7,
labels = c("Muy bajo", "Bajo", "Medio-bajo", "Medio",
"Medio-alto", "Alto", "Muy alto"),
ordered = TRUE
)
)
tabla_final <- freq_estado %>%
group_by(Nivel_Riesgo) %>%
summarise(
Estados = paste(sort(Estado), collapse = ", "),
ni = sum(ni),
.groups = "drop"
) %>%
mutate(
hi = round((ni / sum(ni)) * 100, 2)
)
fila_total <- data.frame(
Nivel_Riesgo = "TOTAL",
Estados = "—",
ni = sum(tabla_final$ni),
hi = 100
)
tabla_resumen <- bind_rows(
tabla_final %>% mutate(Nivel_Riesgo = as.character(Nivel_Riesgo)),
fila_total
)
kable(
tabla_resumen,
col.names = c("Nivel de Riesgo", "Estados incluidos",
"Frecuencia absoluta (ni)", "Frecuencia relativa (%)"),
align = "clcc",
caption = "Tabla 1. Frecuencia de accidentes por nivel de riesgo"
) %>%
kable_styling(
full_width = FALSE,
position = "center",
bootstrap_options = c("striped", "hover", "condensed")
) %>%
row_spec(nrow(tabla_resumen), bold = TRUE)
Tabla 1. Frecuencia de accidentes por nivel de riesgo
|
Nivel de Riesgo
|
Estados incluidos
|
Frecuencia absoluta (ni)
|
Frecuencia relativa (%)
|
|
Muy bajo
|
Connecticut, Hawaii, Idaho, Maine, Massachusetts, Nevada, West Virginia
|
15
|
0.54
|
|
Bajo
|
Florida, Maryland, Oregon, South Dakota, Tennessee, Utah, Washington
|
51
|
1.83
|
|
Medio-bajo
|
Alaska, Arkansas, Georgia, Kentucky, New York, North Carolina, South
Carolina
|
100
|
3.59
|
|
Medio
|
Alabama, Colorado, Michigan, Nebraska, Virginia, Wisconsin
|
143
|
5.14
|
|
Medio-alto
|
Iowa, Mississippi, Missouri, Montana, North Dakota, Pennsylvania
|
244
|
8.77
|
|
Alto
|
Indiana, Minnesota, New Jersey, New Mexico, Ohio, Wyoming
|
409
|
14.70
|
|
Muy alto
|
California, Illinois, Kansas, Louisiana, Oklahoma, Texas
|
1820
|
65.42
|
|
TOTAL
|
—
|
2782
|
100.00
|
Graficas
Gráfica N1:
Distribución de accidentes por nivel de riesgo
datos_n1 <- tabla_final %>%
filter(Nivel_Riesgo != "TOTAL")
ggplot(datos_n1, aes(x = reorder(Nivel_Riesgo, -ni), y = ni)) +
geom_bar(stat = "identity", width = 0.7, fill = "#AED6F1", color = "black") +
labs(
title = "Gráfica N1. Clasificación de los accidentes por nivel de riesgo",
x = "Nivel de riesgo",
y = "cantidad"
) +
theme_classic() +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
axis.text = element_text(color = "black")
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)))

Gráfica N2:
Clasificación Global de Accidentes por Nivel de Riesgo
ggplot(datos_n1, aes(x = reorder(Nivel_Riesgo, -ni), y = ni)) +
geom_bar(stat = "identity", width = 0.7, fill = "#AED6F1", color = "black") +
labs(
title = "Gráfica N2. Distribución global de accidentes según nivel de riesgo",
x = "Nivel de riesgo",
y = "Cantidad"
) +
scale_y_continuous(
limits = c(0, 3000),
breaks = seq(0, 3000, 500), # marcas cada 500 (opcional, recomendado)
expand = c(0, 0)
) +
theme_classic() +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
axis.text = element_text(color = "black")
)

Gráfica N3:
Porcentaje global de accidentes por nivel de riesgo
datos_n3 <- tabla_final %>%
filter(Nivel_Riesgo != "TOTAL")
ggplot(datos_n3, aes(x = reorder(Nivel_Riesgo, -hi), y = hi)) +
geom_bar(stat = "identity", width = 0.7, fill = "#AED6F1", color = "black") +
labs(
title = "Gráfica N3. Distribución porcentual de los accidentes por nivel de riesgo",
x = "Nivel de riesgo",
y = "Porcentaje (%)"
) +
scale_y_continuous(
limits = c(0, 100),
breaks = seq(0, 100, 20),
expand = c(0, 0)
) +
theme_classic() +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
axis.text = element_text(color = "black")
)

Gráfica N4:
Porcentaje local de accidentes por nivel de riesgo
ggplot(datos_n3, aes(x = reorder(Nivel_Riesgo, -hi), y = hi)) +
geom_bar(stat = "identity", width = 0.7, fill = "#AED6F1", color = "black") +
labs(
title = "Gráfica N4. Distribución porcentual de los accidentes por nivel de riesgo",
x = "Nivel de riesgo",
y = "Porcentaje (%)"
) +
scale_y_continuous(
limits = c(0, 70),
breaks = seq(0, 70, 10),
expand = c(0, 0)
) +
theme_classic() +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
axis.text = element_text(color = "black")
)

Diagrama circular
Grafica N5: Diagrama
circular de accidentes por nivel de riesgo
datos_pie <- tabla_final %>%
filter(Nivel_Riesgo != "TOTAL") %>%
arrange(desc(hi)) %>%
mutate(
Leyenda_Pct = factor(
paste0(Nivel_Riesgo, " (", round(hi, 1), "%)"),
levels = paste0(Nivel_Riesgo, " (", round(hi, 1), "%)")
)
)
colores_suaves <- c(
"#2E86C1", "#3498DB", "#5DADE2",
"#85C1E9", "#AED6F1", "#D6EAF8", "#EBF5FB"
)[seq_len(nlevels(datos_pie$Leyenda_Pct))]
ggplot(datos_pie, aes(x = 1, y = hi, fill = Leyenda_Pct)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar(theta = "y") +
scale_fill_manual(values = colores_suaves) +
labs(
title = "Gráfica N5: Distribución porcentual de accidentes por nivel de riesgo",
fill = "Nivel de riesgo"
) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
legend.text = element_text(size = 10)
)

Indicadores
estadísticos
# 1. Preparar datos para el cálculo
datos_stats <- tabla_final %>%
filter(Nivel_Riesgo != "TOTAL") %>%
mutate(
Nivel_Riesgo = factor(Nivel_Riesgo,
levels = c("Muy bajo", "Bajo", "Medio-bajo", "Medio",
"Medio-alto", "Alto", "Muy alto"),
ordered = TRUE),
Hi_acum = cumsum(hi) # Frecuencia relativa acumulada para la Mediana
)
# 2. CÁLCULO DE LA MODA
moda_valor <- datos_stats %>%
slice_max(ni, n = 1) %>%
pull(Nivel_Riesgo)
# 3. CÁLCULO DE LA MEDIANA
mediana_valor <- datos_stats %>%
filter(Hi_acum >= 50) %>%
slice(1) %>%
pull(Nivel_Riesgo)
# 4. Mostrar resultados
stats_table <- data.frame(
Indicador = c("Moda", "Mediana"),
Valor = c(as.character(moda_valor), as.character(mediana_valor))
)
kable(stats_table,
caption = "Tabla de indicadores",
align = "lc") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "bordered"))
Tabla de indicadores
|
Indicador
|
Valor
|
|
Moda
|
Muy alto
|
|
Mediana
|
Muy alto
|
Conclusiones
El análisis estadístico revela que la Moda para la variable de
niveles de riesgo es ‘Muy alto’, con un total de 1,818 registros. Esto
representa el 65.04% de los accidentes totales, lo que evidencia una
alta concentración de accidentes en los estados de California, Illinois,
Kansas, Louisiana, Oklahoma, Texas . Asimismo, la Mediana de la
distribución se ubica en el nivel ‘Muy alto’. Esto indica que al menos
el 50% de los datos se encuentran en la categoría máxima de la
escala.