DISTRITO ## Carga de datos

setwd("/cloud/project")
datos <- read.csv("DATOS.csv", header = TRUE, sep = ";" , dec = ".")
str(datos)
## 'data.frame':    10190 obs. of  17 variables:
##  $ Distrito_edit                        : chr  "1" "1" "1" "1" ...
##  $ Year_edit_Fecha_del_derrame          : int  2013 2013 2013 2013 2013 2013 2013 2013 2013 2013 ...
##  $ Mes_edit_Fecha_del_derrame           : int  6 3 4 4 6 6 3 9 10 6 ...
##  $ Categoria_Instalaciones              : chr  "Instalacion fija" "Pozos" "Pozos" "Pozos" ...
##  $ Operacion_general                    : chr  "Produccion" "Otro" "Produccion" "Produccion" ...
##  $ Categoria_Fuente                     : chr  NA "Tanques/Almacenamiento" "Lineas/Tuberias" "Infraestructura Fija" ...
##  $ Grupo_causas_probable                : chr  NA "Afectaciones externas" "Factores humanos" "Problemas tecnicos" ...
##  $ Liberacion_petroleo_crudo_edicion    : num  0 0 0 0 0 ...
##  $ Edicion_recuperacion_petroleo_crudo  : num  NA 0 0 0 0 0 0 0 0 NA ...
##  $ Volumen_liberado_Cond_Final          : num  0 0 0 10 0 0 0 1 0 0 ...
##  $ Liberacion_agua_de_produccion_edicion: num  6720 3780 5040 420 10920 ...
##  $ Liberacion_volumen_gas               : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Volumen_condensado_recuperado        : num  NA 0 0 1 0 0 0 0 0 NA ...
##  $ Edicion_Recuperacion_agua_producida  : num  NA 420 4620 0 10920 ...
##  $ Derrame_sobre_agua_limpio            : chr  "NO" "NO" "NO" "NO" ...
##  $ Estado_general                       : chr  "Observaciones tecnicas" NA NA NA ...
##  $ Codigo_area                          : int  1 1 1 1 1 1 1 1 1 3 ...

1 Extraer la variable

Codigo_area <- datos$Codigo_area

2 Tabla de Distribución de Frecuencias

# Filtrar valores NA, -1 y vacíos
Codigo_area <- Codigo_area[!is.na(Codigo_area) & Codigo_area != -1 & Codigo_area != ""]
# Crear la tabla de frecuencias
TDF_Codigo_area <- table(Codigo_area)
Tabla <- as.data.frame(TDF_Codigo_area)
colnames(Tabla) <- c("Codigo_area", "ni")
# Calcular la frecuencia relativa (hi)
Tabla$hi <- (Tabla$ni / sum(Tabla$ni)) * 100
Tabla$Codigo_area <- as.character(Tabla$Codigo_area)
# Agregar fila total
fila_total <- data.frame(Codigo_area = "Total", 
                         ni = sum(Tabla$ni), 
                         hi = sum(Tabla$hi),
                         stringsAsFactors = FALSE)
# Agregar fila total a la tabla
Tabla <- rbind(Tabla, fila_total)
# Mostrar tabla final
print(Tabla)
##   Codigo_area   ni           hi
## 1           1 7285  92.34376981
## 2           2  366   4.63937128
## 3           3   78   0.98871847
## 4           4  155   1.96476106
## 5           5    3   0.03802763
## 6           7    2   0.02535176
## 7       Total 7889 100.00000000

3 Gráficas de distribución de Frecuencia

# Ajustar márgenes para etiquetas largas
par(mar = c(8, 4, 3, 2))

# Gráfico de barras (solo sin la fila Total)
barplot(TDF_Codigo_area,
        main = "Gráfica No.1:
        Distribución de los codigos Area ",
        xlab = "Código Área",
        ylab = "Frecuencia Absoluta",
        col = "aquamarine",
        las = 3,               # Rotar etiquetas en eje x
        cex.names = 0.8,
        cex.axis = 0.9,
        cex.main = 1.2,
        ylim = c(0, max(TDF_Codigo_area) * 1.2),
        border = "black")

4 Conjetura del modelo

Modelo binomial

Codigo_area <- as.numeric(Codigo_area)
Fo <- table(Codigo_area)
Fo_df <- as.data.frame(Fo)
colnames(Fo_df) <- c("X", "ni")
Fo_df$X <- as.numeric(as.character(Fo_df$X))

Test de Pearson

Codigo_area <- as.numeric(Codigo_area)
Fo <- table(Codigo_area)
Fo_df <- as.data.frame(Fo)
colnames(Fo_df) <- c("X", "ni")
Fo_df$X <- as.numeric(as.character(Fo_df$X))

n_bin <- 10
p_bin <- mean(Codigo_area) / n_bin
p_bin
## [1] 0.1128153
Fo_df$esperados <- dbinom(Fo_df$X, size = n_bin, prob = p_bin) * sum(Fo_df$ni)
Fo_df$esperados
## [1] 3030.5143424 1734.1348680  588.0383036  130.8572164   19.9679250
## [6]    0.1537523
barplot(
  rbind(Fo_df$ni, Fo_df$esperados),
  beside = TRUE,
  col = c("aquamarine2", "aquamarine4"),
  legend = c("Observada", "Esperada"),
  names.arg = Fo_df$X,
  main = "Gráfica Nº2: 
  Distribución Binomial de Código Área",
  xlab = "Codigo Área",
  ylab = "Frecuencia",
  ylim = c(0, max(c(Fo_df$ni, Fo_df$esperados)) * 1.2)
)

correlacion_bin <- cor(Fo_df$ni, Fo_df$esperados)
cat("Correlación Observado vs Esperado (Binomial):", round(correlacion_bin, 3), "\n")
## Correlación Observado vs Esperado (Binomial): 0.866
# Gráfico de correlación - Binomial
plot(Fo_df$esperados, Fo_df$ni,
     main = "Gráfica Nº3:
     Correlación Binomial: Frecuencia Teórica vs Experimental",
     xlab = "Teórica (Binomial)",
     ylab = "Experimental",
     pch = 19, col = "aquamarine3")
abline(lm(ni ~ esperados, data = Fo_df), col = "red", lwd = 2)
text(x = min(Fo_df$esperados), y = max(Fo_df$ni),
     labels = paste("r =", round(correlacion_bin, 3)),
     pos = 4, col = "black", cex = 0.9)

# Eliminar la fila "Total" para graficar
Tabla <- Tabla[Tabla$Codigo_area != "Total", ]  # Eliminar fila "Total" para graficar

# Convertir Codigo_area a factor con orden correcto
Tabla$Codigo_area <- factor(Tabla$Codigo_area, levels = Tabla$Codigo_area)  # asegurar orden

# Gráfico de barras de frecuencia relativa (%)
barplot(Tabla$hi,
        names.arg = Tabla$Codigo_area,
        main = "Gráfica No.2: Distribución Relativa de Codigo_area",
        xlab = "Código de Área",
        ylab = "Frecuencia Relativa (%)",
        col = "aquamarine2",
        las = 3,
        cex.names = 0.8,
        cex.axis = 0.9,
        cex.main = 1.2,
        ylim = c(0, max(Tabla$hi) * 1.2),
        border = "black")

Chi-cuadrado

x2_bin <- sum(((Fo_df$ni - Fo_df$esperados)^2) / Fo_df$esperados)
gl_bin <- length(Fo_df$X) - 1
vc_bin <- qchisq(0.95, df = gl_bin)

cat("Chi-cuadrado Binomial:", round(x2_bin, 3), "\n")
## Chi-cuadrado Binomial: 7535.606
## Chi-cuadrado Binomial: 3177.647
cat("Valor crítico (0.95):", round(vc_bin, 3), "\n")
## Valor crítico (0.95): 11.07
## Valor crítico (0.95): 16.919
if (x2_bin < vc_bin) {
  cat("No se rechaza H0: El modelo binomial se ajusta bien a los datos.\n")
} else {
  cat("Se rechaza H0: El modelo binomial no se ajusta a los datos.\n")
}
## Se rechaza H0: El modelo binomial no se ajusta a los datos.

##Modelo de Pearson

lambda <- mean(Codigo_area)
  lambda
## [1] 1.128153
  Fo_df$esperados <- dpois(Fo_df$X, lambda) * sum(Fo_df$ni)
  Fo_df$esperados
## [1] 2880.310648 1624.715729  610.976042  172.318633   38.880361    1.178195

Test de Pearson

correlacion_pois <- cor(Fo_df$ni, Fo_df$esperados)
  cat("Correlación Observado vs Esperado (Poisson):", round(correlacion_pois, 3), "\n")
## Correlación Observado vs Esperado (Poisson): 0.87
  ## Correlación Observado vs Esperado (Poisson): 0.933
  # Gráfico de correlación - Poisson
  plot(Fo_df$esperados, Fo_df$ni,
       main = "Gráfica Nº5:
     Correlación Poisson: Frecuencia Teórica vs Experimental",
       xlab = "Teórica (Poisson)",
       ylab = "Experimental",
       pch = 19, col = "aquamarine4")
  abline(lm(ni ~ esperados, data = Fo_df), col = "red", lwd = 2)
  text(x = min(Fo_df$esperados), y = max(Fo_df$ni),
       labels = paste("r =", round(correlacion_pois, 3)),
       pos = 4, col = "black", cex = 0.9)

Chi-cuadrado

x2_pois <- sum(((Fo_df$ni - Fo_df$esperados)^2) / Fo_df$esperados)
gl_pois <- length(Fo_df$X) - 1
vc_pois <- qchisq(0.95, df = gl_pois)
cat("Chi-cuadrado Poisson:", round(x2_pois, 3), "\n")
## Chi-cuadrado Poisson: 8211.356
cat("Valor crítico (0.95):", round(vc_pois, 3), "\n")
## Valor crítico (0.95): 11.07
if (x2_pois < vc_pois) {
  cat("No se rechaza H0: El modelo Poisson se ajusta bien a los datos.\n")
} else {
  cat("Se rechaza H0: El modelo Poisson no se ajusta a los datos.\n")
}
## Se rechaza H0: El modelo Poisson no se ajusta a los datos.