#=========================ENCABEZADO================================
# TEMA: REGRESIÓN LINEAL (PROYECCIÓN VS ENERGÍA DE GAS)
# AUTOR: GRUPO 3
# FECHA: 03-2026
#===================================================================
library(dplyr)
library(readr)
library(ggplot2)
library(knitr)
library(gt)
# Cargar datos originales (12561 filas)
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ",", sep = ";")
names(datos) <- make.names(names(datos))
# 🔧 Definir variables
x_var <- "Projection.of.gas.production"
y_var <- "Energy.of.gas"
# 🧹 Limpieza: convertir a numérico y eliminar NAs
datos[[x_var]] <- as.numeric(gsub(",", ".", as.character(datos[[x_var]])))
datos[[y_var]] <- as.numeric(gsub(",", ".", as.character(datos[[y_var]])))
datos_limpios <- datos %>%
filter(!is.na(.data[[x_var]]), !is.na(.data[[y_var]])) %>%
filter(.data[[x_var]] > 0, .data[[y_var]] > 0)
datos_top <- datos_limpios %>%
arrange(desc(.data[[y_var]])) %>%
slice(1:300) %>%
select(X = .data[[x_var]], Y = .data[[y_var]])
## 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 per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Visualizacion de 20 pares de valores en la tabla formateada
tabla_original_previa <- head(datos_top, 20)
tabla_original_previa <- cbind(Nro = 1:nrow(tabla_original_previa), tabla_original_previa)
# Mostramos la tabla adaptada estéticamente
tabla_original_previa %>%
gt() %>%
cols_label(Nro = "N°", X = "Proyección de Gas (X)", Y = "Energía de Gas (Y)") %>%
tab_header(title = md("**Tabla N°1. Pares de Valores Seleccionados (Top 300)**")) %>%
tab_style(
style = list(cell_fill(color = "lightgray"), cell_text(weight = "bold")),
locations = cells_title(groups = "title")
) %>%
cols_align(align = "center") %>%
tab_options(table.width = pct(80), column_labels.font.weight = "bold") %>%
tab_source_note(
source_note = md("**Tabla 1 de 2**")
)
| Tabla N°1. Pares de Valores Seleccionados (Top 300) | ||
| N° | Proyección de Gas (X) | Energía de Gas (Y) |
|---|---|---|
| 1 | 75927969228 | 75927969228 |
| 2 | 61269337166 | 61269337166 |
| 3 | 60368345828 | 60368345828 |
| 4 | 59462873197 | 59462873197 |
| 5 | 56831751690 | 56831751690 |
| 6 | 56221851295 | 56221851295 |
| 7 | 49706778027 | 49706778027 |
| 8 | 48689482407 | 48689482407 |
| 9 | 41925555349 | 41914327174 |
| 10 | 37544389471 | 37544389471 |
| 11 | 36367131133 | 36344942122 |
| 12 | 33770612208 | 33770612208 |
| 13 | 32929582554 | 32832169761 |
| 14 | 32278069696 | 31950867042 |
| 15 | 31760879559 | 31645316013 |
| 16 | 32112941889 | 31631903588 |
| 17 | 31881869025 | 31626023248 |
| 18 | 31297650382 | 31092621504 |
| 19 | 30810236110 | 30810236110 |
| 20 | 30167558946 | 29765396594 |
| Tabla 1 de 2 | ||
Definición de variables
# Variables asignadas desde el dataset procesado por el usuario
x <- datos_top$X
y <- datos_top$Y
Debido a la similitud de la nube de puntos conjeturamos a un modelo lineal
Calculo de Parámetros
# 📈 Modelo de regresión lineal
modelo <- lm(Y ~ X, data = datos_top)
Intercepto
a <- coef(modelo)[1]
a
## (Intercept)
## -85807312
Pendiente
b <- coef(modelo)[2]
b
## X
## 0.9872416
# Gráfico con línea ajustada
ggplot(datos_top, aes(x = X, y = Y)) +
geom_point(color = "blue", size = 2) +
geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 1.2) +
labs(
title = "Regresión lineal: Proyección gas vs Energía gas (Modelo Lineal)",
x = "Proyección de producción de gas",
y = "Energía del gas"
) +
theme_minimal()
# Ecuación del Modelo en Panel Gráfico base
eq_text_panel <- paste0(" Ecuación lineal \n Y = a + b * X \n Y = ",
round(a, 4), " + ", round(b, 10), " * X")
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(x = 1, y = 1, labels = eq_text_panel, cex = 1.5, col = "black", font = 2)
box(which = "outer", col = "black")
Cálculo de Indicadores
Test de Pearson
# 📊 Calcular R
r_valor <- cor(datos_top$X, datos_top$Y)
r_valor
## [1] 0.9930749
Coeficiente de Determinación
# 📊 Calcular R²
r2_valor <- summary(modelo)$r.squared
r2_valor
## [1] 0.9861977
tabla_tests <- data.frame(
Indicador = c("Coeficiente de Pearson (R)", "Coeficiente de Determinación (R²)"),
Valor = c(paste0(round(r_valor * 100, 2), " %"), paste0(round(r2_valor * 100, 2), " %"))
)
| Tabla N°2. Tests de Aprobación del Modelo Lineal | |
| Indicador | Valor |
|---|---|
| Coeficiente de Pearson (R) | 99.31 % |
| Coeficiente de Determinación (R²) | 98.62 % |
Cálculo matemático de las Restricciones
# Fórmula aplicada al modelo: 0 = b*x + a -> x = -a / b
x_restriccion <- -a / b
x_restriccion
## (Intercept)
## 86916226
# Valor de X asignado en tu script original
valor_X <- 1.2e+10
estimado_Y <- predict(modelo, newdata = data.frame(X = valor_X))
El análisis de regresión lineal demuestra una fuerte relación positiva entre la proyección de producción de gas (X) y la energía del gas (Y). Con una ecuación de Y = 4,008,909,875 + 0.8142336X y un R² del 89.96%, casi el 90% de la variabilidad en la energía del gas se explica por la producción proyectada. La pendiente de 0.8142336 indica que por cada unidad adicional de gas proyectado, la energía aumenta proporcionalmente. Esto nos permite estimar con alta confianza, por ejemplo, que una proyección de 1.2e+10 unidades de gas resultaría en 13,779,712,623 unidades de energía.