# 1. CARGAR DATOS
library(readxl)
datos <- read_excel("r-graficas/Producción Campo Sacha.csv.xlsx")
## New names:
## • `` -> `...16`
View(datos)
str(datos)
## tibble [8,344 × 31] (S3: tbl_df/tbl/data.frame)
##  $ mes                   : chr [1:8344] "Ene" "Ene" "Ene" "Ene" ...
##  $ día                   : num [1:8344] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Pozo                  : chr [1:8344] "SACHA-001A" "SACHA-019A" "SACHA-052B" "SACHA-083A" ...
##  $ Campo                 : chr [1:8344] "SACHA" "SACHA" "SACHA" "SACHA" ...
##  $ Reservorio            : chr [1:8344] "U" "U" "U INFERIOR" "HOLLIN INFERIOR" ...
##  $ Bpd                   : num [1:8344] NA 53 249 139 186 136 NA 456 161 164 ...
##  $ Bppd_BH               : num [1:8344] 159 NA NA NA NA NA 155 NA NA NA ...
##  $ Bfpd_BE               : num [1:8344] NA 534 346 1158 1163 ...
##  $ Bfpd_BH               : num [1:8344] 695 NA NA NA NA NA 441 NA NA NA ...
##  $ Bapd_BE               : num [1:8344] NA 481 97 1019 977 ...
##  $ Bapd_BH               : num [1:8344] 536 NA NA NA NA NA 286 NA NA NA ...
##  $ Bsw_BE                : num [1:8344] NA 90.1 28 88 84 ...
##  $ Bsw_BH                : num [1:8344] 77.1 NA NA NA NA ...
##  $ Api_BE                : num [1:8344] NA 26.7 27.8 27.7 24 20.5 NA 28.5 29.9 26.3 ...
##  $ Api_BH                : num [1:8344] 27.8 NA NA NA NA NA 23.2 NA NA NA ...
##  $ ...16                 : num [1:8344] NA 10.76 50.55 1.11 27.9 ...
##  $ Gas_BH                : num [1:8344] 32.3 NA NA NA NA ...
##  $ Salinidad_BE          : num [1:8344] NA 15920 30227 1600 13000 ...
##  $ Salinidad_BH          : num [1:8344] 10800 NA NA NA NA NA 3800 NA NA NA ...
##  $ Rgl_BE                : num [1:8344] NA 20.15 146.1 0.96 23.99 ...
##  $ Rgl_BH                : num [1:8344] 46.5 NA NA NA NA ...
##  $ Gor_BE                : num [1:8344] NA 203.02 203.01 7.99 150 ...
##  $ Gor_BH                : num [1:8344] 203 NA NA NA NA ...
##  $ Horas_BE              : num [1:8344] NA 4 5 4 4 10 NA 4 10 10 ...
##  $ Horas_BH              : num [1:8344] 4 NA NA NA NA NA 4 NA NA NA ...
##  $ Bomba_BE              : chr [1:8344] NA "SF-320|SF-320|SF-900|SFGH2500/520/180/9259" "RC 1000|RC 1000|RC 1000/300/120/9250" "P23/68/30/7000" ...
##  $ Bomba_BH              : chr [1:8344] "JET  12K/0//0" NA NA NA ...
##  $ Frecuencia Operaciones: num [1:8344] NA 65 62 46 59 52 NA 58.5 57 54 ...
##  $ Voltaje               : num [1:8344] NA 479 457 364 440 452 NA 475 455 439 ...
##  $ Amperaje              : num [1:8344] NA 29 35 14 59 30 NA 23 35 34 ...
##  $ Presión Intake        : num [1:8344] NA 484 406 0 345 162 NA 546 338 0 ...
# Ver todas las columnas
cat("📋 COLUMNAS DISPONIBLES:\n")
## 📋 COLUMNAS DISPONIBLES:
print(colnames(datos))
##  [1] "mes"                    "día"                    "Pozo"                  
##  [4] "Campo"                  "Reservorio"             "Bpd"                   
##  [7] "Bppd_BH"                "Bfpd_BE"                "Bfpd_BH"               
## [10] "Bapd_BE"                "Bapd_BH"                "Bsw_BE"                
## [13] "Bsw_BH"                 "Api_BE"                 "Api_BH"                
## [16] "...16"                  "Gas_BH"                 "Salinidad_BE"          
## [19] "Salinidad_BH"           "Rgl_BE"                 "Rgl_BH"                
## [22] "Gor_BE"                 "Gor_BH"                 "Horas_BE"              
## [25] "Horas_BH"               "Bomba_BE"               "Bomba_BH"              
## [28] "Frecuencia Operaciones" "Voltaje"                "Amperaje"              
## [31] "Presión Intake"
# Buscar columnas relacionadas con PRESIÓN
cat("\n🔍 BUSCANDO COLUMNAS DE PRESIÓN:\n")
## 
## 🔍 BUSCANDO COLUMNAS DE PRESIÓN:
columnas_presion <- grep("presion|pressure|intake|psi|PRESION|PRESSURE", 
                         colnames(datos), 
                         ignore.case = TRUE, 
                         value = TRUE)
print(columnas_presion)
## [1] "Presión Intake"
## EXTRAER PRESIÓN INTAKE 
cat("\n", rep("=", 60), "\n", sep = "")
## 
## ============================================================
cat("EXTRAYENDO VARIABLE: PRESIÓN INTAKE\n")
## EXTRAYENDO VARIABLE: PRESIÓN INTAKE
cat(rep("=", 60), "\n\n", sep = "")
## ============================================================
# OPCIÓN 1: Si existe "Presión Intake" exactamente
if("Presión Intake" %in% colnames(datos)) {
  cat("✅ Columna encontrada: 'Presión Intake'\n")
  # EXTRAER DIRECTAMENTE así:
  Presion_Intake <- as.numeric(datos[["Presión Intake"]])
  
} else if(length(columnas_presion) > 0) {
  # OPCIÓN 2: Usar la primera columna encontrada
  col_name <- columnas_presion[1]
  cat("✅ Usando columna:", col_name, "\n")
  Presion_Intake <- as.numeric(datos[[col_name]])
  
} else {
  cat("❌ ERROR: No se encontró columna de presión\n")
  stop("Verifica el nombre de la columna")
}
## ✅ Columna encontrada: 'Presión Intake'
# =============================================================================
# LIMPIAR DATOS
# =============================================================================

cat("\n🧹 LIMPIANDO DATOS...\n")
## 
## 🧹 LIMPIANDO DATOS...
# Guardar longitud original
valores_originales <- length(Presion_Intake)
cat("   • Valores originales:", valores_originales, "\n")
##    • Valores originales: 8344
# 1. Quitar NAs
Presion_Intake <- Presion_Intake[!is.na(Presion_Intake)]
cat("   • Después de quitar NA:", length(Presion_Intake), "\n")
##    • Después de quitar NA: 7705
# 2. Quitar valores infinitos
Presion_Intake <- Presion_Intake[is.finite(Presion_Intake)]
cat("   • Después de quitar Inf:", length(Presion_Intake), "\n")
##    • Después de quitar Inf: 7705
# 3. Quitar valores imposibles (0 o negativos para presión)
Presion_Intake <- Presion_Intake[Presion_Intake > 0]
cat("   • Después de quitar ≤ 0:", length(Presion_Intake), "\n")
##    • Después de quitar ≤ 0: 6826
# 4. Quitar valores muy grandes (más de 1000 psi poco común)
Presion_Intake <- Presion_Intake[Presion_Intake < 1000]
n <- length(Presion_Intake)

cat("   • Valores finales válidos:", n, "\n")
##    • Valores finales válidos: 6131
cat("   • % retenido:", round(100 * n / valores_originales, 1), "%\n")
##    • % retenido: 73.5 %
# =============================================================================
# MOSTRAR RESUMEN
# =============================================================================

if(n > 0) {
  cat("\n📊 RESUMEN - PRESIÓN INTAKE:\n")
  cat("• Muestra (n):", n, "observaciones\n")
  cat("• Mínimo:", round(min(Presion_Intake), 2), "psi\n")
  cat("• Máximo:", round(max(Presion_Intake), 2), "psi\n")
  cat("• Media:", round(mean(Presion_Intake), 2), "psi\n")
  cat("• Mediana:", round(median(Presion_Intake), 2), "psi\n")
  cat("• Desviación estándar:", round(sd(Presion_Intake), 2), "psi\n")
  
  cat("\n🔍 RANGO TÍPICO:\n")
  cat("• Q1 (25%):", round(quantile(Presion_Intake, 0.25), 2), "psi\n")
  cat("• Q3 (75%):", round(quantile(Presion_Intake, 0.75), 2), "psi\n")
  cat("• IQR:", round(IQR(Presion_Intake), 2), "psi\n")
  
  cat("\n✅ Presión Intake lista para análisis\n")
} else {
  cat("❌ ERROR: No quedaron datos válidos después de la limpieza\n")
  cat("   Revisa la columna 'Presión Intake' en tu archivo Excel\n")
}
## 
## 📊 RESUMEN - PRESIÓN INTAKE:
## • Muestra (n): 6131 observaciones
## • Mínimo: 82 psi
## • Máximo: 998 psi
## • Media: 328.35 psi
## • Mediana: 285 psi
## • Desviación estándar: 170.58 psi
## 
## 🔍 RANGO TÍPICO:
## • Q1 (25%): 200 psi
## • Q3 (75%): 392 psi
## • IQR: 192 psi
## 
## ✅ Presión Intake lista para análisis

TABLA DE DISTRIBUCION DE FRECUENCIAS PARA PRESION INTAKE

cat("\n🎯 CREANDO TABLA DEFINITIVA (12 INTERVALOS EXACTOS)\n")
## 
## 🎯 CREANDO TABLA DEFINITIVA (12 INTERVALOS EXACTOS)
# 1. Forzar 12 intervalos CON amplitud fija
k_definitivo <- 12

# 2. Usar amplitud de 80 psi para cubrir mejor
amplitud_definitiva <- 80  # 80 psi por intervalo

# 3. Calcular inicio desde múltiplo de 80
inicio_definitivo <- floor(min(Presion_Intake) / 80) * 80

# 4. Crear EXACTAMENTE 13 puntos (12 intervalos)
lim_inf_definitivo <- seq(from = inicio_definitivo, 
                          by = amplitud_definitiva, 
                          length.out = k_definitivo + 1)

cat("* Intervalos:", k_definitivo, "\n")
## * Intervalos: 12
cat("* Amplitud:", amplitud_definitiva, "psi\n")
## * Amplitud: 80 psi
cat("* Rango:", lim_inf_definitivo[1], "-", 
    lim_inf_definitivo[k_definitivo + 1], "psi\n")
## * Rango: 80 - 1040 psi
# 5. Recalcular
intervalos_definitivos <- cut(Presion_Intake, 
                              breaks = lim_inf_definitivo, 
                              include.lowest = TRUE, 
                              right = FALSE)

frecuencia_definitiva <- table(intervalos_definitivos)
frecuencia_rel_definitiva <- frecuencia_definitiva / n
frecuencia_acum_definitiva <- cumsum(frecuencia_definitiva)
frecuencia_rel_acum_definitiva <- cumsum(frecuencia_rel_definitiva)

marca_clase_definitiva <- (lim_inf_definitivo[1:k_definitivo] + 
                             lim_inf_definitivo[2:(k_definitivo+1)]) / 2

# 6. Tabla DEFINITIVA
TDF_Presion_Definitiva <- data.frame(
  Li = round(lim_inf_definitivo[1:k_definitivo], 0),
  Ls = round(lim_inf_definitivo[2:(k_definitivo+1)], 0),
  MC = round(marca_clase_definitiva, 0),
  "ni (FA)" = as.numeric(frecuencia_definitiva),
  "hi (FR)" = round(as.numeric(frecuencia_rel_definitiva), 4),
  "Ni (FAA)" = as.numeric(frecuencia_acum_definitiva),
  "Hi (FRA)" = round(as.numeric(frecuencia_rel_acum_definitiva), 4)
)

# 7. Mostrar
cat("\n", rep("=", 70), "\n", sep = "")
## 
## ======================================================================
cat("TABLA DEFINITIVA (12 INTERVALOS DE 80 psi)\n")
## TABLA DEFINITIVA (12 INTERVALOS DE 80 psi)
cat(rep("=", 70), "\n\n", sep = "")
## ======================================================================
print(TDF_Presion_Definitiva)
##     Li   Ls   MC ni..FA. hi..FR. Ni..FAA. Hi..FRA.
## 1   80  160  120     482  0.0786      482   0.0786
## 2  160  240  200    1823  0.2973     2305   0.3760
## 3  240  320  280    1273  0.2076     3578   0.5836
## 4  320  400  360    1052  0.1716     4630   0.7552
## 5  400  480  440     509  0.0830     5139   0.8382
## 6  480  560  520     312  0.0509     5451   0.8891
## 7  560  640  600     242  0.0395     5693   0.9286
## 8  640  720  680     183  0.0298     5876   0.9584
## 9  720  800  760     104  0.0170     5980   0.9754
## 10 800  880  840      70  0.0114     6050   0.9868
## 11 880  960  920      53  0.0086     6103   0.9954
## 12 960 1040 1000      28  0.0046     6131   1.0000
# 8. Verificar
cat("\n✅ VERIFICACIÓN:\n")
## 
## ✅ VERIFICACIÓN:
cat("* Intervalos:", nrow(TDF_Presion_Definitiva), "\n")
## * Intervalos: 12
cat("* Suma ni:", sum(TDF_Presion_Definitiva$ni..FA.), "\n")
## * Suma ni: 6131
cat("* Último Hi:", tail(TDF_Presion_Definitiva$Hi..FRA., 1), "\n")
## * Último Hi: 1
# 9. Actualizar TODO
frec_acum <- as.numeric(frecuencia_acum_definitiva)
marca_clase <- marca_clase_definitiva
lim_inf <- lim_inf_definitivo
k <- k_definitivo
TDF_Presion <- TDF_Presion_Definitiva

cat("\n🎯 TABLA LISTA PARA GRÁFICAS\n")
## 
## 🎯 TABLA LISTA PARA GRÁFICAS

4. Gráficas de Análisis

4.1 Histograma

hist(Presion_Intake, 
     breaks = 12,
     col = "lightblue",
     main = "Histograma de Presion Intake",
     xlab = "Presion (psi)",
     ylab = "cantidad")

4.2. DIAGRAMA DE CAJA

boxplot(Presion_Intake,
        horizontal = TRUE,
        col = "lightgreen",
        main = "Diagrama de Caja",
        xlab = "Presion (psi)",
        ylab = "")

4.3. BARRAS POR CUARTILES

categorias <- cut(Presion_Intake, 
                  breaks = quantile(Presion_Intake, probs = seq(0, 1, 0.25)),
                  include.lowest = TRUE)

barplot(table(categorias),
        col = "lightcoral",
        main = "Distribucion por Cuartiles",
        xlab = "Cuartiles",
        ylab = "cantidad",
        las = 2)

4.4. OJIVA

# Configurar márgenes
par(mar = c(4, 4, 3, 1))

# Crear ojiva con puntos y líneas
plot(marca_clase, frec_acum,
     type = "b",
     pch = 19,
     col = "#2E7D32",
     lwd = 2,
     cex = 0.8,
     main = "Ojiva de Frecuencias Acumuladas",
     xlab = "Marca de Clase (psi)",
     ylab = "cantidad",
     las = 1,
     xlim = c(min(marca_clase), max(marca_clase) * 1.05),
     ylim = c(0, max(frec_acum) * 1.05))

# Cuadrícula sutil
grid(col = "gray90", lty = "dotted")

# Línea del 50%
abline(h = n/2, col = "#D32F2F", lty = 2, lwd = 1.5)

# Línea del 80%
abline(h = n * 0.8, col = "#1976D2", lty = 2, lwd = 1.5)

# Puntos en las líneas importantes
points(marca_clase[which.min(abs(frec_acum - n/2))], n/2, 
       col = "#D32F2F", pch = 17, cex = 1.2)

points(marca_clase[which.min(abs(frec_acum - n * 0.8))], n * 0.8, 
       col = "#1976D2", pch = 17, cex = 1.2)

# Etiquetas con fondo
text(max(marca_clase) * 0.7, n/2, 
     paste("50% (", round(n/2, 0), ")", sep = ""),
     col = "#D32F2F",
     cex = 0.8,
     font = 2,
     pos = 3)

text(max(marca_clase) * 0.7, n * 0.8, 
     paste("80% (", round(n * 0.8, 0), ")", sep = ""),
     col = "#1976D2",
     cex = 0.8,
     font = 2,
     pos = 3)

# Leyenda
legend("topleft",
       legend = c("Frecuencia Acumulada", "50% de los datos", "80% de los datos"),
       col = c("#2E7D32", "#D32F2F", "#1976D2"),
       lwd = c(2, 1.5, 1.5),
       lty = c(1, 2, 2),
       pch = c(19, 17, 17),
       cex = 0.7,
       bg = "white",
       box.lty = 1)

# Restaurar márgenes
par(mar = c(5, 4, 4, 2) + 0.1)

cat("✅ Ojiva profesional creada\n")
## ✅ Ojiva profesional creada

4. ESTADÍSTICOS DESCRIPTIVOS COMPLETOS

cat("\n", rep("=", 60), "\n", sep = "")
## 
## ============================================================
cat("ESTADISTICOS DESCRIPTIVOS - PRESION INTAKE\n")
## ESTADISTICOS DESCRIPTIVOS - PRESION INTAKE
cat(rep("=", 60), "\n\n", sep = "")
## ============================================================
# Instalar e1071 si es necesario
if(!require(e1071)) {
  install.packages("e1071", quiet = TRUE)
  library(e1071)
}
## Cargando paquete requerido: e1071
# Calcular todos los estadísticos
estadisticos <- list(
  "Tamaño de muestra" = n,
  "Media" = mean(Presion_Intake),
  "Mediana" = median(Presion_Intake),
  "Moda aproximada" = as.numeric(names(sort(table(round(Presion_Intake, 0)), decreasing = TRUE)[1])),
  "Desviacion estandar" = sd(Presion_Intake),
  "Varianza" = var(Presion_Intake),
  "Coeficiente de variacion" = (sd(Presion_Intake)/mean(Presion_Intake)) * 100,
  "Minimo" = min(Presion_Intake),
  "Maximo" = max(Presion_Intake),
  "Rango" = max(Presion_Intake) - min(Presion_Intake),
  "Primer cuartil (Q1)" = quantile(Presion_Intake, 0.25),
  "Tercer cuartil (Q3)" = quantile(Presion_Intake, 0.75),
  "Rango intercuartilico (IQR)" = IQR(Presion_Intake),
  "Asimetria (Skewness)" = skewness(Presion_Intake),
  "Curtosis (Kurtosis)" = kurtosis(Presion_Intake)
)

# Mostrar tabla de estadísticos
cat("TABLA DE ESTADISTICOS:\n")
## TABLA DE ESTADISTICOS:
cat(rep("-", 60), "\n", sep = "")
## ------------------------------------------------------------
for(i in seq_along(estadisticos)) {
  nombre <- names(estadisticos)[i]
  valor <- estadisticos[[i]]
  
  if(nombre == "Coeficiente de variacion") {
    cat(sprintf("%-30s: %6.1f %%\n", nombre, valor))
  } else if(nombre == "Tamaño de muestra") {
    cat(sprintf("%-30s: %6.0f\n", nombre, valor))
  } else if(nombre %in% c("Asimetria (Skewness)", "Curtosis (Kurtosis)")) {
    cat(sprintf("%-30s: %6.3f\n", nombre, valor))
  } else if(nombre %in% c("Varianza")) {
    cat(sprintf("%-30s: %6.1f psi²\n", nombre, valor))
  } else {
    cat(sprintf("%-30s: %6.1f psi\n", nombre, valor))
  }
}
## Tamaño de muestra           :   6131
## Media                         :  328.3 psi
## Mediana                       :  285.0 psi
## Moda aproximada               :  200.0 psi
## Desviacion estandar           :  170.6 psi
## Varianza                      : 29096.9 psi²
## Coeficiente de variacion      :   52.0 %
## Minimo                        :   82.0 psi
## Maximo                        :  998.0 psi
## Rango                         :  916.0 psi
## Primer cuartil (Q1)           :  200.0 psi
## Tercer cuartil (Q3)           :  392.0 psi
## Rango intercuartilico (IQR)   :  192.0 psi
## Asimetria (Skewness)          :  1.409
## Curtosis (Kurtosis)           :  1.867
cat(rep("-", 60), "\n\n", sep = "")
## ------------------------------------------------------------

5. CONCLUSIONES Y RECOMENDACIONES

cat("\n", rep("=", 60), "\n", sep = "")
## 
## ============================================================
cat("CONCLUSIONES Y RECOMENDACIONES\n")
## CONCLUSIONES Y RECOMENDACIONES
cat(rep("=", 60), "\n\n", sep = "")
## ============================================================
promedio_p <- mean(Presion_Intake)
cv_p <- sd(Presion_Intake)/mean(Presion_Intake) * 100
asimetria_p <- skewness(Presion_Intake)

cat("1. NIVEL DE PRESION OPERATIVA:\n")
## 1. NIVEL DE PRESION OPERATIVA:
cat("   * Presion promedio:", round(promedio_p, 0), "psi\n")
##    * Presion promedio: 328 psi
cat("   * Rango operativo tipico (IQR):", 
    round(quantile(Presion_Intake, 0.25), 0), "-", 
    round(quantile(Presion_Intake, 0.75), 0), "psi\n")
##    * Rango operativo tipico (IQR): 200 - 392 psi
cat("   * Este rango contiene el 50% central de las mediciones\n\n")
##    * Este rango contiene el 50% central de las mediciones
cat("2. ESTABILIDAD DEL SISTEMA:\n")
## 2. ESTABILIDAD DEL SISTEMA:
cat("   * Coeficiente de variacion (CV):", round(cv_p, 1), "%\n")
##    * Coeficiente de variacion (CV): 52 %
if(cv_p > 25) {
  cat("   * Clasificacion: ALTA VARIABILIDAD\n")
  cat("   * Implicacion: Fluctuaciones significativas en la presion\n")
  cat("   * Recomendacion: Investigar causas de inestabilidad\n")
} else if(cv_p > 15) {
  cat("   * Clasificacion: VARIABILIDAD MODERADA\n")
  cat("   * Implicacion: Fluctuaciones dentro de parametros aceptables\n")
  cat("   * Accion: Monitoreo continuo recomendado\n")
} else {
  cat("   * Clasificacion: BAJA VARIABILIDAD\n")
  cat("   * Implicacion: Sistema de presion estable\n")
  cat("   * Situacion: Condiciones operativas optimas\n")
}
##    * Clasificacion: ALTA VARIABILIDAD
##    * Implicacion: Fluctuaciones significativas en la presion
##    * Recomendacion: Investigar causas de inestabilidad
cat("\n3. ANALISIS DE LA DISTRIBUCION:\n")
## 
## 3. ANALISIS DE LA DISTRIBUCION:
cat("   * Asimetria:", round(asimetria_p, 3), "\n")
##    * Asimetria: 1.409
if(asimetria_p > 0.5) {
  cat("   * Tipo: Distribucion asimetrica positiva\n")
  cat("   * Interpretacion: Mas valores concentrados en el rango bajo\n")
} else if(asimetria_p < -0.5) {
  cat("   * Tipo: Distribucion asimetrica negativa\n")
  cat("   * Interpretacion: Mas valores concentrados en el rango alto\n")
} else {
  cat("   * Tipo: Distribucion aproximadamente simetrica\n")
  cat("   * Interpretacion: Valores bien distribuidos alrededor de la media\n")
}
##    * Tipo: Distribucion asimetrica positiva
##    * Interpretacion: Mas valores concentrados en el rango bajo
cat("\n4. CONCENTRACION DE LOS DATOS:\n")
## 
## 4. CONCENTRACION DE LOS DATOS:
cat("   * Intervalo modal: 160-240 psi\n")
##    * Intervalo modal: 160-240 psi
cat("   * % de datos en intervalo modal: 29.7%\n")
##    * % de datos en intervalo modal: 29.7%
cat("   * Nivel de concentracion: MODERADA-ALTA\n")
##    * Nivel de concentracion: MODERADA-ALTA
cat("\n5. RECOMENDACIONES OPERATIVAS:\n")
## 
## 5. RECOMENDACIONES OPERATIVAS:
cat("   * Mantener presion dentro del rango: 200-400 psi\n")
##    * Mantener presion dentro del rango: 200-400 psi
cat("   * Monitorear valores por encima de 600 psi\n")
##    * Monitorear valores por encima de 600 psi
cat("   * Revisar sistema cuando CV supere 20%\n")
##    * Revisar sistema cuando CV supere 20%
cat("\n", rep("-", 60), "\n", sep = "")
## 
## ------------------------------------------------------------
cat("ANALISIS COMPLETADO\n", sep = "")
## ANALISIS COMPLETADO
cat(rep("-", 60), "\n", sep = "")
## ------------------------------------------------------------