knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, fig.align = "center")

Introducción

Analizaremos la relación entre dosis de N (kg/ha) y diámetro de tallo (mm) en maíz. Ajustaremos modelos lineal y cuadrático, compararemos métricas y realizaremos una predicción.

Paquetes

library(tidyverse)  # readr, dplyr, ggplot2

A. Exploración de Datos

Cargar la base (CSV) y ver si es lo que teniamos que cargar.

MAIZ_FERTILIZANTE <- readr::read_csv("MAIZ_FERTILIZANTE.csv")
glimpse(MAIZ_FERTILIZANTE)
## 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.…

Resumen básico por variable

Hacemos este paso para que sea mas sencillo detectar incosistencias en los graficos y análisis posteriores.

summary(MAIZ_FERTILIZANTE)
##     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

Estadísticos por nivel de dosis (opcionales, descriptivos)

MAIZ_FERTILIZANTE %>%
  group_by(DOSIS_N) %>%
  summarise(
    n = n(),
    media_diam = mean(DIAMETRO_TALLO, na.rm = TRUE),
    sd_diam = sd(DIAMETRO_TALLO, na.rm = TRUE),
    min_diam = min(DIAMETRO_TALLO, na.rm = TRUE),
    max_diam = max(DIAMETRO_TALLO, na.rm = TRUE)
  )
## # A tibble: 5 × 6
##   DOSIS_N     n media_diam sd_diam min_diam max_diam
##     <dbl> <int>      <dbl>   <dbl>    <dbl>    <dbl>
## 1       0    10       9.60    1.95     6.36     12.5
## 2      50    10      15.7     1.72    14.0      18.3
## 3     100    10      17.9     1.62    15.9      20.2
## 4     150    10      18.3     1.70    14.8      20.4
## 5     200    10      18.6     1.90    15.4      21.6

Dispersión: diámetro vs dosis

ggplot(MAIZ_FERTILIZANTE, aes(x = DOSIS_N, y = DIAMETRO_TALLO)) +
  geom_point(size = 2.8, alpha = 0.8) +
  labs(x = "Dosis de N (kg/ha)", y = "Diámetro de tallo (mm)",
       title = "Dispersión: DIÁMETRO_TALLO vs DOSIS_N") +
  theme_minimal()

Solo viendo el grafico, queda cñlaro que la respuesta no es del todo lineal y se hace menos “proporcional” a mayores dosis de nitrógeno.

B. Ajuste de Modelos

Modelos lineal y cuadrático

#Ajustar los modelos
MODELO_lineal <- lm(DIAMETRO_TALLO ~ DOSIS_N, data = MAIZ_FERTILIZANTE)
MODELO_cuad   <- lm(DIAMETRO_TALLO ~ DOSIS_N + I(DOSIS_N^2), data = MAIZ_FERTILIZANTE)

#ver las estyadísticas de cada modelo
summary(MODELO_lineal)
## 
## Call:
## lm(formula = DIAMETRO_TALLO ~ DOSIS_N, data = MAIZ_FERTILIZANTE)
## 
## 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
summary(MODELO_cuad)
## 
## Call:
## lm(formula = DIAMETRO_TALLO ~ DOSIS_N + I(DOSIS_N^2), data = MAIZ_FERTILIZANTE)
## 
## 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

Métricas: ecuaciones, R² ajustado, AIC y BIC

# Coeficientes
coef_lin  <- coef(MODELO_lineal)
coef_cuad <- coef(MODELO_cuad)

# Ecuaciones como texto
ecuacion_lineal <- sprintf("DIAMETRO_TALLO = %.4f + %.4f * DOSIS_N",
                           coef_lin[1], coef_lin[2])

ecuacion_cuad <- sprintf("DIAMETRO_TALLO = %.4f + %.4f * DOSIS_N + %.6f * DOSIS_N^2",
                         coef_cuad[1], coef_cuad[2], coef_cuad[3])

# R² ajustado
r2_lin  <- summary(MODELO_lineal)$adj.r.squared
r2_cuad <- summary(MODELO_cuad)$adj.r.squared

# AIC y BIC
aic_lin  <- AIC(MODELO_lineal); bic_lin  <- BIC(MODELO_lineal)
aic_cuad <- AIC(MODELO_cuad);   bic_cuad <- BIC(MODELO_cuad)

# Tabla resumen
tibble::tibble(
  Modelo = c("Lineal", "Cuadrático"),
  Ecuacion = c(ecuacion_lineal, ecuacion_cuad),
  R2_Ajustado = c(r2_lin, r2_cuad),
  AIC = c(aic_lin, aic_cuad),
  BIC = c(bic_lin, bic_cuad)
)
## # A tibble: 2 × 5
##   Modelo     Ecuacion                                    R2_Ajustado   AIC   BIC
##   <chr>      <chr>                                             <dbl> <dbl> <dbl>
## 1 Lineal     DIAMETRO_TALLO = 11.9081 + 0.0411 * DOSIS_N       0.588  235.  241.
## 2 Cuadrático DIAMETRO_TALLO = 9.9980 + 0.1175 * DOSIS_N…       0.767  208.  215.

C. Comparación de Modelos (vista rápida)

# Comparación lado a lado con AIC/BIC y R² ajustado
AIC(MODELO_lineal, MODELO_cuad)
##               df      AIC
## MODELO_lineal  3 235.1473
## MODELO_cuad    4 207.6167
BIC(MODELO_lineal, MODELO_cuad)
##               df      BIC
## MODELO_lineal  3 240.8834
## MODELO_cuad    4 215.2648
data.frame(
  Modelo = c("Lineal", "Cuadrático"),
  R2_Ajustado = c(r2_lin, r2_cuad)
)
##       Modelo R2_Ajustado
## 1     Lineal   0.5877542
## 2 Cuadrático   0.7667618

D. Gráficos de los Modelos y Predicción Dispersión + ajuste lineal y cuadrático superpuestos

ggplot(MAIZ_FERTILIZANTE, aes(x = DOSIS_N, y = DIAMETRO_TALLO)) +
  geom_point(size = 2.8, alpha = 0.8) +
  # Recta del modelo lineal
  stat_smooth(method = "lm", color = "steelblue", size = 1.1,
              formula = y ~ x) +
  # Curva del modelo cuadrático
  stat_smooth(method = "lm", color = "firebrick", size = 1.1,
              formula = y ~ x + I(x^2)) +
  labs(title = "Modelos ajustados: lineal (azul) y cuadrático (rojo)",
       x = "Dosis de N (kg/ha)", y = "Diámetro de tallo (mm)") +
  theme_minimal()

Predicción para 125 kg/ha (ambos modelos)

nuevo <- data.frame(DOSIS_N = 125)

pred_lin  <- predict(MODELO_lineal, newdata = nuevo, interval = "confidence")
pred_cuad <- predict(MODELO_cuad,   newdata = nuevo, interval = "confidence")

list(
  Prediccion_Lineal = pred_lin,
  Prediccion_Cuadratico = pred_cuad
)
## $Prediccion_Lineal
##        fit      lwr      upr
## 1 17.04787 16.31128 17.78446
## 
## $Prediccion_Cuadratico
##        fit      lwr      upr
## 1 18.71922 17.94071 19.49773

A pésar de que el modelo Cuadrático es mucho mejor, la diferencia entre los valores predichos por ambos modelos no estan grande coimo cabría esperar, 17.05 tn/ha (16.31 a 17.78) en el modelo linealy 18.72 tn/ha (17.94 a 19.50), pero las predicciones del modelo cuadrático son mas confiables.-