Preparación y carga de los datos
#Cargar librerías necesarias
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readr)
library(ggplot2)
# Cargar los datos
maiz <- read_csv("C:/Users/Outlet VL/Downloads/BaseTp2.csv", show_col_types = FALSE)
# Explorar estructura de los datos
glimpse(maiz)
## Rows: 50
## Columns: 2
## $ DOSIS_N <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 5…
## $ DIAMETRO_TALLO <dbl> 8.371554, 11.496018, 10.424468, 7.740558, 9.132100, 12.…
summary(maiz)
## DOSIS_N DIAMETRO_TALLO
## Min. : 0 Min. : 6.36
## 1st Qu.: 50 1st Qu.:14.34
## Median :100 Median :16.92
## Mean :100 Mean :16.02
## 3rd Qu.:150 3rd Qu.:18.71
## Max. :200 Max. :21.59
# Gráfico de dispersión
ggplot(maiz, aes(x = DOSIS_N, y = DIAMETRO_TALLO)) +
geom_point(size = 3, alpha = 0.6, color = "steelblue") +
geom_smooth(method = "lm", formula = y ~ x,
color = "red", se = FALSE) +
labs(title = "Relacion entre dosis de nitrogeno y diametro del tallo",
x = "Dosis de nitrogeno (kg/ha)",
y = "Diametro del tallo (mm)") +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(hjust = 0.5))
Modelado
# Ajustar modelo lineal
modelo_lineal <- lm(DIAMETRO_TALLO ~ DOSIS_N, data = maiz)
summary(modelo_lineal)
##
## Call:
## lm(formula = DIAMETRO_TALLO ~ DOSIS_N, data = maiz)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.5481 -1.5960 0.2347 1.4300 4.3449
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11.908075 0.598242 19.905 < 2e-16 ***
## DOSIS_N 0.041118 0.004885 8.418 5.18e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.442 on 48 degrees of freedom
## Multiple R-squared: 0.5962, Adjusted R-squared: 0.5878
## F-statistic: 70.86 on 1 and 48 DF, p-value: 5.182e-11
# Coeficientes
coef(modelo_lineal)
## (Intercept) DOSIS_N
## 11.90807482 0.04111832
# R² ajustado
summary(modelo_lineal)$adj.r.squared
## [1] 0.5877542
# AIC y BIC
AIC(modelo_lineal)
## [1] 235.1473
BIC(modelo_lineal)
## [1] 240.8834
# Ajustar modelo cuadrático
modelo_cuad <- lm(DIAMETRO_TALLO ~ DOSIS_N + I(DOSIS_N^2), data = maiz)
summary(modelo_cuad)
##
## Call:
## lm(formula = DIAMETRO_TALLO ~ DOSIS_N + I(DOSIS_N^2), data = maiz)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.2288 -1.1872 -0.1897 1.3319 3.3898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.9979513 0.5467262 18.287 < 2e-16 ***
## DOSIS_N 0.1175233 0.0129528 9.073 6.71e-12 ***
## I(DOSIS_N^2) -0.0003820 0.0000621 -6.151 1.59e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.837 on 47 degrees of freedom
## Multiple R-squared: 0.7763, Adjusted R-squared: 0.7668
## F-statistic: 81.54 on 2 and 47 DF, p-value: 5.224e-16
# Coeficientes
coef(modelo_cuad)
## (Intercept) DOSIS_N I(DOSIS_N^2)
## 9.9979513105 0.1175232637 -0.0003820247
# R² ajustado
summary(modelo_cuad)$adj.r.squared
## [1] 0.7667618
# AIC y BIC
AIC(modelo_cuad)
## [1] 207.6167
BIC(modelo_cuad)
## [1] 215.2648
Comparación de los modelos
# Comparación de modelos
anova(modelo_lineal, modelo_cuad)
## Analysis of Variance Table
##
## Model 1: DIAMETRO_TALLO ~ DOSIS_N
## Model 2: DIAMETRO_TALLO ~ DOSIS_N + I(DOSIS_N^2)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 48 286.31
## 2 47 158.62 1 127.7 37.84 1.588e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Tabla resumen de métricas
data.frame(
Modelo = c("Lineal", "Cuadrático"),
R2_ajustado = c(summary(modelo_lineal)$adj.r.squared,
summary(modelo_cuad)$adj.r.squared),
AIC = c(AIC(modelo_lineal), AIC(modelo_cuad)),
BIC = c(BIC(modelo_lineal), BIC(modelo_cuad))
)
## Modelo R2_ajustado AIC BIC
## 1 Lineal 0.5877542 235.1473 240.8834
## 2 Cuadrático 0.7667618 207.6167 215.2648
Representación de ambos modelos
# Gráfico con ambos modelos
ggplot(maiz, aes(x = DOSIS_N, y = DIAMETRO_TALLO)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", formula = y ~ x,
aes(color = "Lineal"), se = FALSE) +
geom_smooth(method = "lm", formula = y ~ x + I(x^2),
aes(color = "Cuadr\u00E1tico"), se = FALSE) +
scale_color_manual(values = c("Lineal" = "blue", "Cuadr\u00E1tico" = "red")) +
labs(title = "Comparaci\u00F3n de modelos lineal y cuadr\u00E1tico",
x = "Dosis de nitr\u00F3geno (kg/ha)",
y = "Di\u00E1metro del tallo (mm)",
color = "Modelo") +
theme_minimal() +
theme(legend.position = "top")
Predicción
# Predicción con modelo lineal
predict(modelo_lineal, newdata = data.frame(DOSIS_N = 125))
## 1
## 17.04787
# Predicción con modelo cuadrático
predict(modelo_cuad, newdata = data.frame(DOSIS_N = 125))
## 1
## 18.71922
CONCLUSIONES
Modelo Lineal: Ecuación: DIAMETRO_TALLO = r round(coef(modelo_lineal)[1], 2) + r round(coef(modelo_lineal)[2], 4) * DOSIS_N R² ajustado: r round(summary(modelo_lineal)$adj.r.squared, 2) AIC: r round(AIC(modelo_lineal), 1) BIC: r round(BIC(modelo_lineal), 1)
Modelo Cuadrático: Ecuación: DIAMETRO_TALLO = r round(coef(modelo_cuad)[1], 2) + r round(coef(modelo_cuad)[2], 4) * DOSIS_N + r round(coef(modelo_cuad)[3], 5) * DOSIS_N² R² ajustado: r round(summary(modelo_cuad)$adj.r.squared, 2) AIC: r round(AIC(modelo_cuad), 1) BIC: r round(BIC(modelo_cuad), 1)
Comparación: El modelo cuadrático muestra un mejor ajuste según: Mayor R² ajustado (r round(summary(modelo_cuad)\(adj.r.squared, 2) vs r round(summary(modelo_lineal)\)adj.r.squared, 2)) Menor AIC (r round(AIC(modelo_cuad), 1) vs r round(AIC(modelo_lineal), 1)) La prueba ANOVA muestra que el término cuadrático aporta significativamente al modelo (p = r round(anova(modelo_lineal, modelo_cuad)$Pr(>F)[2], 4))
Predicción para 125 kg/ha: Modelo lineal: r round(predict(modelo_lineal, newdata = data.frame(DOSIS_N = 125)), 2) mm Modelo cuadrático: r round(predict(modelo_cuad, newdata = data.frame(DOSIS_N = 125)), 2) mm
Conclusión: El modelo cuadrático es más adecuado para describir la relación entre la dosis de nitrógeno y el diámetro del tallo en plantas de maíz. La relación no es estrictamente lineal, sino que muestra una curvatura que el modelo cuadrático captura mejor.