# Instalar los paquetes necesarios (solo la primera vez)
# install.packages("readxl")
# install.packages("plotly")
# install.packages("dplyr")

library(readxl)
library(plotly)
## Warning: package 'plotly' was built under R version 4.4.3
## Cargando paquete requerido: ggplot2
## 
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
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
getwd()
## [1] "C:/Users/uac_facsoc/Desktop"
# Especifica la ruta a tu archivo de Excel, en mi caso:
ruta_excel <- "C:/Users/uac_facsoc/Desktop/Gráfico_R_MCO.xlsx" 

# Carga la hoja de datos. Asegúrate de que los nombres de las columnas
# sean claros (por ejemplo: 'Y', 'X1', 'X2').
datos_regresion <- read_excel(ruta_excel, sheet = 1) 

# Mostrar las primeras filas para verificar la carga
head(datos_regresion)
## # A tibble: 6 × 5
##     Año     n     Y    X1    X2
##   <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  1971     1    40     6     4
## 2  1972     2    44    10     4
## 3  1973     3    46    12     5
## 4  1974     4    48    14     7
## 5  1975     5    52    16     9
## 6  1976     6    58    18    12
# Define tu modelo: Y en función de X1 y X2
modelo_rlm <- lm(Y ~ X1 + X2, data = datos_regresion)

# Ver el resumen del modelo (opcional, pero útil)
summary(modelo_rlm)
## 
## Call:
## lm(formula = Y ~ X1 + X2, data = datos_regresion)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8199 -0.7304  0.1302  0.9173  1.8108 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  31.9807     1.6318  19.598 2.25e-07 ***
## X1            0.6501     0.2502   2.599  0.03550 *  
## X2            1.1099     0.2674   4.150  0.00429 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.397 on 7 degrees of freedom
## Multiple R-squared:  0.9916, Adjusted R-squared:  0.9892 
## F-statistic: 414.8 on 2 and 7 DF,  p-value: 5.356e-08
# 1. Crear una malla de valores para X1 y X2
range_X1 <- seq(min(datos_regresion$X1), max(datos_regresion$X1), length.out = 30)
range_X2 <- seq(min(datos_regresion$X2), max(datos_regresion$X2), length.out = 30)

grid_data <- expand.grid(X1 = range_X1, X2 = range_X2)

# 2. Predecir Y en cada punto de la malla usando el modelo ajustado
grid_data$Y_pred <- predict(modelo_rlm, newdata = grid_data)

# 3. Convertir las predicciones a una matriz para plot_ly
Z_predicha <- matrix(grid_data$Y_pred, 
                     nrow = length(range_X1), 
                     ncol = length(range_X2), 
                     byrow = FALSE)
# 1. Trazar la Superficie (Plano de Regresión)
fig <- plot_ly(
  x = range_X1, 
  y = range_X2, 
  z = Z_predicha, 
  type = "surface",
  opacity = 0.7, 
  name = "Plano de Regresión",
  showscale = FALSE # Ocultar la barra de color de la superficie
)

# 2. Añadir los Puntos de Dispersión (Datos Reales)
fig <- fig %>% add_markers(
  data = datos_regresion,
  x = ~X1, 
  y = ~X2, 
  z = ~Y,
  marker = list(
    size = 4, 
    color = 'green', 
    line = list(color = 'black', width = 0.5)
  ),
  name = "Datos Reales",
  inherit = FALSE # Indispensable
)

# 3. Personalizar Ejes y Título
fig <- fig %>% layout(
  title = "Regresión Lineal Múltiple: Plano Ajustado vs. Datos Reales",
  scene = list(
    xaxis = list(title = "Predictor X1"),
    yaxis = list(title = "Predictor X2"),
    zaxis = list(title = "Respuesta Y")
  )
)

fig # Mostrar el gráfico interactivo