Aquí tienes una tabla de contenido con una breve explicación para cada paso de la tarea:
shapiro.test() o
ks.test() para evaluar la normalidad de las variables en el
dataset.chart.Correlation() del paquete
PerformanceAnalytics para realizar un análisis completo de correlación
entre las variables del dataset.dwtest() del paquete lmtest
para realizar pruebas de autocorrelación en los residuos de los modelos
de regresión.nls() en R y la función curve_fit() del
paquete scipy en Python.lm() en R.stepAIC() del paquete MASS para
realizar la selección automática de variables en modelos de regresión
lineal múltiple.Esta tabla de contenido proporciona una guía estructurada para la tarea, detallando cada paso y la acción a realizar en cada sección.
Aplicar técnicas de análisis de datos, pruebas de correlación, regresiones y visualización para evaluar la relación entre variables en el dataset [Nombre del Dataset].
options(warn = -1)
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(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)
Soil Composiciones de características físicas y químicas. Variables:
La función str() en R se utiliza para mostrar la
estructura interna de un objeto de datos de una manera compacta y
legible. Esta función es muy útil para obtener una visión rápida del
tipo de datos, la dimensión y el contenido de un objeto, especialmente
cuando se trabaja con estructuras de datos complejas como data frames,
listas y matrices.
library(carData)
str(Soils)
## 'data.frame': 48 obs. of 14 variables:
## $ Group : Factor w/ 12 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Contour: Factor w/ 3 levels "Depression","Slope",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ Depth : Factor w/ 4 levels "0-10","10-30",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Gp : Factor w/ 12 levels "D0","D1","D3",..: 9 9 9 9 10 10 10 10 11 11 ...
## $ Block : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
## $ pH : num 5.4 5.65 5.14 5.14 5.14 5.1 4.7 4.46 4.37 4.39 ...
## $ N : num 0.188 0.165 0.26 0.169 0.164 0.094 0.1 0.112 0.112 0.058 ...
## $ Dens : num 0.92 1.04 0.95 1.1 1.12 1.22 1.52 1.47 1.07 1.54 ...
## $ P : int 215 208 300 248 174 129 117 170 121 115 ...
## $ Ca : num 16.4 12.2 13 11.9 14.2 ...
## $ Mg : num 7.65 5.15 5.68 7.88 8.12 ...
## $ K : num 0.72 0.71 0.68 1.09 0.7 0.81 0.39 0.7 0.74 0.77 ...
## $ Na : num 1.14 0.94 0.6 1.01 2.17 2.67 3.32 3.76 5.74 5.85 ...
## $ Conduc : num 1.09 1.35 1.41 1.64 1.85 3.18 4.16 5.14 5.73 6.45 ...
Soils[ ,c("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")]
Usar “Test de Shapiro-Wilk”, cuando la muestra es pequeña (generalmente menos de 50 observaciones). El “Test de Kolmogorov-Smirnov”, es más adecuado para muestras grandes (generalmente más de 50 observaciones).
# Espacio para el código de verificación de normalidad con shapiro.test porque hay 48 obs
shapiro.test(Soils$pH)
##
## Shapiro-Wilk normality test
##
## data: Soils$pH
## W = 0.93978, p-value = 0.01591
shapiro.test(Soils$N)
##
## Shapiro-Wilk normality test
##
## data: Soils$N
## W = 0.85596, p-value = 3.141e-05
shapiro.test(Soils$Dens)
##
## Shapiro-Wilk normality test
##
## data: Soils$Dens
## W = 0.90927, p-value = 0.00127
shapiro.test(Soils$P)
##
## Shapiro-Wilk normality test
##
## data: Soils$P
## W = 0.84121, p-value = 1.281e-05
shapiro.test(Soils$Ca)
##
## Shapiro-Wilk normality test
##
## data: Soils$Ca
## W = 0.91748, p-value = 0.002425
shapiro.test(Soils$Mg)
##
## Shapiro-Wilk normality test
##
## data: Soils$Mg
## W = 0.97575, p-value = 0.4162
shapiro.test(Soils$K)
##
## Shapiro-Wilk normality test
##
## data: Soils$K
## W = 0.95276, p-value = 0.05157
shapiro.test(Soils$Na)
##
## Shapiro-Wilk normality test
##
## data: Soils$Na
## W = 0.92795, p-value = 0.005736
shapiro.test(Soils$Conduc)
##
## Shapiro-Wilk normality test
##
## data: Soils$Conduc
## W = 0.92367, p-value = 0.004016
Si hay normalidad, usar las pruebas de correlación con el test de
pearson, si falla la normalidad usar el test de spearman. Utilice la
función chart.Correlation() del paquete PerformanceAnalytics. El
siguiente es un ejemplo de cómo usar la función con el test de spearman:
chart.Correlation(Boston, method = "spearman"). Si no se
especifica el method, la prueba es de pearson y supone normalidad.
Puede utilizar visualizaciones y pruebas para pares de variables
utilizando la función with().
Por ejemplo para ver el histograma de medv en Boston, use:
with(Boston, hist(medv)). Por ejemplo, para hacer un test
de correlación de spearman entre lstat y medv, use:
with(Boston, cor.test(lstat,medv, method = "spearman")).
# Espacio para el código de pruebas de correlación (Pearson, Spearman o Kendall)
# Configurar la supresión de warnings
options(warn=-1)
library(PerformanceAnalytics)
chart.Correlation(mtcars)
chart.Correlation(
R = Soils[ ,c("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")],
histogram = TRUE,
method = "spearman"
)
Realice regresiones lineales simples y luego verifique la
autocorrelación de los residuos con el test de Durbin-Watson, con la
función dwtest() del paquete lmtest.
Estadístico Durbin-Watson – Es una medida de la correlación serial en los residuos. Si los residuos varían aleatoriamente, éste valor puede ser cercano a 2. Un pequeño P-Value indica una tendencia no aleatoria en los residuos. Para unos datos que corren sobre el tiempo, un pequeño P-value podría indicar que alguna tendencia en el tiempo no ha sido tomada en cuenta. Para datos registrados en el tiempo, un valor-P pequeño podría indicar que alguna tendencia en el tiempo no ha sido explicada. (Statgraphics).
Si falla la No Autocorrelación, proceda a realizar regresión
no lineal con la función nls() y decida cual
modelo no lineal que considere de acuerdo a la visualización de R.
Funciones no Lineales mas Comunes
lm().# Espacio para el código de regresiones lineales y prueba de autocorrelación
modelo1 = lm(Conduc ~ pH, data = Soils)
summary(modelo1)
##
## Call:
## lm(formula = Conduc ~ pH, data = Soils)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7996 -2.0071 0.0146 1.1520 10.5926
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 27.7835 2.6590 10.449 9.89e-14 ***
## pH -4.5391 0.5638 -8.051 2.48e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.597 on 46 degrees of freedom
## Multiple R-squared: 0.5849, Adjusted R-squared: 0.5759
## F-statistic: 64.83 on 1 and 46 DF, p-value: 2.484e-10
plot(Soils$pH, Soils$Conduc)
abline(modelo1)
library(ggplot2)
ggplot(
data = Soils,
mapping = aes(x=pH, y=Conduc)
) +
geom_point() +
geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
library(ggplot2)
ggplot(
data = Soils,
mapping = aes(x=pH, y=Conduc)
) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Estadístico Durbin-Watson El estadístico de Durbin-Watson es una prueba utilizada en análisis de regresión para detectar la presencia de autocorrelación en los residuos (errores) de un modelo de regresión. La autocorrelación ocurre cuando los residuos no son independientes entre sí, lo que puede invalidar los resultados del análisis de regresión. Este problema es particularmente importante en series temporales, donde los valores pasados pueden influir en los valores presentes.
library(lmtest)
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.6962, p-value = 0.1284
## alternative hypothesis: true autocorrelation is greater than 0
nls()modelo2 <- nls(Conduc ~ a * exp(b*pH), data = Soils, start = list(a = 0.1, b = 0.1))
summary(modelo2)
##
## Formula: Conduc ~ a * exp(b * pH)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 361.9726 163.4251 2.215 0.0318 *
## b -0.8919 0.1083 -8.236 1.33e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.228 on 46 degrees of freedom
##
## Number of iterations to convergence: 14
## Achieved convergence tolerance: 2.645e-07
conduc_estimado <- predict(modelo2)
library(ggplot2)
ggplot(
data = Soils,
mapping = aes(x = pH, y = Conduc)
) +
geom_point() +
geom_line(aes(x = pH, y = conduc_estimado))
library(carData)
write.csv(x = Soils[ ,c("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")], file = "Soils.csv" )
La función curve_fit() se utiliza para ajustar una función modelo a datos experimentales, lo que implica encontrar los parámetros óptimos de la función que minimizan la diferencia entre los datos reales y los valores predichos por el modelo. Esto es especialmente útil en regresiones no lineales, donde la relación entre las variables no puede expresarse de manera lineal.
Pueden consultar el notebook: Regresión no Lineal.ipynb.
Inserte a continuación un fragmento de código de Python y espere que Posit Cloud reacciones para instalar los requerimientos. A continuación se transcribe el código de Python del documento RMarkdown “2_Regresión Lineal y no Lineal”:
El código en Python es el siguiente:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
import os
os.getcwd()
## '/cloud/project'
Soils = pd.read_csv("/cloud/project/Soils.csv")
Soils.info()
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 48 entries, 0 to 47
## Data columns (total 10 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Unnamed: 0 48 non-null int64
## 1 pH 48 non-null float64
## 2 N 48 non-null float64
## 3 Dens 48 non-null float64
## 4 P 48 non-null int64
## 5 Ca 48 non-null float64
## 6 Mg 48 non-null float64
## 7 K 48 non-null float64
## 8 Na 48 non-null float64
## 9 Conduc 48 non-null float64
## dtypes: float64(8), int64(2)
## memory usage: 3.9 KB
Soils["pH"]
## 0 5.40
## 1 5.65
## 2 5.14
## 3 5.14
## 4 5.14
## 5 5.10
## 6 4.70
## 7 4.46
## 8 4.37
## 9 4.39
## 10 4.17
## 11 3.89
## 12 3.88
## 13 4.07
## 14 3.88
## 15 3.74
## 16 5.11
## 17 5.46
## 18 5.61
## 19 5.85
## 20 4.57
## 21 5.11
## 22 4.78
## 23 6.67
## 24 3.96
## 25 4.00
## 26 4.12
## 27 4.99
## 28 3.80
## 29 3.96
## 30 3.93
## 31 4.02
## 32 5.24
## 33 5.20
## 34 5.30
## 35 5.67
## 36 4.46
## 37 4.91
## 38 4.79
## 39 5.36
## 40 3.94
## 41 4.52
## 42 4.35
## 43 4.64
## 44 3.82
## 45 4.24
## 46 4.22
## 47 4.41
## Name: pH, dtype: float64
Soils["Conduc"]
## 0 1.09
## 1 1.35
## 2 1.41
## 3 1.64
## 4 1.85
## 5 3.18
## 6 4.16
## 7 5.14
## 8 5.73
## 9 6.45
## 10 8.37
## 11 9.21
## 12 10.64
## 13 10.07
## 14 11.26
## 15 12.15
## 16 2.61
## 17 1.98
## 18 0.76
## 19 2.85
## 20 3.24
## 21 4.63
## 22 3.67
## 23 8.10
## 24 7.72
## 25 9.78
## 26 9.07
## 27 9.13
## 28 11.57
## 29 11.42
## 30 13.32
## 31 11.57
## 32 0.75
## 33 2.20
## 34 2.27
## 35 0.67
## 36 5.08
## 37 6.37
## 38 6.82
## 39 3.65
## 40 10.14
## 41 9.74
## 42 8.60
## 43 9.09
## 44 12.26
## 45 11.29
## 46 9.51
## 47 12.69
## Name: Conduc, dtype: float64
def f(x, a, b):
return a*np.exp(b*(x))
x = Soils["pH"]
y = Soils["Conduc"]
res,cov = curve_fit(f,x,y)
# res son los coeficientes a y b
print(res)
## [361.97224929 -0.89186607]
print(cov)
## [[ 2.67079552e+04 -1.76132008e+01]
## [-1.76132008e+01 1.17251988e-02]]
# xx = np.linspace(8,40,50)
# fig,axes=plt.subplots()
# axes.scatter(x,y)
#
# axes.plot(xx,f(xx,361.97224929 ,-0.89186607))
Utilice ggplot() del paquete ggplot2, de acuerdo al capítulo 1: 1 Data visualization
library(ggplot2)
ggplot(
data = Soils,
mapping = aes(x = pH, y = Conduc)
) +
geom_point(colours = "pink") +
geom_point(colours = "green")
La Regresión Lineal Múltiple es una técnica estadística utilizada para modelar la relación entre una variable de respuesta (también llamada variable dependiente) y dos o más variables predictoras (variables independientes). A diferencia de la Regresión Lineal Simple, que utiliza una sola variable predictora, la Regresión Lineal Múltiple permite analizar cómo múltiples variables predictoras afectan a la variable de respuesta.
# Espacio para el código de Regresión Lineal Múltiple Manual
library(carData)
# soils[ ,c("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")]
modelo3 <- lm(Conduc ~ ., data = Soils)
summary(modelo3)
##
## Call:
## lm(formula = Conduc ~ ., data = Soils)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.0004 -0.3860 -0.1270 0.4805 1.1533
##
## Coefficients: (16 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.937448 5.109850 -0.183 0.855918
## Group2 -0.566160 0.825549 -0.686 0.499151
## Group3 -0.178957 1.495097 -0.120 0.905681
## Group4 0.063132 2.092702 0.030 0.976173
## Group5 -1.293044 0.743858 -1.738 0.094463 .
## Group6 -1.689756 1.138854 -1.484 0.150379
## Group7 -1.081373 1.700453 -0.636 0.530599
## Group8 0.083798 2.255813 0.037 0.970662
## Group9 -1.546316 1.020850 -1.515 0.142382
## Group10 -1.268538 1.318951 -0.962 0.345372
## Group11 -0.956371 1.730757 -0.553 0.585463
## Group12 -0.620811 2.075001 -0.299 0.767271
## ContourSlope NA NA NA NA
## ContourTop NA NA NA NA
## Depth10-30 NA NA NA NA
## Depth30-60 NA NA NA NA
## Depth60-90 NA NA NA NA
## GpD1 NA NA NA NA
## GpD3 NA NA NA NA
## GpD6 NA NA NA NA
## GpS0 NA NA NA NA
## GpS1 NA NA NA NA
## GpS3 NA NA NA NA
## GpS6 NA NA NA NA
## GpT0 NA NA NA NA
## GpT1 NA NA NA NA
## GpT3 NA NA NA NA
## GpT6 NA NA NA NA
## Block2 0.324189 0.564951 0.574 0.571206
## Block3 0.222710 0.455701 0.489 0.629299
## Block4 -0.131563 0.467075 -0.282 0.780512
## pH -0.110490 0.583834 -0.189 0.851425
## N 5.857552 7.400659 0.791 0.436103
## Dens 2.386586 1.538606 1.551 0.133437
## P 0.004592 0.005870 0.782 0.441368
## Ca -0.087850 0.151341 -0.580 0.566789
## Mg 0.132303 0.255326 0.518 0.608893
## K -3.008232 1.462669 -2.057 0.050296 .
## Na 0.925095 0.220075 4.204 0.000293 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7865 on 25 degrees of freedom
## Multiple R-squared: 0.9793, Adjusted R-squared: 0.9611
## F-statistic: 53.77 on 22 and 25 DF, p-value: 6.321e-16
modelo4 <- lm(pH ~ .,data = Soils[,c ("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")])
summary(modelo4)
##
## Call:
## lm(formula = pH ~ ., data = Soils[, c("pH", "N", "Dens", "P",
## "Ca", "Mg", "K", "Na", "Conduc")])
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.54083 -0.22400 -0.06742 0.21067 1.13795
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.494501 1.063223 3.287 0.002150 **
## N -2.253772 2.324808 -0.969 0.338298
## Dens 0.718301 0.525992 1.366 0.179886
## P 0.001638 0.001366 1.199 0.237827
## Ca 0.156587 0.039002 4.015 0.000262 ***
## Mg -0.060945 0.049129 -1.241 0.222199
## K -0.403777 0.393937 -1.025 0.311688
## Na 0.181815 0.082528 2.203 0.033564 *
## Conduc -0.210055 0.073907 -2.842 0.007093 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3641 on 39 degrees of freedom
## Multiple R-squared: 0.7563, Adjusted R-squared: 0.7063
## F-statistic: 15.13 on 8 and 39 DF, p-value: 8.288e-10
# Espacio para el código de Selección Automática de Variables con stepAIC()
library(carData)
mejor_modelo <- step(modelo4)
## Start: AIC=-88.96
## pH ~ N + Dens + P + Ca + Mg + K + Na + Conduc
##
## Df Sum of Sq RSS AIC
## - N 1 0.12459 5.2946 -89.816
## - K 1 0.13927 5.3093 -89.683
## - P 1 0.19052 5.3606 -89.222
## - Mg 1 0.20400 5.3741 -89.102
## <none> 5.1701 -88.959
## - Dens 1 0.24722 5.4173 -88.717
## - Na 1 0.64341 5.8135 -85.329
## - Conduc 1 1.07084 6.2409 -81.924
## - Ca 1 2.13686 7.3069 -74.354
##
## Step: AIC=-89.82
## pH ~ Dens + P + Ca + Mg + K + Na + Conduc
##
## Df Sum of Sq RSS AIC
## - P 1 0.09654 5.3912 -90.949
## - K 1 0.18416 5.4788 -90.175
## - Mg 1 0.18924 5.4839 -90.131
## <none> 5.2946 -89.816
## - Dens 1 0.43830 5.7329 -87.999
## - Na 1 0.92762 6.2223 -84.067
## - Conduc 1 1.45081 6.7455 -80.192
## - Ca 1 2.21538 7.5100 -75.038
##
## Step: AIC=-90.95
## pH ~ Dens + Ca + Mg + K + Na + Conduc
##
## Df Sum of Sq RSS AIC
## - Mg 1 0.19487 5.5861 -91.245
## - K 1 0.22056 5.6117 -91.024
## <none> 5.3912 -90.949
## - Dens 1 0.34214 5.7333 -89.995
## - Na 1 0.84982 6.2410 -85.923
## - Conduc 1 1.44816 6.8394 -81.528
## - Ca 1 2.18612 7.5773 -76.610
##
## Step: AIC=-91.24
## pH ~ Dens + Ca + K + Na + Conduc
##
## Df Sum of Sq RSS AIC
## - K 1 0.21783 5.8039 -91.408
## <none> 5.5861 -91.245
## - Dens 1 0.26392 5.8500 -91.029
## - Na 1 0.67349 6.2595 -87.781
## - Conduc 1 1.28684 6.8729 -83.294
## - Ca 1 2.16108 7.7471 -77.546
##
## Step: AIC=-91.41
## pH ~ Dens + Ca + Na + Conduc
##
## Df Sum of Sq RSS AIC
## <none> 5.8039 -91.408
## - Dens 1 0.34440 6.1483 -90.641
## - Na 1 0.53403 6.3379 -89.183
## - Conduc 1 1.07388 6.8778 -85.260
## - Ca 1 2.00759 7.8115 -79.149
summary(mejor_modelo)
##
## Call:
## lm(formula = pH ~ Dens + Ca + Na + Conduc, data = Soils[, c("pH",
## "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")])
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.57226 -0.18106 -0.07024 0.21657 1.22401
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.15903 0.73176 4.317 9.13e-05 ***
## Dens 0.67187 0.42061 1.597 0.11751
## Ca 0.12929 0.03352 3.857 0.00038 ***
## Na 0.14114 0.07096 1.989 0.05308 .
## Conduc -0.18246 0.06469 -2.821 0.00722 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3674 on 43 degrees of freedom
## Multiple R-squared: 0.7264, Adjusted R-squared: 0.701
## F-statistic: 28.55 on 4 and 43 DF, p-value: 1.311e-11
El análisis de datos y modelización realizado en el dataset “Soils” abordó varias etapas clave para comprender la relación entre las variables y para desarrollar modelos predictivos. A continuación, se presentan las conclusiones derivadas de cada paso:
Importación de paquetes: Se utilizaron varios
paquetes en R, como tidyverse,
PerformanceAnalytics, y lmtest, para facilitar
el análisis de datos, la visualización y la modelización.
Carga del dataset: El dataset “Soils” contiene información sobre características físicas y químicas del suelo, como pH, nitrógeno, densidad, fósforo, calcio, magnesio, potasio, sodio y conductividad.
Normalidad: Se realizaron pruebas de normalidad utilizando el test de Shapiro-Wilk para cada variable del dataset. Estas pruebas son importantes para determinar si las variables siguen una distribución normal, lo cual es fundamental para aplicar ciertos métodos estadísticos.
Análisis de correlación: Se utilizó la función
chart.Correlation() del paquete PerformanceAnalytics para
realizar un análisis completo de correlación entre las variables del
dataset. Se exploraron tanto correlaciones lineales (usando el test de
Pearson) como no lineales (usando el test de Spearman).
Regresiones lineales: Se ajustaron modelos de regresión lineal simple para comprender las relaciones lineales entre las variables. Se realizó también la prueba de autocorrelación de los residuos utilizando el test de Durbin-Watson.
Regresiones no lineales: Se exploraron modelos
de regresión no lineal utilizando la función nls() en R. Se
ajustó un modelo no lineal para la relación entre pH y
conductividad.
Visualización en ggplot(): Se utilizó la librería ggplot2 para visualizar gráficamente las relaciones entre variables, tanto en modelos lineales como no lineales.
Regresión Lineal Múltiple manual: Se realizó un
análisis de regresión lineal múltiple manualmente utilizando la función
lm(). Esto permite comprender cómo múltiples variables
predictoras afectan a la variable de respuesta (conductividad en este
caso).
Selección Automática de Variables: Se aplicó la
función stepAIC() del paquete MASS para realizar la
selección automática de variables en modelos de regresión lineal
múltiple. Esto ayuda a identificar las variables más relevantes para
predecir la conductividad del suelo.
En resumen, el análisis y modelización realizados proporcionan una visión detallada de las relaciones y patrones en el dataset “Soils”, permitiendo extraer conclusiones significativas sobre la influencia de diversas características del suelo en su conductividad.