#UNIVRSIDAD CENTRAL DEL ECUADOR 
#Tema:Estadística Inferencial-Variable Ordinal
#AUTOR:Grupo 6

#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 ...
#VARIABLE ORDINAL 1:CÓDIGO DE ÁREA ----------------------------------------------------
#Extraer la variable 
Codigo_area <- datos$Codigo_area
# 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
#Graficas 

# 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.2:
        Distribución de los codigos Area ",
        xlab = "",
        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")

# 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")

# Excluir fila "Total" y convertir a numérico
Tabla <- Tabla[Tabla$Codigo_area != "Total", ]
Tabla$Codigo_area <- as.numeric(Tabla$Codigo_area)

# Parámetros estimados para la binomial
n <- max(Tabla$Codigo_area)  # Número máximo de la variable Codigo_area
media <- sum(Tabla$Codigo_area * Tabla$ni) / sum(Tabla$ni)  # Media ponderada
p <- media / n  # Estimación de la probabilidad

# Mostrar el valor de p
p
## [1] 0.1879833
# Frecuencias esperadas
Fe2 <- dbinom(Tabla$Codigo_area, size = n, prob = p) * sum(Tabla$ni)  # Frecuencias esperadas
Fo2 <- Tabla$ni  # Frecuencias observadas
# Agregar columna de frecuencias esperadas a la tabla
Tabla$esperados <- Fe2
# Mostrar la tabla con las frecuencias esperadas
print(Tabla)
##   Codigo_area   ni          hi    esperados
## 1           1 7285 92.34376981 3141.3569861
## 2           2  366  4.63937128 1818.0738411
## 3           3   78  0.98871847  561.1829548
## 4           4  155  1.96476106   97.4361133
## 5           5    3  0.03802763    9.0226510
## 6           6    2  0.02535176    0.3481265
# Gráfico Experimental vs Teórica (Binomial)
barplot(rbind(Fo2, Fe2),
        beside = TRUE,
        col = c("aquamarine", "aquamarine4"),
        legend.text = c("Experimental", "Teórica"),
        args.legend = list(x = "topright"),
        main = "Gráfica No.3: Distribución Experimental vs Teórica (Binomial)",
        names.arg = Tabla$Codigo_area,  # Cambié Puntaje por Codigo_area
        ylab = "Frecuencia")

#Test Chi-cuadrado
x2_2 <- sum(((Fo2 - Fe2)^2) / Fe2)
k <- length(Fo2)              # número de clases
gl_2 <- k - 1 - 1             # grados de libertad: k - 1 - 1
vc_2 <- qchisq(0.95, df = gl_2)
cat("Chi-cuadrado calculado (x2_2):", x2_2, "\n")
## Chi-cuadrado calculado (x2_2): 7087.365
cat("Valor crítico (vc_2):", vc_2, "\n")
## Valor crítico (vc_2): 9.487729
if (x2_2 < vc_2) {
  cat("Resultado: No se rechaza H0 (la binomial se ajusta bien)\n")
} else {
  cat("Resultado: Se rechaza H0 (la binomial no se ajusta bien)\n")
}
## Resultado: Se rechaza H0 (la binomial no se ajusta bien)
#Correlación numérica
correlacion <- cor(Fo2, Fe2)
cat("Correlación Experimental vs Teórico:", correlacion, "\n")
## Correlación Experimental vs Teórico: 0.8635876
#Gráfico de Correlación
plot(Fe2, Fo2,
     main = "Gráfica No.4:
     Correlación entre Frecuencias Experimental y Teórica ",
     xlab = "Frecuencia Experimental(Fe2)",
     ylab = "Frecuencia Teórica (Fo2)",
     pch = 19,
     col = "green3",
     xlim = c(min(Fe2), max(Fe2)),
     ylim = c(min(Fo2), max(Fo2)))
abline(lm(Fo2 ~ Fe2), col = "green4", lwd = 2)
grid()
# Mostrar r en el gráfico
text(x = max(Fe2)*0.7,
     y = max(Fo2)*0.9,
     labels = paste("r =", round(correlacion, 3)),
     col = "darkred", cex = 1.2)

#Modelo de Poisson 
# Excluir fila "Total" y convertir a numérico
Tabla <- Tabla[Tabla$Codigo_area != "Total", ]
Tabla$Codigo_area <- as.numeric(Tabla$Codigo_area)
Tabla$ni <- as.numeric(Tabla$ni)

# Estimación de lambda para Poisson
lambda <- sum(Tabla$Codigo_area * Tabla$ni) / sum(Tabla$ni)

# Mostrar el valor de lambda estimado
cat("Lambda estimado para Poisson:", lambda, "\n")
## Lambda estimado para Poisson: 1.1279
# Rango de Codigo_area observados
x_vals <- Tabla$Codigo_area

# Calcular probabilidades Poisson
probs_pois <- dpois(x_vals, lambda = lambda)

# Frecuencias esperadas según Poisson
Fe_pois <- probs_pois * sum(Tabla$ni)

# Añadir las frecuencias esperadas a la tabla
Tabla$esperados_pois <- Fe_pois

# Mostrar la tabla con las frecuencias esperadas
print(Tabla)
##   Codigo_area   ni          hi    esperados esperados_pois
## 1           1 7285 92.34376981 3141.3569861     2880.39352
## 2           2  366  4.63937128 1818.0738411     1624.39736
## 3           3   78  0.98871847  561.1829548      610.71905
## 4           4  155  1.96476106   97.4361133      172.20744
## 5           5    3  0.03802763    9.0226510       38.84654
## 6           6    2  0.02535176    0.3481265        7.30250
# Gráfico Experimental vs Teórico (Poisson)
barplot(rbind(Tabla$ni, Tabla$esperados_pois),
        beside = TRUE,
        col = c("cyan", "cyan4"),
        legend.text = c("Experimental", "Teórico (Poisson)"),
        args.legend = list(x = "topright"),
        names.arg = Tabla$Codigo_area,  # Cambié Puntaje por Codigo_area
        main = "Gráfica No.5: Distribución Experimental vs Teórico (Poisson)",
        xlab = "Código de Área",
        ylab = "Frecuencia")

#Test de Chi-cuadrado (Poisson)
Fo_pois <- Tabla$ni
Fe_pois <- Tabla$esperados_pois
x2_pois <- sum((Fo_pois - Fe_pois)^2 / Fe_pois)
k <- length(Fo_pois)
gl_pois <- k - 1 - 1  # k - 1 - parámetros estimados (λ)
vc_pois <- qchisq(0.95, df = gl_pois)
cat("Chi-cuadrado Poisson:", x2_pois, "\n")
## Chi-cuadrado Poisson: 8213.576
cat("Valor crítico (Poisson):", vc_pois, "\n")
## Valor crítico (Poisson): 9.487729
if (x2_pois < vc_pois) {
  cat("Resultado: No se rechaza H0 (la Poisson se ajusta bien)\n")
} else {
  cat("Resultado: Se rechaza H0 (la Poisson no se ajusta bien)\n")
}
## Resultado: Se rechaza H0 (la Poisson no se ajusta bien)
#Correlación Experimental vs Teórico (Poisson)
cor_pois <- cor(Fo_pois, Fe_pois)
cat("Correlación Experimental vs Teórico (Poisson):", round(cor_pois, 4), "\n")
## Correlación Experimental vs Teórico (Poisson): 0.8705
plot(Fe_pois, Fo_pois,
     main = "Gráfica No.6: Correlación de 
     Frecuencia Observada vs Esperada (Poisson)",
     xlab = "Frecuencia Teórico (Poisson)",
     ylab = "Frecuencia Experimental",
     pch = 19,
     col = "deepskyblue",
     xlim = c(min(Fe_pois), max(Fe_pois)),
     ylim = c(min(Fo_pois), max(Fo_pois)))
abline(lm(Fo_pois ~ Fe_pois), col = "deepskyblue4", lwd = 2)
grid()
# Agregar valor de la correlación r
text(x = max(Fe_pois)*0.7,
     y = max(Fo_pois)*0.9,
     labels = paste("r =", round(cor(Fo_pois, Fe_pois), 3)),
     col = "darkred", cex = 1.2)