1 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 ...

2 Instalacion de Librerias

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
library(ggplot2)
library(gridExtra) 
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(grid)
library(scales)

3 Modelo de Regresion Lineal 1

3.1 Definicion de variables y valor para predicción

x_var <- "Liberacion_petroleo_crudo_edicion"
y_var <- "Edicion_recuperacion_petroleo_crudo"
valor_X <- 10000

3.2 Filtracion de datos

datos[[x_var]] <- as.numeric(gsub(",", ".", as.character(datos[[x_var]])))
datos[[y_var]] <- as.numeric(gsub(",", ".", as.character(datos[[y_var]])))

datos_modelo <- datos %>% select(X = .data[[x_var]], 
                                 Y = .data[[y_var]]) %>% na.omit()
## Warning: Use of .data in tidyselect expressions was deprecated in tidyselect 1.2.0.
## ℹ Please use `all_of(var)` (or `any_of(var)`) instead of `.data[[var]]`
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
cat("Datos disponibles para graficar:", nrow(datos_modelo), "\n")
## Datos disponibles para graficar: 8522

3.3 Modelo

3.3.1 Ajuste modelo lineal simple Y ~ X

modelo_completo <- lm(Y ~ X, data = datos_modelo)

3.3.2 Extraccion de coeficiente de determinación y correlación con signo

r2_completo <- summary(modelo_completo)$r.squared
r_completo <- sqrt(r2_completo) * sign(coef(modelo_completo)[2])

3.3.3 Predicción para valor_X

pred_Y_completo <- predict(modelo_completo, newdata = data.frame(X = valor_X))

3.3.4 Tabla Final con datos completos

tabla_completo <- data.frame(
  Parámetro = c("Coeficiente de correlación (R)",
                "Coeficiente de determinación (R²)",
                "Intercepto (a)",
                "Pendiente (b)",
                "Valor X para predicción",
                "Predicción Y"),
  Valor = c(round(r_completo, 4),
            round(r2_completo, 4),
            round(coef(modelo_completo)[1], 4),
            round(coef(modelo_completo)[2], 4),
            valor_X,
            round(pred_Y_completo, 2))
)

print("=== Resultados: Modelo con todos los datos ===")
## [1] "=== Resultados: Modelo con todos los datos ==="
print(tabla_completo)
##                           Parámetro      Valor
## 1    Coeficiente de correlación (R)     0.9669
## 2 Coeficiente de determinación (R²)     0.9348
## 3                    Intercepto (a)  -277.7684
## 4                     Pendiente (b)     0.9116
## 5           Valor X para predicción 10000.0000
## 6                      Predicción Y  8838.1800

3.3.5 Grafica

grafico_completo <- ggplot(datos_modelo, aes(x = X, y = Y)) +
  geom_point(color = "skyblue", alpha = 0.5) +
  geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 1.2) +
  geom_point(aes(x = valor_X, y = pred_Y_completo), 
             color = "darkgreen", size = 3) +
  scale_x_continuous(labels = comma) +
  scale_y_continuous(labels = comma) +
  labs(
  title = "Modelo Regresion Lineal 1",
    x = "Liberación de petróleo crudo",
    y = "Recuperación de petróleo crudo") +
  theme_minimal()
print(grafico_completo)
## `geom_smooth()` using formula = 'y ~ x'

4 Modelo de Regresion Lineal 2 con los 3400 casos con mayor recuperación

4.1 Definicion de variables y valor para predicción

x_var <- "Liberacion_petroleo_crudo_edicion"
y_var <- "Edicion_recuperacion_petroleo_crudo"
valor_X <- 10000  # Valor para hacer predicción

datos[[x_var]] <- as.numeric(gsub(",", ".", as.character(datos[[x_var]])))
datos[[y_var]] <- as.numeric(gsub(",", ".", as.character(datos[[y_var]])))

4.2 Filtracion de datos y limite de rango

datos_filtrados <- datos %>%
  filter(!is.na(.data[[x_var]]), !is.na(.data[[y_var]])) %>%
  filter(.data[[x_var]] >= 0, .data[[x_var]] <= 78612)

cat("Datos disponibles para graficar:", nrow(datos_filtrados), "\n")
## Datos disponibles para graficar: 8521
datos_top <- datos_filtrados %>%
  arrange(desc(.data[[y_var]])) %>%
  slice_head(n = 3400) %>%
  select(X = .data[[x_var]], Y = .data[[y_var]])

4.3 Modelo

4.3.1 Ajuste modelo lineal simple Y ~ X

modelo_lineal <- lm(Y ~ X, data = datos_top)

4.3.2 Extraccion de coeficiente de determinación y correlación con signo

r2_valor <- summary(modelo_lineal)$r.squared
r_valor <- sqrt(r2_valor) * sign(coef(modelo_lineal)[2])

4.3.3 Predicción para valor_X

estimado_Y <- predict(modelo_lineal, newdata = data.frame(X = valor_X))

4.3.4 Tabla Final con datos completos

tabla_completo <- data.frame(
  Parámetro = c("Coeficiente de correlación (R)",
                "Coeficiente de determinación (R²)",
                "Intercepto (a)",
                "Pendiente (b)",
                "Valor X para predicción",
                "Predicción Y"),
  Valor = c(round(r_completo, 4),
            round(r2_completo, 4),
            round(coef(modelo_completo)[1], 4),
            round(coef(modelo_completo)[2], 4),
            valor_X,
            round(pred_Y_completo, 2))
)

print("=== Resultados: Modelo con todos los datos ===")
## [1] "=== Resultados: Modelo con todos los datos ==="
print(tabla_completo)
##                           Parámetro      Valor
## 1    Coeficiente de correlación (R)     0.9669
## 2 Coeficiente de determinación (R²)     0.9348
## 3                    Intercepto (a)  -277.7684
## 4                     Pendiente (b)     0.9116
## 5           Valor X para predicción 10000.0000
## 6                      Predicción Y  8838.1800

4.3.5 Grafica

grafico_top <- ggplot(datos_top, aes(x = X, y = Y)) +
  geom_point(color = "pink", size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 1.2) +
  annotate("point", x = valor_X, y = estimado_Y, color = "darkgreen", size = 4) +
  labs(
    title = "Modelo Regresion Lineal 2",
    x = "Liberación del petroleo crudo",
    y = "Recuperación del petroleo crudo"
  ) +
  theme_minimal()

print(grafico_top)
## `geom_smooth()` using formula = 'y ~ x'

4.4 Comparacion de modelos

4.4.1 Graficas de los dos modelos juntos

gridExtra::grid.arrange(grafico_completo, grafico_top, ncol = 2)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

4.4.2 Tabla comparativa

tabla_comparativa <- data.frame(
  Parametro = c(
    "Coeficiente de correlación (R)",
    "Coeficiente de determinación (R²)",
    "Intercepto",
    "Pendiente",
    "Valor X para predicción",
    "Predicción de Y"
  ),
  `Modelo con todos los datos` = c(
    round(cor(datos_modelo$X, datos_modelo$Y), 4),
    round(summary(modelo_completo)$r.squared, 4),
    round(coef(modelo_completo)[1], 4),
    round(coef(modelo_completo)[2], 4),
    valor_X,
    round(pred_Y_completo, 4)
  ),
  `  Modelo con top 3400 datos` = c(
    round(cor(datos_top$X, datos_top$Y), 4),
    round(summary(modelo_lineal)$r.squared, 4),
    round(coef(modelo_lineal)[1], 4),
    round(coef(modelo_lineal)[2], 4),
    valor_X,
    round(estimado_Y, 4)
  ),
  check.names = FALSE # Permite usar nombres con espacios
)

if (require(knitr)) {
  knitr::kable(tabla_comparativa, caption = "Comparación de modelos lineales")
}
## Loading required package: knitr
Comparación de modelos lineales
Parametro Modelo con todos los datos Modelo con top 3400 datos
Coeficiente de correlación (R) 0.9669 0.9356
Coeficiente de determinación (R²) 0.9348 0.8754
Intercepto -277.7684 2.1145
Pendiente 0.9116 0.8094
Valor X para predicción 10000.0000 10000.0000
Predicción de Y 8838.1752 8095.6239