EJERCICIO 1: Comenzamos generando los datos de clase, junto a las librerías necesarias.

library(tidyverse)
set.seed(1234)
datos <- data.frame(
  Fertilizacion = round(runif(100, 20, 100),1),
  Riego = round(runif(100, 50, 200),2),
  Plagas = round(runif(100, 0, 10)),
  Error = round(rnorm(100,0, 5),2)) %>%
  mutate(Produccion = 50 + 2*Fertilizacion + 1.5*Riego - 3*Plagas+Error)
print(head(datos))
##   Fertilizacion  Riego Plagas Error Produccion
## 1          29.1  55.32      7 -1.89    168.290
## 2          69.8 134.76      5  0.49    377.230
## 3          68.7  92.04      3  8.19    324.650
## 4          69.9  80.63      8 -4.38    282.365
## 5          88.9  70.06      5  0.61    318.500
## 6          71.2  98.85      7  6.81    326.485

EJERCICIO 2: Ajustamos un modelo de regresión lineal múltiple.

modelo <- lm(Produccion ~Fertilizacion + Riego + Plagas, data = datos)
summary(modelo)
## 
## Call:
## lm(formula = Produccion ~ Fertilizacion + Riego + Plagas, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17.2771  -2.6362   0.1047   2.5359  14.5868 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   48.93685    2.37682   20.59   <2e-16 ***
## Fertilizacion  2.00336    0.02516   79.61   <2e-16 ***
## Riego          1.50933    0.01261  119.67   <2e-16 ***
## Plagas        -2.92917    0.20685  -14.16   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.504 on 96 degrees of freedom
## Multiple R-squared:  0.9952, Adjusted R-squared:  0.995 
## F-statistic:  6575 on 3 and 96 DF,  p-value: < 2.2e-16

EJERCICIO 3: Estimamos la producción en 2 escenarios diferentes.

nuevo_escenario <- data.frame(
  Fertilizacion = c(40,80),
  Riego = c(100,150),
  Plagas = c(2,5)
)
#Prediccion puntual
round(predict(modelo,nuevo_escenario),2)
##      1      2 
## 274.15 420.96
#Intervalos de confianza sobre la media esperada
round(predict(modelo,nuevo_escenario, interval ="confidence", level =.92),2)
##      fit    lwr    upr
## 1 274.15 272.47 275.82
## 2 420.96 419.39 422.53
#Intervalo de prediccion un nuevo lote bajo las condiciones
round(predict(modelo,nuevo_escenario, interval = "prediction", level = .98),2)
##      fit    lwr    upr
## 1 274.15 260.93 287.36
## 2 420.96 407.77 434.15

EJERCICIO 4: Graficamos la simulación del efecto de Plagas sobre la producción, con la fertilización fija en 60 y el riego en 120.

library(plotly)

simulacion <- data.frame(
  Plagas = seq(0,10, by = 1),
  Fertilizacion = 60,
  Riego = 120)

pred_conf <- data.frame(predict(modelo, newdata = simulacion, interval = "confidence",level = .99))
colnames(pred_conf) <-c("fit", "lwr_conf", "upr_conf")

pred_pred <-data.frame(predict(modelo, newdata = simulacion, interval = "prediction", level = .99))
colnames(pred_pred) <-c("fit_pred","lwr_pred","upr_pred")

resultados_simulacion <- bind_cols(simulacion,pred_conf,pred_pred)

p <- ggplot() +
geom_line(data = resultados_simulacion, aes(x = Plagas, y = fit, text = paste(
        "Nivel de plaga:", Plagas,
        "<br>Producción estimada:", round(fit, 2),
        "<br>IC 99%:", round(lwr_conf, 2),
        " - ", round(upr_conf, 2),
        "<br>IP 99%:", round(lwr_pred, 2),
        " - ", round(upr_pred, 2))), color = "green4",
    size = 0.8) +
  
  geom_ribbon(data = resultados_simulacion, aes(x = Plagas, ymin = lwr_conf, ymax = upr_conf),
              fill = "purple", alpha = 0.3) +
  geom_ribbon(data = resultados_simulacion, aes(x = Plagas, ymin = lwr_pred, ymax = upr_pred),
              fill = "pink", alpha = 0.15) +
  
labs(title ="Simulación del efecto de Plagas sobre la Producción",
     x = "Nivel de Plaga",
     y = "Produccion") +
  theme_minimal()

ggplotly(p, tooltip = "text")

Pude observar específicamente cómo cambia la producción cuando aumenta el nivel de plagas. La línea estimada tiene una pendiente negativa, consistente con el coeficiente de -2.93 obtenido en la regresión. También incluí el intervalo de confianza y el intervalo de predicción para mostrar la incertidumbre alrededor de las predicciones.