A. Exploración de Datos

Instalar y cargar paquetes necesarios

install.packages("PerformanceAnalytics") 
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("readxl")                
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("tidyverse")             
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
library(readxl)
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.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::first()  masks xts::first()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::last()   masks xts::last()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

1. Cargar la base de datos

nitrogeno <- read_excel("NITROGENO.xlsx")

2. Explorar la estructura de los datos

2.1. Ver primeras filas

head(nitrogeno)
## # A tibble: 6 × 3
##   REPETICION PROFUNDIDAD NITROGENO
##        <dbl>       <dbl>     <dbl>
## 1          1          20      0.09
## 2          2          20      0.08
## 3          3          20      0.13
## 4          4          20      0.11
## 5          1          40      0.06
## 6          2          40      0.08

2.2. Resumen estadístico

summary(nitrogeno)
##    REPETICION    PROFUNDIDAD   NITROGENO      
##  Min.   :1.00   Min.   :20   Min.   :0.04000  
##  1st Qu.:1.75   1st Qu.:20   1st Qu.:0.05750  
##  Median :2.50   Median :40   Median :0.08000  
##  Mean   :2.50   Mean   :40   Mean   :0.07667  
##  3rd Qu.:3.25   3rd Qu.:60   3rd Qu.:0.09000  
##  Max.   :4.00   Max.   :60   Max.   :0.13000

2.3. Estructura de la base

str(nitrogeno)
## tibble [12 × 3] (S3: tbl_df/tbl/data.frame)
##  $ REPETICION : num [1:12] 1 2 3 4 1 2 3 4 1 2 ...
##  $ PROFUNDIDAD: num [1:12] 20 20 20 20 40 40 40 40 60 60 ...
##  $ NITROGENO  : num [1:12] 0.09 0.08 0.13 0.11 0.06 0.08 0.09 0.09 0.04 0.05 ...

3. Grafico de la relación entre profundidad y nitrógeno

prof_nitr <- nitrogeno %>% select(PROFUNDIDAD, NITROGENO)

# Gráfico de dispersión + correlación
chart.Correlation(prof_nitr, histogram = TRUE, pch = 19)

# 4. También podemos hacer el gráfico clásico con ggplot2
ggplot(nitrogeno, aes(x = PROFUNDIDAD, y = NITROGENO)) +
  geom_point(aes(color = as.factor(REPETICION)), size = 3) +
  geom_smooth(method = "lm", se = TRUE, color = "blue") +
  labs(
    title = "Relación entre profundidad y contenido de Nitrógeno",
    x = "Profundidad del suelo (cm)",
    y = "Nitrógeno (%)",
    color = "Repetición"
  ) +
  theme_minimal(base_size = 14)
## `geom_smooth()` using formula = 'y ~ x'

Respuesta:

Sí, se observa una tendencia negativa: a mayor profundidad del suelo, el contenido de nitrógeno disminuye. Esto se refleja en la pendiente descendente de la recta de regresión, lo que indica una relación inversa entre ambas variables.

B. Análisis de Correlación

4. Calculó del coeficiente de correlación de Pearson

correlacion <- cor(nitrogeno$PROFUNDIDAD, nitrogeno$NITROGENO, method = "pearson")

# Mostrar el valor
correlacion
## [1] -0.8453206

Respuestas

4.1. Valor del coeficiente

El coeficiente de correlación de Pearson es -0.8453.

4.2. Signo

El signo negativo indica que existe una relación inversa: a medida que la profundidad aumenta, el contenido de nitrogeno tiende a disminuir.

4.3. Fuerza de la relación

El valor absoluto (0.8453) es cercano a 1, lo que señala una relación fuerte entre las dos variables.

5. Evaluar la significancia estadística del coeficiente de correlación

Prueba de hipótesis: H0: ρ = 0 (no hay correlación) vs H1: ρ ≠ 0

test_cor <- cor.test(nitrogeno$PROFUNDIDAD, nitrogeno$NITROGENO, method = "pearson", conf.level = 0.95)

# Resultados del test
test_cor
## 
##  Pearson's product-moment correlation
## 
## data:  nitrogeno$PROFUNDIDAD and nitrogeno$NITROGENO
## t = -5.0034, df = 10, p-value = 0.0005346
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.9556210 -0.5271611
## sample estimates:
##        cor 
## -0.8453206

`` Interpretación

Significancia estadística: el p-value= 0.0005346 es mucho menor que 0.05, por lo tanto se rechaza la hipótesis nula (H₀: ρ = 0). Esto confirma que la correlación es estadísticamente significativa.

C. Ajuste del Modelo de Regresión Lineal Simple

6. Ajustar modelo

modelo <- lm(NITROGENO ~ PROFUNDIDAD, data = nitrogeno)

# Mostrar resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = NITROGENO ~ PROFUNDIDAD, data = nitrogeno)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.024167 -0.010417  0.002083  0.011458  0.025833 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.1316667  0.0118732  11.089 6.11e-07 ***
## PROFUNDIDAD -0.0013750  0.0002748  -5.003 0.000535 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01555 on 10 degrees of freedom
## Multiple R-squared:  0.7146, Adjusted R-squared:  0.686 
## F-statistic: 25.03 on 1 and 10 DF,  p-value: 0.0005346

Respuestas

La ecuación de la recta de regresión lineal simple que se ajustó a los datos es: NITROGENO= 0.1317- 0.001375 * PROFUNDIDAD y= 0.1317 - 0.001375 X

7. Interpretar coeficientes

7.1. ¿Qué significa el intercepto?

El intercepto (0.1317) representa el contenido de nitrógeno estimado en el suelo cuando la profundidad es 0 cm. En términos prácticos, indica la concentración de nitrógeno en la superficie del suelo.

7.2. ¿Qué indica el coeficiente de pendiente?

La pendiente (-0.001375) señala que, por cada centímetro que aumenta la profundidad, el contenido de nitrógeno disminuye en promedio en 0.001375 unidades. Es decir, existe una relación negativa entre profundidad y concentración de nitrógeno.

7.3. ¿Qué implicancias agronómicas tienen los resultados?

El resultado sugiere que el nitrógeno se concentra principalmente en los estratos superficiales del suelo y decrece a medida que aumenta la profundidad. Esto es consistente con la acumulación de materia orgánica en superficie, que es la principal fuente de nitrógeno disponible. Desde el manejo, resalta la importancia de prácticas como la incorporación de residuos de cultivo, abonos verdes o fertilizantes en la capa superficial, ya que es allí donde el nitrógeno se encuentra más disponible para las raíces finas de los cultivos.

8. Significancia de la pendiente

Detalle de la prueba

Hipótesis nula (H₀):𝛽=0 → No hay relación lineal entre profundidad y nitrógeno.

Hipótesis alternativa (H₁):𝛽≠ 0 → Sí existe relación lineal entre las variables.

cat("Significancia de la pendiente (β):\n")
## Significancia de la pendiente (β):
summary(modelo)$coefficients
##               Estimate   Std. Error   t value     Pr(>|t|)
## (Intercept)  0.1316667 0.0118731724 11.089426 6.113902e-07
## PROFUNDIDAD -0.0013750 0.0002748105 -5.003447 5.346109e-04

Interpretación

El valor p < 0.001 indica que la pendiente es altamente significativa estadísticamente. Esto significa que existe evidencia muy fuerte para rechazar la hipótesis nula (H₀):𝛽=0 → No hay relación lineal entre profundidad y nitrógeno. En consecuencia, la relación negativa encontrada entre profundidad y contenido de nitrógeno no es producto del azar, sino que está respaldada por los datos.

9. Coeficiente de determinación R²

cat("Coeficiente de determinación (R²):", summary(modelo)$r.squared, "\n")
## Coeficiente de determinación (R²): 0.7145669

Interpretación

El R² indica la proporción de la variabilidad de la variable dependiente (NITROGENO) que es explicada por la variable independiente (PROFUNDIDAD) mediante el modelo lineal. Un R² de 0.7146 significa que aproximadamente el 71,5% de la variación del contenido de nitrógeno en el suelo se explica por la profundidad. El resto de la variabilidad (28,5%) se debe a otros factores que no están en el modelo o al error experimental.

10. Gráfico del modelo

library(ggplot2)

ggplot(nitrogeno, aes(x = PROFUNDIDAD, y = NITROGENO)) +
  geom_point(color = "blue", size = 3) +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  labs(
    title = "Regresión lineal simple",
    x = "Profundidad",
    y = "Nitrógeno"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5)) +  # Centrar título
  annotate(
    "text",
    x = max(nitrogeno$PROFUNDIDAD) * 0.7,  # Posición horizontal (70% del máximo)
    y = max(nitrogeno$NITROGENO) * 0.95,   # Posición vertical (95% del máximo)
    label = "y = 0.1317 - 0.001375 X",
    color = "black",
    size = 4,
    hjust = 0
  )
## `geom_smooth()` using formula = 'y ~ x'

D. Diagnóstico del Modelo

11. Analisis de los residuos del modelo

residuos <- residuals(modelo)
summary(residuos)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.024167 -0.010417  0.002083  0.000000  0.011458  0.025833
par(mfrow = c(2,2))
plot(modelo) 

par(mfrow = c(1,1))

Interpretación:

11.1. Residuals vs Fitted

Los residuos parecen bastante dispersos alrededor de cero y no muestran una tendencia clara.

11.2. Q-Q Residuals

Los puntos siguen bastante bien la línea, con solo ligeras desviaciones en los extremos. Esto sugiere que los residuos son aproximadamente normales, lo que cumple el supuesto de normalidad.

11.3. Scale-Location / Spread-Location

Hay una ligera tendencia ascendente, lo que indica una leve heterocedasticidad, pero no parece severa.

11.4. Residuals vs Leverage

Ningún punto se encuentra fuera de la línea de Cook’s distance significativa (gris punteada). Esto indica que no hay observaciones altamente influyentes que afecten el modelo.

Conclusión general

El modelo parece cumplir razonablemente los supuestos básicos de regresión: _Residuos aproximadamente normales. _Homocedasticidad aceptable. _Independencia de residuos _No hay puntos influyentes que distorsionen el ajuste. En términos prácticos, los resultados del modelo pueden considerarse confiables para predicción y análisis.

12. Supuestos del modelo de regresión lineal simple

12.1 Normalidad

H0: Se cumple el supuesto de Normalidad

H1: No se cumple el supuesto de Normalidad

# Ajuste del modelo
modelo <- lm(NITROGENO ~ PROFUNDIDAD, data = nitrogeno)

# Residuos del modelo
residuos <- residuals(modelo)

# Prueba de normalidad de Shapiro-Wilk
shapiro.test(residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.97087, p-value = 0.9197
# Gráfico Q-Q
qqnorm(residuos)
qqline(residuos, col = "red")

Interpretación

Según la prueba de Shapiro-Wilk (p = 0.92), no se encontraron evidencias para rechazar la normalidad de los residuos, por lo que se cumple el supuesto de normalidad en el modelo de regresión.

12.2. Linealidad

De acuerdo al graficoo de Residuals vs Fitted, los residuos se distribuyen alrededor de 0 sin un patrón claro; algunos outliers (puntos 2 y 3) están presentes, pero la linealidad se cumple razonablemente.

12.3. Homocedasticidad

H0: La varianza de los residuos es constante (homocedasticidad) H1: La varianza de los residuos no es constante (heterocedasticidad)

# Gráfico de residuos vs valores ajustados
plot(modelo$fitted.values, residuos,
     xlab = "Valores ajustados",
     ylab = "Residuos",
     main = "Residuos vs Valores Ajustados")
abline(h = 0, col = "red")

# Prueba de Breusch-Pagan
# install.packages("lmtest")
library(lmtest)
bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 4.2387, df = 1, p-value = 0.03951

Interpretación

Como el p-valor < 0.05, se rechaza la hipótesis nula. Esto indica que existe evidencia de heterocedasticidad, es decir, la varianza de los errores no es constante.

12.4. Independencia de los residuos

H0: Los residuos son independientes H1: Los residuos no son independientes

# Prueba de Durbin-Watson
dwtest(modelo)
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 2.1155, p-value = 0.4518
## alternative hypothesis: true autocorrelation is greater than 0

Interpretación

El valor de DW = 2.1155 → Muy cercano a 2 → No hay evidencia de autocorrelación. Valor p = 0.4518 > 0.05 → No se rechaza H₀. Los residuos del modelo parecen ser independientes, por lo que el supuesto de independencia de los errores se cumple.

12.5. Prueba de hipotesis para la Regresión

H0: β1 = 0 (no hay relación lineal entre PROFUNDIDAD y NITROGENO)

H1: β1 ≠ 0 (sí hay relación lineal)

α = 0.05

# Mostrar resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = NITROGENO ~ PROFUNDIDAD, data = nitrogeno)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.024167 -0.010417  0.002083  0.011458  0.025833 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.1316667  0.0118732  11.089 6.11e-07 ***
## PROFUNDIDAD -0.0013750  0.0002748  -5.003 0.000535 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01555 on 10 degrees of freedom
## Multiple R-squared:  0.7146, Adjusted R-squared:  0.686 
## F-statistic: 25.03 on 1 and 10 DF,  p-value: 0.0005346

Interpretación

Valor p = 0.000535 Comparación: 0.000535 < 0.05 → rechazamos H₀. Existe evidencia estadística significativa de que la profundidad afecta el contenido de nitrógeno en el suelo. La pendiente negativa (-0.001375) indica que a mayor profundidad, menor contenido de nitrógeno.

E. Predicción

13. Predecir contenido de Nitrógeno para profundidad = 50 cm

13.1. Usaremos la recta generada en el modelo:

NITROGENO= 0.1317- 0.001375 * PROFUNDIDAD (cm)

NITROGENO = 0.1317 - 0.001375 * 50
NITROGENO
## [1] 0.06295
nueva_profundidad <- data.frame(PROFUNDIDAD = 50)
prediccion <- predict(modelo, newdata = nueva_profundidad, interval = "confidence") # intervalo de confianza
prediccion
##          fit        lwr        upr
## 1 0.06291667 0.05119171 0.07464163

Interpretación

fit (0.0629) es el valor predicho por el modelo de regresión. Según la ecuación NITROGENO ~ PROFUNDIDAD, cuando la profundidad es 50 cm, se espera que el contenido de nitrógeno sea aproximadamente 0.0629 %.

13.2. Gráfico de dispersión con recta de Regresión y predicción

# Predicción con intervalo de confianza
prediccion <- predict(modelo, newdata = nueva_profundidad, interval = "confidence", level = 0.95)

# Extraer valor puntual de predicción
pred_punto <- prediccion[1, "fit"]

# Construir la ecuación con signo correcto
pendiente <- coef(modelo)[2]
signo <- ifelse(pendiente < 0, "-", "+")
ecuacion <- paste0("Nitrogeno = ", round(coef(modelo)[1],3), " ", 
                   signo, " ", abs(round(pendiente,6)), " * Profundidad")

# Gráfico de dispersión con recta de regresión y punto de predicción

ggplot(nitrogeno, aes(x = PROFUNDIDAD, y = NITROGENO)) +
  geom_point(size = 2.5, alpha = 0.6, color = "blue") +
  geom_smooth(method = "lm", se = TRUE, color = "black") +
  geom_text(x = max(nitrogeno$PROFUNDIDAD)*0.55,  # más a la izquierda
            y = max(nitrogeno$NITROGENO)*0.9, 
            label = ecuacion,
            size = 4,  # un poco más chica
            hjust = 0) +
  geom_point(aes(x = 50, y = pred_punto), color = "red", size = 3.5) +
  geom_errorbar(aes(x = 50, ymin = prediccion[1, "lwr"], ymax = prediccion[1, "upr"]), 
                width = 2, color = "red") +
  theme_minimal() +
  labs(title = "Predicción de nitrogeno según la profundidad",
       x = "Profundidad (cm)", y = "Nitrogeno") +
  theme(plot.title = element_text(hjust = 0.5))  # título centrado
## Warning in geom_point(aes(x = 50, y = pred_punto), color = "red", size = 3.5): All aesthetics have length 1, but the data has 12 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
##   a single row.
## `geom_smooth()` using formula = 'y ~ x'

Interpretación

Para una profundidad de suelo de 50 cm, el modelo predice que el contenido de nitrógeno será aproximadamente 0.063 %, con un intervalo de confianza del 95% que va de 0.051 a 0.075. Esto refleja la incertidumbre inherente al modelo, es decir, que el valor real puede variar dentro de ese rango.