library(openxlsx)
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(gt)
1.Carga de datos
setwd("/cloud/project/")
datos<-read.csv("DerramesEEUU.csv", header = TRUE, sep=";" , dec=",",na.strings ="-")
str(datos)
## 'data.frame': 2760 obs. of 59 variables:
## $ NumeroInforme : int 20100064 20100054 20100092 20100098 20100101 20100102 20100113 20100120 20100039 20100150 ...
## $ NumeroComplementario : int 15072 15114 15120 15127 15130 15132 15146 15162 15197 15205 ...
## $ DiaAccidente : int 8 25 10 28 27 29 11 23 15 11 ...
## $ MesAccidente : int 4 3 5 4 5 5 6 5 3 1 ...
## $ AnioAccidente : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ HoraAccidente : int 6 13 6 24 3 14 7 6 15 2 ...
## $ AmPmAccidente : chr "a. m." "p. m." "a. m." "p. m." ...
## $ IDOperador : int 31684 18779 30829 12105 20160 30003 1248 300 18718 32296 ...
## $ NombreOperador : chr "CONOCOPHILLIPS" "SUNOCO, INC (R&M)" "TEPPCO CRUDE PIPELINE, LLC" "MAGELLAN AMMONIA PIPELINE, L.P." ...
## $ NombreOleoductoInstalacion : chr "GD-03, GOLD LINE" "PHILADELPHIA REFINERY - WEST YARD" "HOBBS TO MIDLAND" "WHITING TO EARLY SEGMENT" ...
## $ UbicacionOleoducto : chr "ONSHORE" "ONSHORE" "ONSHORE" "ONSHORE" ...
## $ TipoOleoducto : chr "ABOVEGROUND" "ABOVEGROUND" "UNDERGROUND" "UNDERGROUND" ...
## $ TipoLiquido : chr "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" "CRUDE OIL" "HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" ...
## $ SubtipoLiquido : chr "GASOLINE (NON-ETHANOL)" "OTHER" NA "ANHYDROUS AMMONIA" ...
## $ NombreLiquido : chr NA "VACUUM GAS OIL (VGO)" NA NA ...
## $ CiudadAccidente : chr "GREEN RIDGE" "PHILADELPHIA" "HOBBS" "SCHALLER" ...
## $ CondadoAccidente : chr "PETTIS" "PHILADELPHIA" "LEA" "IDA" ...
## $ EstadoAccidente : chr "MO" "PA" "NM" "IA" ...
## $ LatitudAccidente : num 38.6 39.9 32.6 42.5 30.2 ...
## $ LongitudAccidente : num -93.4 -75.2 -103.1 -95.3 -91.2 ...
## $ CategoriaCausa : chr "NATURAL FORCE DAMAGE" "MATERIAL/WELD/EQUIP FAILURE" "CORROSION" "MATERIAL/WELD/EQUIP FAILURE" ...
## $ SubcategoriaCausa : chr "TEMPERATURE" "NON-THREADED CONNECTION FAILURE" "EXTERNAL" "CONSTRUCTION, INSTALLATION OR FABRICATION-RELATED" ...
## $ LiberacionInvoluntariaBarriles : num 0.24 1700 2 0.36 1.31 ...
## $ LiberacionIntencionalBarriles : chr "0" "0" NA "0.05" ...
## $ RecuperacionLiquidoBarriles : num 0.07 1699 0.48 0 0 ...
## $ PerdidaNetaBarriles : num 0.17 1 1.52 0.36 1.31 ...
## $ IgnicionLiquido : chr "NO" "NO" "NO" "NO" ...
## $ ExplosionLiquido : chr "NO" "NO" "NO" "NO" ...
## $ CierreOleoducto : chr "YES" "YES" "NO" "NO" ...
## $ DiaCierre : int 8 25 NA NA 27 NA NA 23 15 11 ...
## $ MesCierre : int 4 3 NA NA 5 NA NA 5 3 1 ...
## $ AnioCierre : int 2010 2010 NA NA 2010 NA NA 2010 2010 2010 ...
## $ HoraCierre : int 6 18 NA NA 3 NA NA 7 16 2 ...
## $ AmPmCierre : chr "a. m." "p. m." NA NA ...
## $ DiaReinicio : int 9 28 NA NA 27 NA NA 23 15 15 ...
## $ MesReinicio : int 4 3 NA NA 5 NA NA 5 3 1 ...
## $ AnioReinicio : int 2010 2010 NA NA 2010 NA NA 2010 2010 2010 ...
## $ HoraReinicio : int 10 16 NA NA 24 NA NA 9 18 15 ...
## $ AmPmReinicio : chr "a. m." "p. m." NA NA ...
## $ EvacuacionesPublicas : int NA 0 NA NA 0 0 0 0 NA 0 ...
## $ LesionesEmpleadosOperador : int NA NA NA NA NA NA NA NA NA NA ...
## $ LesionesContratistasOperador : int NA NA NA NA NA NA NA NA NA NA ...
## $ LesionesRescatistasEmergencia : int NA NA NA NA NA NA NA NA NA NA ...
## $ OtrasLesiones : int NA NA NA NA NA NA NA NA NA NA ...
## $ LesionesPublico : int NA NA NA NA NA NA NA NA NA NA ...
## $ TodasLesiones : int NA NA NA NA NA NA NA NA NA NA ...
## $ FallecimientosEmpleadosOperador : int NA NA NA NA NA NA NA NA NA NA ...
## $ FallecimientosContratistasOperador : int NA NA NA NA NA NA NA NA NA NA ...
## $ FallecimientosRescatistasEmergencia : int NA NA NA NA NA NA NA NA NA NA ...
## $ OtrosFallecimientos : int NA NA NA NA NA NA NA NA NA NA ...
## $ FallecimientosPublico : int NA NA NA NA NA NA NA NA NA NA ...
## $ TodosFallecimientos : int NA NA NA NA NA NA NA NA NA NA ...
## $ CostosDaniosPropiedad : int 0 0 30000 12000 2720 NA 750 1300 NA 29360 ...
## $ CostosMercanciaPerdidas : int 27 0 100 30 1500 150 300 340 46 136233 ...
## $ CostosDaniosPropiedadesPublicasPrivadas: int 0 0 1000 5000 0 0 0 0 NA NA ...
## $ CostosRespuestaEmergencia : int 0 0 NA 0 1000 NA 400 2445 10999 NA ...
## $ CostosRemediacionAmbiental : int 0 100000 20000 15000 NA NA 6050 3350 452 NA ...
## $ OtrosCostos : int 0 0 NA 0 NA NA 0 2530 NA NA ...
## $ TodosCostos : int 27 100000 51100 32030 5220 150 7500 9965 11497 165593 ...
# 1.1 Extracción de datos
AnioAccidente <- as.numeric(datos$AnioAccidente)
# ELIMINAR SOLO 2017
AnioAccidente <- AnioAccidente[AnioAccidente != 2017]
2.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 |
|
|
|
|
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. SEGUNDO PERIODO (2014–2016) → 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)
GRAFICA
barplot(Tabla_2014_2017$hi2,
main="Gráfica N°5: Probabilidad (2014–2017)",
xlab="Año",
ylab="Probabilidad",
names.arg=Tabla_2014_2017$Anio,
col="slategray2")

4.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 TESTS POISSON
Pearson
Correlacion_p <- cor(Fo_p,Fe_p)*100
cat("\nCorrelación Poisson =",Correlacion_p,"%\n")
##
## Correlación Poisson = 98.47304 %
Grafica correlacion
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,"\n")
## Umbral = 3.841459