0.-Carga de librerías


library(gt)
library(e1071)
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

1.-Carga de datos


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

2.-Selección de la variable aleatoria


Longitud <- na.omit(datos$LongitudAccidente)

3.-Tabla de distribución de frecuencia

# 1. Generar el histograma 
png(filename = tempfile())
histoLongitud <- hist(Longitud, plot = FALSE)
dev.off()
## png 
##   2
# 2. Extracción de límites y cálculo de marcas de clase
Limites <- histoLongitud$breaks
LimInf <- Limites[1:(length(Limites) - 1)] 
LimSup <- Limites[2:length(Limites)]  
MC <- (LimInf + LimSup) / 2

# 3. Frecuencias simples
ni <- histoLongitud$counts
hi <- (ni / sum(ni)) * 100

# 4. Frecuencias acumuladas
Niasc <- cumsum(ni)                     
Nidsc <- rev(cumsum(rev(ni)))           
Hiasc <- round(cumsum(hi), 2)          
Hiasc[length(Hiasc)] <- 100

Hidsc <- round(rev(cumsum(rev(hi))), 2)
Hidsc[1] <- 100

# 5. Creación del data.frame final de frecuencias
TDFLongitudR <- data.frame(
  LimInf, LimSup, MC, ni, 
  hi = round(hi, 2),
  Niasc, Nidsc, Hiasc, Hidsc
)

total_ni <- sum(ni)
total_hi <- 100  

TDFLongitudRFinal <- rbind(
  TDFLongitudR,
  data.frame(
    LimInf = "Total",
    LimSup = " ", 
    MC = " ",
    ni = total_ni, 
    hi = total_hi, 
    Niasc = " ", 
    Nidsc = " ", 
    Hiasc = " ", 
    Hidsc = " "
  )
)

# 6. Presentación con la librería gt
library(gt)
tabla_LongitudR_gt <- TDFLongitudRFinal %>%
  gt() %>%
  cols_label(
    LimInf = md("**LimInf**"),
    LimSup = md("**LimSup**"),
    MC = md("**MC**"),
    ni = md("**ni**"),
    hi = md("**hi (%)**"),
    Niasc = md("**Ni ↑**"),
    Nidsc = md("**Ni ↓**"),
    Hiasc = md("**Hi ↑ (%)**"),
    Hidsc = md("**Hi ↓ (%)**")
  ) %>%
  tab_header(
    title = md("**Tabla N° 2**"),
    subtitle = md("**Distribución de la longitud de accidentes en oleoductos ocurridos en EE.UU (2010-2017)**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  tab_options(
    table.background.color = "white",
    row.striping.background_color = "white",
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    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 = "gray",
    table_body.border.bottom.color = "black",
    table.border.left.color = "black",
    table.border.left.style = "solid",
    table.border.left.width = px(1),
    table.border.right.color = "black",
    table.border.right.style = "solid",
    table.border.right.width = px(1)
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = LimInf == "Total"
    )
  )

tabla_LongitudR_gt
Tabla N° 2
Distribución de la longitud de accidentes en oleoductos ocurridos en EE.UU (2010-2017)
LimInf LimSup MC ni hi (%) Ni ↑ Ni ↓ Hi ↑ (%) Hi ↓ (%)
-160 -155 -157.5 3 0.11 3 2760 0.11 100
-155 -150 -152.5 1 0.04 4 2757 0.14 99.89
-150 -145 -147.5 10 0.36 14 2756 0.51 99.86
-145 -140 -142.5 0 0.00 14 2746 0.51 99.49
-140 -135 -137.5 0 0.00 14 2746 0.51 99.49
-135 -130 -132.5 0 0.00 14 2746 0.51 99.49
-130 -125 -127.5 0 0.00 14 2746 0.51 99.49
-125 -120 -122.5 45 1.63 59 2746 2.14 99.49
-120 -115 -117.5 118 4.28 177 2701 6.41 97.86
-115 -110 -112.5 23 0.83 200 2583 7.25 93.59
-110 -105 -107.5 71 2.57 271 2560 9.82 92.75
-105 -100 -102.5 438 15.87 709 2489 25.69 90.18
-100 -95 -97.5 889 32.21 1598 2051 57.9 74.31
-95 -90 -92.5 576 20.87 2174 1162 78.77 42.1
-90 -85 -87.5 241 8.73 2415 586 87.5 21.23
-85 -80 -82.5 136 4.93 2551 345 92.43 12.5
-80 -75 -77.5 89 3.22 2640 209 95.65 7.57
-75 -70 -72.5 120 4.35 2760 120 100 4.35
Total 2760 100.00
Autor: Grupo 1

4.-Gráfica de distribución de frecuencia


options(scipen = 999)
hist(valores_comunes,freq = TRUE,
     main = "Gráfica N°2: Distribucción de Longitud en los accidentes 
     de oleoductos en EE.UU.",
     xlab = "Longitud (°)",
     ylab = "Cantidad",
     col =  "#DBD7FB",
     las=1)

5.-Conjetura


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.

6.-Parámetros

u<-mean(valores_comunes)
sigma<-sd(valores_comunes)

Media (u) = -95.50597

Desviación estándar (sigma) = 6.228508

7.-Sobreposición de la realidad con el modelo

Histo_long <- hist(valores_comunes, freq = FALSE,
                   main = "Gráfica N°3: Comparación de la realidad con el modelo normal de Longitud 
                   en los accidentes de oleoductos en EE.UU.",
                   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)

8.-Test de bondad


8.1-Test de Pearson

# Correlación de frecuencias
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)

Correlacion_norm <- cor(Fo_norm, Fe_norm) * 100

La correlación de frecuencias es de = 95.82 %

# Gráfica de correlación
plot(Fo_norm, Fe_norm,
     main = "Gráfica N°4: Correlación de frecuencias en el modelo normal",
     xlab = "Frecuencia Observada ", ylab = "Frecuencia Esperada",
     col = "#DBD7FB", pch = 19)
abline(lm(Fe_norm ~ Fo_norm), col = "red", lwd = 2)

8.2-Test de chi-cuadrado

n <- length(valores_comunes)
Fo_norm_pct <- (Fo_norm / n) * 100
Fe_norm_pct <- P_norm * 100

# Calcular estadístico Chi-cuadrado
x2_norm <- sum((Fe_norm_pct - Fo_norm_pct)^2 / Fe_norm_pct)

# Grados de libertad 
gl_norm <- (h - 1) - 2 

# Nivel de significancia y valor crítico al 95% de confianza
nivel_significancia <- 0.05
umbral_aceptacion <- qchisq(1 - nivel_significancia, df = gl_norm)

cat("El estadístico Chi-cuadrado calculado =", round(x2_norm, 4), "\n\n")
## El estadístico Chi-cuadrado calculado = 7.3964
cat("Grados de libertad =", gl_norm, "\n\n")
## Grados de libertad = 5
cat("El umbral de aceptación =", round(umbral_aceptacion, 4), "\n\n")
## El umbral de aceptación = 11.0705
if (x2_norm < umbral_aceptacion) {
  cat(
    "ESTADO: APRUEBA. ",
    "Conclusión: No se rechaza H0, las longitudes de los accidentes podrían seguir una distribución normal."
  )
} else {
  cat(
    "ESTADO: NO APRUEBA. ",
    "Conclusión: Se rechaza H0, las longitudes de los accidentes NO siguen una distribución normal."
  )
}
## ESTADO: APRUEBA.  Conclusión: No se rechaza H0, las longitudes de los accidentes podrían seguir una distribución normal.

9.-Cálculo de probabilidades


  • ¿Cuál es la probabilidad de que la longitud de accidentes se encuentre entre -100°y -90°?
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 %

Gráfica de Probabilidad

plot(x_norm, dnorm(x_norm, mean = u, sd = sigma), type = "l", 
     col = "blue", lwd = 2,
     main = "Gráfica N°5: Cálculo de probabilidad de la longitud en los accidentes 
     de oleoductos en EE.UU. ",
     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))

10.-Intervalo de confianza


# 1. Media aritmética muestral 
x <- mean(valores_comunes)

# 2. Desviación estándar muestral
sigma_n <- sd(valores_comunes)

# 3. Error estándar de la media (con Z = 1.96 para el 95% de confianza)
n <- length(valores_comunes)
e <- 1.96 * (sigma_n / sqrt(n))

# 4. Límites del intervalo de confianza del 95%
limite_inferior <- round(x - e, 2)
limite_superior <- round(x + e, 2)

# 5. Creación de la tabla con el formato requerido
tabla_media_exp <- data.frame(
  Intervalo = paste0(
    "P [",
    limite_inferior,
    " < µ < ",
    limite_superior,
    "] = 95%"
  )
)

# 6. Presentación de la tabla con la librería gt
library(gt)
tabla_media_exp %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2**"),
    subtitle = md("**Intervalo de confianza del 95% para la variable **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",
    table.border.left.color = "black",
    table.border.left.style = "solid",
    table.border.left.width = px(1),
    table.border.right.color = "black",
    table.border.right.style = "solid",
    table.border.right.width = px(1)
  )
Tabla N°2
Intervalo de confianza del 95% para la variable Longitud de los accidentes en oleoductos en EE.UU.
Intervalo
P [-95.75 < µ < -95.26] = 95%
Autor: Grupo 1

11.-Conclusión


El comportamiento de la variable Longitud se explica con un modelo normal de parámetros μ = -95.50 y σ = 6.22. Podemos afirmar con un 95% de confianza que la media aritmética real de Longitud se encuentra entre [-95.75 < µ < -95.26] y una desviación estándar de 6.23.