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 ...
Longitud <- na.omit(datos$LongitudAccidente)
# Cantidad de datos de la variable
n_L <- length(Longitud)
Cantidad total de datos: 2760
Debido al gran volumen de datos, es recomendable analizar primero el comportamiento general de la variable. Para ello, se construyó un diagrama de caja (boxplot) con el objetivo de identificar el rango en el que se concentra la mayoría de los valores y, de esta manera, obtener un conjunto representativo de datos.
Dcaja <- boxplot(Longitud, plot = TRUE,
horizontal = TRUE,
main = "Gráfica N°1: Distribución de la longitud de accidentes
en oleoductos ocurridos en EE.UU.",
xlab = "Longitud (°)",
col = "#DBD7FB")
valores_comunes <- Longitud[!(Longitud %in% Dcaja$out)]
valores_outliers <- Longitud[Longitud %in% Dcaja$out]
Cantidad de valores comunes: 2413
Cantidad de valores atipicos: 347
options(scipen = 999)
hist(valores_comunes,freq = TRUE,
main = "Gráfica N°2: Histograma de Longitud de accidentes en oleoductos",
xlab = "Longitud (°)",
ylab = "Cantidad",
col = "#DBD7FB",
las=1)
Se considera que la variable Longitud, podría seguir una distribución normal. Bajo este modelo se asume que los valores de la variable se distribuyen de forma asimétrica, con una mayor concentración de observaciones en valores cercanos a un punto central positivo y una cola más extendida hacia valores superiores. Esto implica que la probabilidad de ocurrencia es mayor para valores moderados de latitud y disminuye progresivamente conforme los valores se alejan hacia la derecha, reflejando una distribución sesgada positivamente.
Hipótesis nula(Ho): La Longitud de los accidentes siguen una distribución normal.
Hipótesis alternativa (H1): La Longitud de los accidentes NO siguen una distribución normal.
u<-mean(valores_comunes)
sigma<-sd(valores_comunes)
Media (u) = -95.50597
Desviación estándar (sigma) = 6.228508
Histo_long <- hist(valores_comunes, freq = FALSE,
main = "Gráfica N°3: Histograma de Longitud de accidentes
en oleoductos con curva Normal",
xlab = "Longitud (°)",
ylab = "Densidad de probabilidad",
col = "#DBD7FB")
# Curva normal
x_norm <- seq(min(valores_comunes), max(valores_comunes), length.out = 1000)
lines(x_norm, dnorm(x_norm, u, sigma), lwd = 3, col = "red")
# Leyenda
legend("topright", legend = "Modelo Normal",
col = "red", lwd = 2, lty = 1,
box.lty = 1,box.col = "black",
cex = 0.8)
Fo_norm <- Histo_long$counts
h <- length(Fo_norm)
P_norm <- c()
for (i in 1:h) {
P_norm[i] <- pnorm(Histo_long$breaks[i+1], mean = u, sd = sigma) -
pnorm(Histo_long$breaks[i], mean = u, sd = sigma)
}
Fe_norm <- P_norm * length(valores_comunes)
Una forma rápida de comprobar la eficasia del modelo, es comparar el valor del tamaño muestral real y el tamaño muestral obtenido del modelo.
Tm <- sum(Fe_norm)
Tm
[1] 2409.691
Tr <- length(valores_comunes)
Tr
[1] 2413
Correlacion_norm <- cor(Fo_norm, Fe_norm) * 100
La correlación de frecuencias es de = 95.82 %
plot(Fo_norm, Fe_norm,
main = "Gráfica N°4: Correlación de frecuencias en el modelo exponencial",
xlab = "Frecuencia Observada ", ylab = "Frecuencia Esperada",
col = "#DBD7FB", pch = 19)
abline(lm(Fe_norm ~ Fo_norm), col = "red", lwd = 2)
n <- length(valores_comunes)
Fo_norm_pct<- (Fo_norm / n) * 100
Fe_norm_pct <- P_norm * 100
x2_norm <- sum((Fe_norm_pct - Fo_norm_pct)^2 / Fe_norm_pct)
El estadistico Chi-cuadrado es: 7.396439
gl_norm <- (h - 1) - 2
nivel_significancia <- 0.05
umbral_aceptacion<- qchisq(1 - nivel_significancia, gl_norm)
El umbral de aceptación es: 11.0705
if (x2_norm < umbral_aceptacion) {
cat("Conclusión: No se rechaza H0, las longitudes de los accidentes podrían seguir una distribución normal.")
} else {
cat("Conclusión: Se rechaza H0, las longitudes de los accidentes NO siguen una distribución normal.")
}
Conclusión: No se rechaza H0, las longitudes de los accidentes podrían seguir una distribución normal.
Variable <- c("Longitud")
Modelo <- c("Normal")
Tabla_resumen <- data.frame(Variable,
Modelo,
Pearson = round(Correlacion_norm,2),
Chi_Cuadrado = round(x2_norm,2),
Umbral = round(umbral_aceptacion,2),
TestChi = c("Aprobado"))
colnames(Tabla_resumen) <- c("Variable",
"Modelo",
"Test Pearson (%)",
"Chi-Cuadrado",
"Umbral de aceptación",
"Test de Bondad de ajuste")
library(gt)
Tabla_resumen %>%
gt() %>%
tab_header(
title = md("**Tabla N°1**"),
subtitle = md("**Resumen de los Tests Aplicados al Modelo Normal**")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 1")
) %>%
cols_align(
align = "center",
columns = everything()
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.font.weight = "bold",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "grey",
table_body.border.bottom.color = "black"
)
| Tabla N°1 | |||||
| Resumen de los Tests Aplicados al Modelo Normal | |||||
| Variable | Modelo | Test Pearson (%) | Chi-Cuadrado | Umbral de aceptación | Test de Bondad de ajuste |
|---|---|---|---|---|---|
| Longitud | Normal | 95.82 | 7.4 | 11.07 | Aprobado |
| Autor: Grupo 1 | |||||
Los resultados de los tests indican que los datos de Longitud pueden seguir una distribucion normal.
El estadístico Chi-cuadrado calculado (10.79) es menor que el umbral de aceptación (11.07), lo que indica que no se rechaza la hipótesis nula (H₀) y el modelo normal es adecuado para describir los datos observados.
El Test de Pearson reporta un nivel de ajuste del 95.82%, lo que indica que las frecuencias observadas se aproximan bastante a las frecuencias esperadas bajo la distribución normal, respaldando adicionalmente la validez del modelo.
prob_norm <- pnorm(-90, mean = u, sd = sigma) - pnorm(-100, mean = u, sd = sigma)
La probabilidad de que las longitudes de los accidentes se encuentren entre -100° y -90°: 57.64 %
plot(x_norm, dnorm(x_norm, mean = u, sd = sigma), type = "l",
col = "blue", lwd = 2,
main = "Gráfica N°5: Curva de densidad con área de probabilidad
(Longitud(°))",
xlab = "Longitud (°)",
ylab = "Densidad de probabilidad")
x_somb_norm <- seq(-100, -90, length.out = 1000)
y_somb_norm <- dnorm(x_somb_norm, mean = u, sd = sigma)
polygon(c(x_somb_norm, rev(x_somb_norm)),
c(y_somb_norm, rep(0, length(y_somb_norm))),
col = rgb(1,0,0,0.4), border = NA)
legend("topright", legend = c("Modelo Normal", "Área de Probabilidad"),
col = c("blue", "#B03060"), lwd = 2, pch = c(NA,15))
El Teorema del Límite Central (TLC) es fundamental en la inferencia estadística, ya que permite estimar la media poblacional (μ) mediante intervalos de confianza. Aun cuando la población sigue una distribución normal, el TLC garantiza que la media de las muestras de cualquier tamaño (n≥30), la distribución de las medias muestrales tiende a ser normal, independientemente de la forma de la población.
Esta propiedad es esencial porque garantiza que podemos aplicar técnicas estadísticas basadas en la normalidad, como la construcción de intervalos de confianza basados en tres postulados principales:
Donde:
x <- mean(valores_comunes)
La media muestral es de: -95.50597
sigma_n<- sd(valores_comunes)
La desviación estandar muestral es de: 6.228508
e <- sigma/ sqrt(n)
El error estandar de la media es de: 0.126796
limite_inferior <- x - 2 * e
limite_superior <- x + 2 * e
El limite inferior es: -95.75956
El limite superior es: -95.25238
tabla_media_exp <- data.frame(
round(limite_inferior, 2),
round(x, 2),
round(limite_superior, 2),
round(sigma_n, 2)
)
colnames(tabla_media_exp) <- c("Límite inferior", "Media poblacional",
"Límite superior", "Desviación estándar poblacional")
library(gt)
tabla_media_exp%>%
gt() %>%
tab_header(
title = md("**Tabla N°2**"),
subtitle = md("**Media poblacional estimada de la Longitud de los accidentes en oleoductos en EE.UU.**")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 1")
) %>%
cols_align(
align = "center",
columns = everything()
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.font.weight = "bold",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "grey",
table_body.border.bottom.color = "black"
)
| Tabla N°2 | |||
| Media poblacional estimada de la Longitud de los accidentes en oleoductos en EE.UU. | |||
| Límite inferior | Media poblacional | Límite superior | Desviación estándar poblacional |
|---|---|---|---|
| -95.76 | -95.51 | -95.25 | 6.23 |
| Autor: Grupo 1 | |||
La variable Longitud se ajusta adecuadamente a un modelo de distribución normal, con una media poblacional estimada de -95.51° y una desviación estándar poblacional de 6.23°.
De acuerdo con este modelo, la probabilidad de que la longitud de los accidentes ocurra entre -100° y -90° es aproximadamente del 57.65%, lo que evidencia una notable concentración de eventos dentro de este rango geográfico.
Aplicando el Teorema del Límite Central, se estimó que la media poblacional se encuentra entre -95.76° y -95.25° con un 95% de confianza, lo que proporciona un nivel de certeza estadística sólido sobre la localización promedio de los accidentes registrados en los oleoductos de EE.UU.