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.