# ==========================================================
# 1. CARGA DE LIBRERIAS 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)
# Configuracion de directorio y carga de archivo
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, sep = ";", dec = ",")
# ==========================================================
# 2. TABLA PARES DE VALORES
# ==========================================================
# Extraer variables y asegurar formato numerico
pendiente <- as.numeric(datos$Slope)
volumen <- as.numeric(datos$Volume.excavated.soil..slope)
# Crear TPV y limpiar datos (NA)
TPV <- data.frame(pendiente = pendiente, volumen = volumen)
TPV <- na.omit(TPV)
# --- RESETEAR NUMERACION DE FILAS ---
row.names(TPV) <- NULL
# --- MOSTRAR TABLA (Primeros 20 registros) ---
cat("TABLA DE PARES DE VALORES (Vista previa):\n")
## TABLA DE PARES DE VALORES (Vista previa):
print(head(TPV, 20))
## pendiente volumen
## 1 0 885
## 2 0 31
## 3 0 237
## 4 0 362
## 5 1 7838
## 6 0 165
## 7 0 245
## 8 4 24829
## 9 0 193
## 10 0 417
## 11 1 8340
## 12 3 20965
## 13 0 169
## 14 0 486
## 15 6 25959
## 16 0 2290
## 17 0 1048
## 18 0 370
## 19 0 99
## 20 0 1173
x <- TPV$pendiente # Variable Independiente
y <- TPV$volumen # Variable Dependiente
# Seleccion aleatoria del 50% solo para representacion visual
set.seed(123)
indice_visual <- sample(1:nrow(TPV), nrow(TPV) / 10)
# ==========================================================
# 3. DIAGRAMA DE DISPERSION (GRAFICA N1)
# ==========================================================
plot(x[indice_visual], y[indice_visual],
pch = 16,
col = rgb(0, 0, 0.8),
main = "Grafica Nº1: Diagrama de dispersion entre la Pendiente \n y el Volumen de suelo excavado",
xlab = "Pendiente (Slope)",
ylab = "Volumen de suelo (m3)")

# ==========================================================
# 4. CONJETURA DEL MODELO (POLINOMICO GRADO 4)
# ==========================================================
# Crear potencias para el modelo
xcuad <- x^2
xcub <- x^3
# Calculo de parametros (Ajustado a Grado 3)
regresion_polinomica <- lm(y ~ x + xcuad + xcub)
a <- coef(regresion_polinomica)[1]
b <- coef(regresion_polinomica)[2]
c <- coef(regresion_polinomica)[3]
d <- coef(regresion_polinomica)[4]
# Graficar comparacion realidad vs modelo (GRAFICA N2)
plot(x[indice_visual], y[indice_visual],
pch = 16, col = rgb(0, 0, 0.8),
main = "Grafica Nº2: Comparacion de la realidad con el \n modelo polinomico",
xlab = "Pendiente", ylab = "Volumen de suelo")
curve(a + b*x + c*x^2 + d*x^3,
from = min(x), to = max(x), add = TRUE, col = "red", lwd = 3)

# Mostrar Ecuacion en pantalla (GRAFICA N3)
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
eq <- paste0("Ecuacion polinomica (grado 3)\n",
"Y = a + bX + cX^2 + dX^3\n\n",
"Y = ", round(a, 3), " + ", round(b, 3), "X + ",
round(c, 3), "X^2 + ", round(d, 3), "X^3")
text(1, 1, labels = eq, cex = 1.1, col = "blue", font = 2)

# ==========================================================
# 5. TEST DE APROBACION Y RESTRICCIONES
# ==========================================================
# Test de Correlacion
r <- cor(y, x + xcuad + xcub)
cat("\nTest de Pearson (r*100):", round(r * 100, 2), "%\n")
##
## Test de Pearson (r*100): 31.97 %
# Restricciones
cat("\nRESTRICCIONES:\n")
##
## RESTRICCIONES:
cat("El modelo solo es confiable dentro del rango observado de la pendiente.
La extrapolacion puede generar valores inconsistentes en modelos de grado superior.")
## El modelo solo es confiable dentro del rango observado de la pendiente.
## La extrapolacion puede generar valores inconsistentes en modelos de grado superior.
# ==========================================================
# 6. CALCULO DE PRONOSTICOS (GRAFICA N4)
# ==========================================================
x0 <- 15 # Valor de prueba para la pendiente
vol_esp <- a + b*x0 + c*x0^2 + d*x0^3
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(1, 1,
labels = paste0("Grafica Nº4: Pronostico\n\n",
"Cual seria el volumen de suelo esperado\n",
"si la pendiente es de ", x0, "?\n\n",
"R = ", round(vol_esp, 2), " m3"),
cex = 1.5, col = "blue", font = 2)

# ==========================================================
# 7. CONCLUSION
# ==========================================================
cat("\n--- CONCLUSION ---\n")
##
## --- CONCLUSION ---
cat(paste0("Entre la pendiente y el volumen de suelo excavado se observa una relacion polinomial "))
## Entre la pendiente y el volumen de suelo excavado se observa una relacion polinomial
cat(paste0("de tercer grado, representada por el modelo f(x) = ", round(a, 3), " + ", round(b, 3),
"X + ", round(c, 3), "X^2 + ", round(d, 3), "X^3. "))
## de tercer grado, representada por el modelo f(x) = 1441.85 + 8503.828X + -589.999X^2 + 11.878X^3.
cat(paste0("Ejemplo: Cuando la pendiente es de ", x0, ", el modelo predice un volumen de ",
round(vol_esp, 2), " m3."))
## Ejemplo: Cuando la pendiente es de 15, el modelo predice un volumen de 36337.91 m3.