library(openxlsx)
library(dplyr)
library(gt)

1.Carga de datos


setwd("/cloud/project/") 
datos<-read.csv("DerramesEEUU.csv", header = TRUE, sep=";" , dec=",",na.strings ="-") 

2.Extracción de datos

AnioAccidente <- as.numeric(datos$AnioAccidente)

# ELIMINAR SOLO 2017
AnioAccidente <- AnioAccidente[AnioAccidente != 2017]

2.1 Distribución de Frecuencias


TDFAnioAccidente <- table(AnioAccidente)
TablaAnioAccidente <- as.data.frame(TDFAnioAccidente)
names(TablaAnioAccidente) <- c("Anio","ni")

TablaAnioAccidente$hi_porc <- round((TablaAnioAccidente$ni /
                                      sum(TablaAnioAccidente$ni))*100,2)

TablaAnioAccidente$Ni_asc <- cumsum(TablaAnioAccidente$ni)
TablaAnioAccidente$Ni_dsc <- rev(cumsum(rev(TablaAnioAccidente$ni)))
TablaAnioAccidente$Hi_asc <- round(cumsum(TablaAnioAccidente$hi_porc),3)
TablaAnioAccidente$Hi_dsc <- round(rev(cumsum(rev(TablaAnioAccidente$hi_porc))),3)

TDFFinalAnioAccidente <- rbind(
  TablaAnioAccidente,
  data.frame(
    Anio="TOTAL",
    ni=sum(TablaAnioAccidente$ni),
    hi_porc=100,
    Ni_asc=" ",
    Ni_dsc=" ",
    Hi_asc=" ",
    Hi_dsc=" "
  )
)

Tabla

TDFFinalAnioAccidente %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1**"),
    subtitle = md("Distribución de accidentes por año")
  )
Tabla N°1
Distribución de accidentes por año
Anio ni hi_porc Ni_asc Ni_dsc Hi_asc Hi_dsc
2010 346 12.55 346 2758 12.55 100
2011 336 12.18 682 2412 24.73 87.45
2012 362 13.13 1044 2076 37.86 75.27
2013 400 14.50 1444 1714 52.36 62.14
2014 447 16.21 1891 1314 68.57 47.64
2015 453 16.42 2344 867 84.99 31.43
2016 414 15.01 2758 414 100 15.01
TOTAL 2758 100.00

3.Gráfica

par(mar=c(6,6,4,2))

barplot(TablaAnioAccidente$ni,
        main="Gráfica No.1: Cantidad de accidentes por año",
        xlab="Año",
        ylab="Cantidad",
        col="slategray1",
        names.arg=TablaAnioAccidente$Anio,
        las=1)

4.Conjetura del modelo

4.1 Segundo período (2014–2017): Modelo Poisson


Accidentes_2014_2017 <- subset(
  AnioAccidente,
  AnioAccidente >= 2014 & AnioAccidente <= 2017
)

TDF_2014_2017 <- table(Accidentes_2014_2017)
Tabla_2014_2017 <- as.data.frame(TDF_2014_2017)
names(Tabla_2014_2017) <- c("Anio","ni2")

Tabla_2014_2017$hi2 <-
  Tabla_2014_2017$ni2 /
  sum(Tabla_2014_2017$ni2)

Gráfica

barplot(Tabla_2014_2017$hi2,
        main="Gráfica No.5: Probabilidad (2014–2017)",
        xlab="Año",
        ylab="Probabilidad",
        names.arg=Tabla_2014_2017$Anio,
        col="slategray2")

4.2.1 Modelo Poisson

Tabla_2014_2017$Clase <- 1:nrow(Tabla_2014_2017)

lambda <- sum(Tabla_2014_2017$Clase*Tabla_2014_2017$ni2) /
          sum(Tabla_2014_2017$ni2)

Fe_p <- dpois(Tabla_2014_2017$Clase,lambda)
Fo_p <- Tabla_2014_2017$hi2

barplot(rbind(Fo_p,Fe_p),
        beside=TRUE,
        main="Gráfica No.6: Poisson vs Observado",
        xlab="Año",
        ylab="Probabilidad",
        names.arg=Tabla_2014_2017$Anio,
        col=c("slategray2","skyblue4"))

legend("topright",
       legend=c("Observado","Poisson"),
       fill=c("slategray2","skyblue4"))

4.2.2 Tests del Modelo Poisson

Pearson

Correlacion_p <- cor(Fo_p,Fe_p)*100

cat("Correlación Poisson =",Correlacion_p,"%")
## Correlación Poisson = 98.47304 %

Gráfica de correlación

plot(Fo_p,Fe_p,
     main="Gráfica No.7: Correlación modelo Poisson",
     xlab="Frecuencia Observada",
     ylab="Frecuencia Esperada",
     col="slategray2",
     pch=19)

abline(lm(Fe_p~Fo_p),col="red",lwd=2)

Chi-cuadrado

x2_p <- sum((Fo_p-Fe_p)^2/Fe_p)
gl_p <- (nrow(Tabla_2014_2017)-1)-1
umbral_p <- qchisq(0.95,gl_p)

cat("Chi2 =",x2_p,"\n")
## Chi2 = 0.1414731
cat("Umbral =",umbral_p)
## Umbral = 3.841459

5.Conclusión

Para el período 2014–2017, el modelo de Poisson mostró un excelente ajuste a los datos, con una correlación de Pearson del 98.47 % y un estadístico de chi-cuadrado de 0.141, muy inferior al valor crítico de 3.84. Estos resultados indican que la distribución de Poisson representa adecuadamente el comportamiento de los accidentes en este intervalo.