database <- read.csv("database-_1_.csv", header = TRUE, sep = ",", dec = ".", check.names = FALSE)
raw_years <- database$`Accident Year`
raw_years <- raw_years[raw_years != ""]
raw_years <- na.omit(raw_years)
years_obj <- floor(as.numeric(as.character(raw_years)))
## Warning: NAs introducidos por coerción
years_num <- as.numeric(years_obj)
years_num <- na.omit(years_num)
years_obj <- years_obj[!is.na(years_num)]
valid_indices <- years_num > 1900 & years_num <= 2025
years_num <- years_num[valid_indices]
years_obj <- years_obj[valid_indices]
#tabla de frecuencia
datos <- read.csv("database-_1_.csv", stringsAsFactors = FALSE)
anios_limpios <- floor(as.numeric(datos$Accident.Year))
## Warning: NAs introducidos por coerción
anios_limpios <- anios_limpios[!is.na(anios_limpios)]
tabla_base <- table(anios_limpios)
ni <- as.vector(tabla_base)
Magnitud <- names(tabla_base)
hi <- round(ni/sum(ni)*100, 2)
diferencia <- 100 - sum(hi)
if(diferencia != 0){
indice_max <- which.max(ni)
hi[indice_max] <- hi[indice_max] + diferencia
}
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))
TDFMagnitudFin <- data.frame(Magnitud, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
library(knitr)
kable(TDFMagnitudFin,
caption = "Tabla de Frecuencias: Accident Year",
align = "c",
col.names = c("Año", "ni", "hi (%)", "Ni Asc", "Ni Dsc", "Hi Asc", "Hi Dsc"))
Tabla de Frecuencias: Accident Year
| 2010 |
350 |
12.53 |
350 |
2793 |
12.53 |
100.00 |
| 2011 |
345 |
12.35 |
695 |
2443 |
24.88 |
87.47 |
| 2012 |
366 |
13.10 |
1061 |
2098 |
37.98 |
75.12 |
| 2013 |
401 |
14.36 |
1462 |
1732 |
52.34 |
62.02 |
| 2014 |
454 |
16.25 |
1916 |
1331 |
68.59 |
47.66 |
| 2015 |
576 |
20.63 |
2492 |
877 |
89.22 |
31.41 |
| 2016 |
301 |
10.78 |
2793 |
301 |
100.00 |
10.78 |
#Histograma global ni
library(ggplot2)
##
## Adjuntando el paquete: 'ggplot2'
## The following object is masked from 'package:e1071':
##
## element
TDFMagnitudFin$Magnitud <- as.numeric(as.character(TDFMagnitudFin$Magnitud))
total_ni <- sum(TDFMagnitudFin$ni)
max_ni <- max(TDFMagnitudFin$ni)
A <- 0.9
p_global <- ggplot(TDFMagnitudFin, aes(x = Magnitud, y = ni)) +
geom_col(fill = "steelblue", color = "black", alpha = 0.8, width = A, linewidth = 0.5) +
geom_text(aes(label = ni),
vjust = -0.5, color = "black", fontface = "bold", size = 3.5) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, total_ni * 1.1),
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 1: Distribución Temporal Global",
subtitle = paste("Frecuencia respecto al Total Acumulado (N =", total_ni, ")"),
x = "Año", y = "Cantidad de Accidentes") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black"),
axis.line = element_line(linewidth = 0.5, color = "black")
)
p_local <- ggplot(TDFMagnitudFin, aes(x = Magnitud, y = ni)) +
geom_col(fill = "forestgreen", color = "black", alpha = 0.7, width = A, linewidth = 0.5) +
geom_text(aes(label = ni), vjust = -0.5, color = "black", fontface = "bold", size = 3.5) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, max_ni * 1.15),
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 2: Distribución Temporal Local",
subtitle = "Detalle de Frecuencias por Año",
x = "Año", y = "Cantidad de Accidentes") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black")
)
print(p_global)

#Histograma local ni
A <- 0.9
max_ni <- max(TDFMagnitudFin$ni)
p_ni_local <- ggplot(TDFMagnitudFin, aes(x = Magnitud, y = ni)) +
geom_col(fill = "steelblue", color = "black", alpha = 0.8, width = A, linewidth = 0.5) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, max_ni * 1.05),
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 2: Distribución Temporal Local",
subtitle = "Frecuencia Absoluta (ni) por Año",
x = "Año",
y = "Cantidad") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 13),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black"),
axis.text.y = element_text(color = "black"),
axis.line = element_line(linewidth = 0.5, color = "black")
)
print(p_ni_local)

#Histograma global hi
library(ggplot2)
total_hi <- sum(TDFMagnitudFin$hi)
A <- 0.9
p_hi_global <- ggplot(TDFMagnitudFin, aes(x = Magnitud, y = hi)) +
geom_col(fill = "steelblue", color = "black", alpha = 0.8, width = A, linewidth = 0.5) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, total_hi * 1.1),
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 3: Distribución Temporal Global",
x = "Año",
y = "Porcentaje (%)") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black"),
axis.line = element_line(linewidth = 0.5, color = "black")
)
print(p_hi_global)

#Histograma_localhi
library(ggplot2)
max_hi <- max(TDFMagnitudFin$hi)
A <- 0.9
p_hi_local <- ggplot(TDFMagnitudFin, aes(x = Magnitud, y = hi)) +
# Barras
geom_col(fill = "steelblue", color = "black", alpha = 0.8, width = A, linewidth = 0.5) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, max_hi * 1.1),
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 4: Distribución Temporal Local (%)",
subtitle = "Frecuencia Relativa (hi) por Año",
x = "Año",
y = "Porcentaje (%)") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 13),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black"),
axis.text.y = element_text(color = "black"),
axis.line = element_line(linewidth = 0.5, color = "black")
)
print(p_hi_local)

#Ojivas combinadas de la frecuencia Ni
library(ggplot2)
total_n <- max(TDFMagnitudFin$Ni_asc)
p_ojiva_ni <- ggplot(TDFMagnitudFin, aes(x = Magnitud)) +
geom_line(aes(y = Ni_asc, color = "Ni Ascendente"), linewidth = 1) +
geom_point(aes(y = Ni_asc, color = "Ni Ascendente"), size = 2.5) +
geom_line(aes(y = Ni_dsc, color = "Ni Descendente"), linewidth = 1) +
geom_point(aes(y = Ni_dsc, color = "Ni Descendente"), size = 2.5) +
scale_color_manual(name = "Tipo de Acumulado",
values = c("Ni Ascendente" = "steelblue",
"Ni Descendente" = "firebrick")) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, total_n * 1.05), # Un 5% extra arriba
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 5: Ojivas Combinadas (Ni)",
subtitle = "Frecuencias Acumuladas Ascendente y Descendente",
x = "Año",
y = "Cantidad Acumulada (Ni)") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black"),
legend.position = "bottom", # Leyenda en la parte inferior
axis.line = element_line(linewidth = 0.5, color = "black")
)
print(p_ojiva_ni)

#Ojivas combinadas de la frecuencia hi
library(ggplot2)
ymax <- 105
p_ojiva_hi <- ggplot(TDFMagnitudFin, aes(x = Magnitud)) +
geom_line(aes(y = Hi_asc, color = "Hi Ascendente"), linewidth = 1) +
geom_point(aes(y = Hi_asc, color = "Hi Ascendente"), size = 2.5) +
geom_line(aes(y = Hi_dsc, color = "Hi Descendente"), linewidth = 1) +
geom_point(aes(y = Hi_dsc, color = "Hi Descendente"), size = 2.5) +
scale_color_manual(name = "Tipo de Acumulado",
values = c("Hi Ascendente" = "steelblue",
"Hi Descendente" = "firebrick")) +
scale_x_continuous(breaks = TDFMagnitudFin$Magnitud) +
scale_y_continuous(limits = c(0, ymax),
expand = expansion(mult = c(0, 0))) +
labs(title = "Gráfica No 6: Ojivas Combinadas (Hi)",
subtitle = "Frecuencias Relativas Acumuladas (%)",
x = "Año",
y = "Porcentaje Acumulado") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
axis.text.x = element_text(angle = 45, hjust = 1, color = "black"),
legend.position = "bottom", # Leyenda abajo
axis.line = element_line(linewidth = 0.5, color = "black")
)
print(p_ojiva_hi)

#diagrama de cajas
library(ggplot2)
par(mar = c(5, 2, 4, 2))
boxplot(anios_limpios,
horizontal = TRUE,
col = "skyblue",
main = "Gráfica 7: Distribución de Años (Boxplot)",
xlab = "Año",
xaxt = "n",
outline = TRUE,
pch = 19,
outcol = "red")
axis(1,
at = sort(unique(anios_limpios)),
labels = sort(unique(anios_limpios)),
las = 2,
cex.axis = 0.8)
grid(nx = NULL, ny = NA, col = "lightgray", lty = "dotted")

library(e1071)
# 1. Rango (Mínimo y Máximo)
ri <- min(anios_limpios, na.rm = TRUE)
rs <- max(anios_limpios, na.rm = TRUE)
print(ri)
## [1] 2010
print(rs)
## [1] 2016
# 2. Mediana
mediana <- median(anios_limpios, na.rm = TRUE)
print(mediana)
## [1] 2013
# 3. Media Aritmética
media_aritmetica <- mean(anios_limpios, na.rm = TRUE)
print(media_aritmetica)
## [1] 2013.144
# 4. Moda (Calculada como el valor más frecuente)
t <- table(anios_limpios)
Mo <- as.numeric(names(t)[which.max(t)])
print(Mo)
## [1] 2015
# 5. Desviación Estándar
# Aquí es directo, el resultado es en "años"
desviacion_estandar <- sd(anios_limpios, na.rm = TRUE)
print(paste(round(desviacion_estandar, 2), "años"))
## [1] "1.92 años"
# 6. Coeficiente de Variabilidad
coeficiente_variabilidad <- (desviacion_estandar / media_aritmetica) * 100
print(coeficiente_variabilidad)
## [1] 0.09543073
# 7. Asimetría (Skewness)
As <- skewness(anios_limpios, na.rm = TRUE)
print(As)
## [1] -0.1947063
# 8. Curtosis
curtosis_val <- kurtosis(anios_limpios, na.rm = TRUE)
print(curtosis_val)
## [1] -1.180577
library(knitr)
# Preparamos los textos para la tabla
Variable <- "Accident Year"
Tabla_indicadores <- data.frame(
Variable,
ri, # Mínimo
rs, # Máximo
round(media_aritmetica, 2), # Media
mediana, # Mediana
Mo, # Moda
round(desviacion_estandar, 2), # S (Desviación)
round(coeficiente_variabilidad, 2),
round(As, 2),
round(curtosis_val, 2)
)
colnames(Tabla_indicadores) <- c("Variable","Mínimo","Máximo","x","Me","Mo","S (años)","Cv (%)","As","K")
# Imprimir Tabla
kable(Tabla_indicadores, format = "markdown", align = "c",
caption = "Tabla No. 1: Indicadores estadísticos de la variable Accident Year.")
Tabla No. 1: Indicadores estadísticos de la variable Accident
Year.
| Accident Year |
2010 |
2016 |
2013.14 |
2013 |
2015 |
1.92 |
0.1 |
-0.19 |
-1.18 |
# Usamos boxplot.stats sobre los años
stats_outliers <- boxplot.stats(anios_limpios)$out
# Contar los valores atípicos
num_outliers <- length(stats_outliers)
print(paste("Número de outliers:", num_outliers))
## [1] "Número de outliers: 0"
# Obtener Mínimo y Máximo Outlier (si existen)
minimooutliers <- if(num_outliers > 0) min(stats_outliers) else NA
maximooutliers <- if(num_outliers > 0) max(stats_outliers) else NA
# Imprimir resultados
if(num_outliers > 0){
print(paste("Outlier más bajo:", minimooutliers))
print(paste("Outlier más alto:", maximooutliers))
} else {
print("No existen valores atípicos.")
}
## [1] "No existen valores atípicos."
## El análisis de la variable 'Accident Year' abarca el periodo entre 2010 y 2016, evidenciando una tendencia central en torno al año 2013, siendo el 2015 el año con mayor frecuencia de siniestros. Los datos presentan una desviación estándar de 1.92 años respecto al promedio. La distribución muestra un coeficiente de asimetría de -0.19, indicando una mayor concentración de eventos en los años más recientes (sesgo negativo), y una curtosis de -1.18, lo que sugiere un comportamiento de tipo platicúrtica (datos dispersos). Finalmente, el diagrama de cajas descartó la existencia de valores atípicos, demostrando que la ocurrencia de accidentes se ha mantenido mayoritariamente dentro de los rangos estadísticos esperados.