#Base de datos
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::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
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
## 
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'xts'
## 
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## 
## Attaching package: 'PerformanceAnalytics'
## 
## The following object is masked from 'package:graphics':
## 
##     legend
library(lmtest)
#A Explorar la base de datos
datos <- read_excel("NITROGENO.xlsx")
str(datos)
## 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 ...
summary(datos)
##    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
head(datos)
## # 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
# 3. Graficar la relación
ggplot(datos, aes(x = PROFUNDIDAD, y = NITROGENO)) +
  geom_point(color = "black", size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Relación entre profundidad y nitrógeno",
       x = "Profundidad (cm)",
       y = "Nitrógeno (%)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Se observa una tendencia asociada a una disminución del porcentaje de nitrógeno con el incremento de profundidad del suelo.
#B Análisis de correlación
# 4. Calcular coeficiente de correlación de Pearson
cor_test <- cor.test(datos$PROFUNDIDAD, datos$NITROGENO, method = "pearson")
cor_test
## 
##  Pearson's product-moment correlation
## 
## data:  datos$PROFUNDIDAD and datos$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
# Valor del Coeficiente de Correlación de Pearson (r) = −0.8453. Su signo - indica que es inverso y su proximidad a 1 que es fuerte.

# p-value = 0.0005346 → significativa (α = 0.05). La correlación es estadísticamente significativa.
#C Ajuste del modelo de regresión lineal simple
# 6. Ajustar el modelo lineal
modelo <- lm(NITROGENO ~ PROFUNDIDAD, data = datos)

# Ver resultados generales
summary(modelo)
## 
## Call:
## lm(formula = NITROGENO ~ PROFUNDIDAD, data = datos)
## 
## 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
#Regresión lineal simple:
#Ecuación de la recta:
 # NITRÓGENO=𝛽0 + 𝛽1 ⋅ PROFUNDIDAD

#Interpretación de coeficientes:
 #Intercepto β0 → nitrógeno estimado cuando PROFUNDIDAD = 0.
 #Pendiente β1 → cuánto cambia el nitrógeno por cada cm adicional de profundidad.
 #β₀ (intercepto) = 0.131667
 #β₁ (pendiente) = −0.001375

#Implicancias Agronómicas de los resultados: la concentración de nitrógeno (N) es mayor a menor profundidad. A medida que el suelo es más profundo, el N disponible total tiende a reducirse.

 #La significancia estadística del coeficiente de la pendiente β₁ se evalúa con el p-value asociado a ese coeficiente en el modelo de regresión. Si β₁ (pendiente) = −0.001375, y p-value(β₁) = 0.0005346, debido a que el p-value es mucho menor que 0.05, rechazamos la hipótesis nula: 𝐻0: 𝛽1 = 0. Esto significa que la pendiente es estadísticamente diferente de cero, es decir, la profundidad del suelo influye significativamente sobre el contenido de nitrógeno.

 #Coeficiente de determinación: R² = 0.7146 (R² ajustado = 0.6860) → el ~71% de la variación de N%  se explica por la profundidad.
#Representación gráfica del modelo sobre los datos observados
ggplot(datos, aes(x = PROFUNDIDAD, y = NITROGENO)) +
  geom_point(size = 3, color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Modelo de regresión lineal",
       x = "Profundidad (cm)",
       y = "Nitrógeno (%)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

#D Diagnóstico del modelo 
# Análisis de residuos
par(mfrow = c(2,2))
plot(modelo)

par(mfrow = c(1,1))
#Linealidad: aceptable. 
#Normalidad de residuos: cumplida.
#Homoscedasticidad: leve disperción, la varianza no es completamente constante.
#Sin outliers influyentes: modelo estable.

#El modelo es válido, pero para mayor rigurosidad conviene usar errores estándar robustos o verificar si una transformación puede reducir la heterocedasticidad.
# E. Predicción para profundidad de 50 cm
nuevo <- data.frame(PROFUNDIDAD = 50)
predict(modelo, newdata = nuevo, interval = "confidence")
##          fit        lwr        upr
## 1 0.06291667 0.05119171 0.07464163
# Según el modelo de regresión lineal ajustado: Con los valores estimados:

#β₀ (intercepto) = 0.2725
#β₁ (pendiente) = −0.001375

#Sustituyendo una profundidad de 50 cm:

#𝑁=0.2725+(−0.001375)(50) ≈ 0.204

#Por lo tanto, el contenido esperado de nitrógeno para 50 cm de profundidad es aproximadamente 0.204 %, con un intervalo de confianza del 95 %.