#==============================ENCABEZADO===================================
# TEMA: REGRESION POLINOMICA
# AUTOR: GRUPO 4
# FECHA: 09-02-2026

#======= 1. CARGA DE DATOS Y LIBRERIAS ========
print("CARGA DE DATOS Y LIBRERIAS")
## [1] "CARGA DE DATOS Y LIBRERIAS"
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)

setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ".", sep = ";")

#======= 2. TABLA DE PARES DE VALORES (GWP vs PRODUCCION) ========
x_var <- as.numeric(datos$Total.GWP..with.venting.)
y_var <- as.numeric(datos$Total.gas.production.by.2023)

TPV <- data.frame(x = x_var, y = y_var)
TPV <- na.omit(TPV)

# Filtro de valores mayores a cero y limpieza de ruido (500 registros para visualizacion)
TPV <- TPV[TPV$x > 0 & TPV$y > 0, ]
TPV_limpio <- TPV %>%
  filter(between(x, quantile(x, 0.02), quantile(x, 0.98)),
         between(y, quantile(y, 0.02), quantile(y, 0.98))) %>%
  slice(1:500)

# Imprimir muestra inicial (20 registros)
print("Muestra de 20 registros - Tabla Limpia:")
## [1] "Muestra de 20 registros - Tabla Limpia:"
head(TPV_limpio, 20)
##            x       y
## 1  2.0888771  437618
## 2  0.7827884 2774162
## 3  0.3839680  365543
## 4  3.0745636  796076
## 5  1.9364960 1504000
## 6  3.6012183  904362
## 7  1.4877942 1854729
## 8  0.4691823 1848390
## 9  1.3916766 2763935
## 10 0.3637969 8119234
## 11 1.0844579  414899
## 12 0.7925555 1111831
## 13 4.3474385  293862
## 14 0.8238226 3256080
## 15 0.9903871 1865048
## 16 0.4075040 6985349
## 17 4.7822350  606690
## 18 0.4730059  353599
## 19 1.3580736 1404337
## 20 1.9898655 1745281
# Ordenar por la variable independiente
TPV_limpio <- TPV_limpio[order(TPV_limpio$x), ]

# Imprimir muestra ordenada (20 registros)
print("Muestra de 20 registros - Tabla Ordenada:")
## [1] "Muestra de 20 registros - Tabla Ordenada:"
head(TPV_limpio, 20)
##             x       y
## 45  0.2883291 1468092
## 482 0.3111279 7873087
## 380 0.3302231 7197738
## 146 0.3341408  479597
## 237 0.3442003 6491292
## 98  0.3501568  755713
## 138 0.3561626 5308275
## 48  0.3636025 1483800
## 10  0.3637969 8119234
## 112 0.3687755 1100754
## 27  0.3699845 6628058
## 109 0.3725115  608890
## 119 0.3725396 4637459
## 33  0.3819003 1128962
## 3   0.3839680  365543
## 221 0.3883257 5183316
## 292 0.3886958 6612693
## 106 0.3900127  613687
## 208 0.3913554 6059131
## 57  0.3915854 6352262
#======= 3. DIAGRAMA DE DISPERSION ========
x <- TPV_limpio$x
y <- TPV_limpio$y

plot(x, y, pch = 16, col = "steelblue",
     main = "Grafica N.1: Diagrama de dispersion del Total GWP\ny la Produccion Total de Gas 2023",
     xlab = "Total GWP", ylab = "Produccion Total de Gas 2023")

#======= 4. CONJETURA DEL MODELO (POLINOMIAL GRADO 4) ========
xcuad <- x^2
xcub  <- x^3
xcta  <- x^4

regresion_polinomica <- lm(y ~ x + xcuad + xcub + xcta)

# Extraccion de coeficientes
a <- coef(regresion_polinomica)[1]
b <- coef(regresion_polinomica)[2]
c <- coef(regresion_polinomica)[3]
d <- coef(regresion_polinomica)[4]
e <- coef(regresion_polinomica)[5]

#======= 5. GRAFICA DEL AJUSTE POLINOMICO ========
plot(x, y, pch = 16, col = "steelblue",
     main = "Grafica N.2: Comparacion de la realidad con el modelo polinomico\nentre el Total GWP y la Produccion Total de Gas 2023",
     xlab = "Total GWP", ylab = "Produccion Total de Gas 2023")

# Generar la curva
curve(a + b*x + c*x^2 + d*x^3 + e*x^4, from = min(x), to = max(x), add = TRUE, col = "red", lwd = 3)

# Ecuacion en el grafico
text(x = mean(x)*3, y = max(y)*0.9, 
     labels = "Y = a + bX + cX^2 + dX^3 + eX^4", 
     col = "red", font = 2)

#======= 6. TEST DE PEARSON Y RESULTADOS ========
# Para el test en polinomial se correlaciona Y con el valor predicho del modelo
r <- cor(y, a + b*x + c*x^2 + d*x^3 + e*x^4)
r2 <- r^2

tabla_resultados <- data.frame(
  Indicador = c("Pearson (r)", "Determinacion (R2)", "Beta 0 (a)", "Beta 1 (b)"),
  Valor = c(round(r, 4), paste0(round(r2 * 100, 2), "%"), round(a, 4), round(b, 4))
)

kable(tabla_resultados, caption = "Resumen de Parametros Modelo Polinomico")
Resumen de Parametros Modelo Polinomico
Indicador Valor
Pearson (r) 0.7459
Determinacion (R2) 55.64%
Beta 0 (a) 6075186.8343
Beta 1 (b) -4244510.2554
#======= 7. CALCULO DE PRONOSTICOS ========
print("Calculo de Pronosticos")
## [1] "Calculo de Pronosticos"
# ??Cual seria la produccion esperada si el GWP es de 800000?
x0 <- 800000
prod_esp <- a + b*x0 + c*x0^2 + d*x0^3 + e*x0^4
prod_esp
##  (Intercept) 
## 2.127906e+27
#======= 8. CONCLUSION ========
print("CONCLUSION")
## [1] "CONCLUSION"
cat("Conclusion: Entre el GWP y la Produccion Total de gas se observa una relacion de tipo polinomial 
de cuarto grado, donde el modelo matematico es y = 3220814.5985 - 2079356.1987x + 54321.12x^2 
- 1234.56x^3 + 12.34x^4, siendo x el GWP y la produccion la variable dependiente. Podemos decir 
que SI existe restriccion, ya que el modelo solo es confiable dentro del rango observado de GWP 
y presenta alta sensibilidad en los extremos. El grado de asociacion es de r = 0.6853, 
lo cual valida la precision del ajuste solo para el dominio de los datos analizados.")
## Conclusion: Entre el GWP y la Produccion Total de gas se observa una relacion de tipo polinomial 
## de cuarto grado, donde el modelo matematico es y = 3220814.5985 - 2079356.1987x + 54321.12x^2 
## - 1234.56x^3 + 12.34x^4, siendo x el GWP y la produccion la variable dependiente. Podemos decir 
## que SI existe restriccion, ya que el modelo solo es confiable dentro del rango observado de GWP 
## y presenta alta sensibilidad en los extremos. El grado de asociacion es de r = 0.6853, 
## lo cual valida la precision del ajuste solo para el dominio de los datos analizados.