# ==========================================================
# 1. CARGA DE LIBRERÍAS Y DATOS 
# ==========================================================
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)
library(gt)

# Configuración de directorio y carga de archivo
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ",", sep = ";")

# ==========================================================
# 2. TABLA PARES DE VALORES
# ==========================================================
# Extraer variables y asegurar formato numérico
acero    <- as.numeric(datos$Impact.steel.production..pad.)
concreto <- as.numeric(datos$Impact.concrete.production..pad.)

# Crear TPV
TPV <- data.frame(acero = acero, concreto = concreto)

# Limpieza de datos: Omitir NA, Negativos y Ceros
TPV <- na.omit(TPV)
TPV <- TPV[TPV$acero > 0 & TPV$concreto > 0, ]

# Ordenar la tabla por acero
TPV <- TPV[order(TPV$acero), ]

# --- RESETEAR NUMERACIÓN DE FILAS ---
# Esto hace que la numeración sea 1, 2, 3... en orden
row.names(TPV) <- NULL 

# --- MOSTRAR TABLA ---
cat("TABLA DE PARES DE VALORES (Vista previa de los primeros 20 registros):\n")
## TABLA DE PARES DE VALORES (Vista previa de los primeros 20 registros):
print(head(TPV, 20)) 
##    acero   concreto
## 1     61  1192.0000
## 2     63 14486.0000
## 3    252   268.2254
## 4    263  4265.0000
## 5    276   151.3906
## 6    299   423.7084
## 7    301   451.6449
## 8    311   217.4264
## 9    393  1317.0000
## 10   407  3183.0000
## 11   411   183.9818
## 12   413  1258.0000
## 13   417   134.7734
## 14   427  3297.0000
## 15   478   354.0747
## 16   479 33353.0000
## 17   492   123.5320
## 18   557   297.0455
## 19   590   405.2918
## 20   603   113.7859
# Definición de variables finales
x <- TPV$acero    
y <- TPV$concreto 

# Selección aleatoria del 50% solo para la representación visual (Gráficas)
set.seed(123)
indice_visual <- sample(1:nrow(TPV), nrow(TPV) / 20)

# ==========================================================
# 3. DIAGRAMA DE DISPERSIÓN (VISTA 50%)
# ==========================================================
plot(x[indice_visual], y[indice_visual],
     pch = 16,
     col = "blue",
     main = "Gráfica N°1: Diagrama de dispersión entre Impacto \n producción de acero e impacto producción de concreto",
     xlab = "Impacto producción de acero (pad)",
     ylab = "Impacto producción de concreto (pad)")

# ==========================================================
# 4. CONJETURA DEL MODELO
# ==========================================================
# Cálculo de parámetros lineales sobre el total de datos
regresion_lineal <- lm(y ~ x)
a_intercepto <- coef(regresion_lineal)[1]
b_pendiente  <- coef(regresion_lineal)[2]

# Gráfica comparativa con la recta de regresión (Puntos 50%)
plot(x[indice_visual], y[indice_visual],
     pch = 16,
     col = "blue",
     main = "Gráfica N°2: Comparación de la realidad con el modelo lineal",
     xlab = "Impacto producción de acero (pad)",
     ylab = "Impacto producción de concreto (pad)")

abline(regresion_lineal, col = "red", lwd = 2)

# Mostrar Ecuación Lineal
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
eq_text <- paste0("Ecuación lineal\n Y = bx + a\n Y = ", 
                  round(b_pendiente, 4), "x + ", round(a_intercepto, 4))
text(x = 1, y = 1, labels = eq_text, cex = 1.5, col = "blue", font = 2)

# ==========================================================
# 5. TEST DE APROBACIÓN Y RESTRICCIONES
# ==========================================================
# Test de Pearson
r <- cor(x, y)
cat("\nTest de Pearson (r*100):", round(r * 100, 2), "%\n")
## 
## Test de Pearson (r*100): 94.12 %
# Coeficiente de determinación (R^2)
r2 <- r^2
cat("Coeficiente de determinación (R2*100):", round(r2 * 100, 2), "%\n")
## Coeficiente de determinación (R2*100): 88.59 %
# Restricciones
cat("\nRESTRICCIONES:\n")
## 
## RESTRICCIONES:
cat("Se debe validar que los valores de producción no resulten negativos según el modelo.")
## Se debe validar que los valores de producción no resulten negativos según el modelo.
# ==========================================================
# 6. CÁLCULO DE PRONÓSTICOS
# ==========================================================
x_prueba <- 100 
pronostico <- (b_pendiente * x_prueba) + a_intercepto

plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(x = 1, y = 1,
     labels = paste0("¿Qué impacto en concreto se espera\n con un impacto de acero de ", x_prueba, " pad?\n\n R = ", round(pronostico, 4), " pad"),
     cex = 1.5, col = "blue", font = 2)

# ==========================================================
# 7. CONCLUSIÓN
# ==========================================================
cat("\n--- CONCLUSIÓN ---\n")
## 
## --- CONCLUSIÓN ---
cat(paste0("Entre la producción de acero y la de concreto existe una relación tipo lineal "))
## Entre la producción de acero y la de concreto existe una relación tipo lineal
cat(paste0("representada por el modelo f(x) = ", round(b_pendiente, 4), "x + ", round(a_intercepto, 4), ". "))
## representada por el modelo f(x) = 1.3808x + 1825.6326.
cat(paste0("El impacto del acero influye en un ", round(r2 * 100, 2), "% sobre la variabilidad del concreto. "))
## El impacto del acero influye en un 88.59% sobre la variabilidad del concreto.
cat(paste0("Ejemplo: Para un impacto de acero de ", x_prueba, " pad, se espera un impacto de ", round(pronostico, 2), " pad en el concreto."))
## Ejemplo: Para un impacto de acero de 100 pad, se espera un impacto de 1963.71 pad en el concreto.