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)
Los datos se extrajeron de la revista Motor Trend US de 1974, y comprenden el consumo de combustible y 10 aspectos del diseño y el rendimiento de 32 automóviles (modelos de 1973-74).
str (utils): La función str() en R es una herramienta utilizada para inspeccionar la estructura interna de objetos en R. Su nombre proviene de “structure” (estructura en inglés). Al aplicar str() a un objeto en R, se obtiene una descripción concisa de la estructura del objeto y sus componentes.
library(datasets)
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
mtcars[,c("mpg","cyl","disp","hp","drat","wt","carb")]
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 32 obs
shapiro.test(mtcars$mpg)
##
## Shapiro-Wilk normality test
##
## data: mtcars$mpg
## W = 0.94756, p-value = 0.1229
shapiro.test(mtcars$cyl)
##
## Shapiro-Wilk normality test
##
## data: mtcars$cyl
## W = 0.75331, p-value = 6.058e-06
shapiro.test(mtcars$disp)
##
## Shapiro-Wilk normality test
##
## data: mtcars$disp
## W = 0.92001, p-value = 0.02081
shapiro.test(mtcars$hp)
##
## Shapiro-Wilk normality test
##
## data: mtcars$hp
## W = 0.93342, p-value = 0.04881
shapiro.test(mtcars$drat)
##
## Shapiro-Wilk normality test
##
## data: mtcars$drat
## W = 0.94588, p-value = 0.1101
shapiro.test(mtcars$wt)
##
## Shapiro-Wilk normality test
##
## data: mtcars$wt
## W = 0.94326, p-value = 0.09265
shapiro.test(mtcars$carb)
##
## Shapiro-Wilk normality test
##
## data: mtcars$carb
## W = 0.8511, p-value = 0.0004382
interpretacion de la normalidad de las variables
las variables mpg, drat, wt y carb podrían considerarse aproximadamente normales, mientras que las variables cyl, disp y hp no siguen una distribución normal según el test de Shapiro-Wilk.
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 = mtcars[,c("mpg","cyl","disp","hp","drat","wt","carb")],
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(carb ~ mpg, data = mtcars)
summary(modelo1)
##
## Call:
## lm(formula = carb ~ mpg, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.1064 -0.7970 -0.2004 0.5929 4.4359
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.77880 0.85540 6.756 1.72e-07 ***
## mpg -0.14765 0.04083 -3.616 0.00108 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.37 on 30 degrees of freedom
## Multiple R-squared: 0.3035, Adjusted R-squared: 0.2803
## F-statistic: 13.07 on 1 and 30 DF, p-value: 0.001084
plot(mtcars$mpg, mtcars$carb)
abline(modelo1)
library(ggplot2)
ggplot(
data = mtcars,
mapping = aes(x=mpg, y=carb)
) +
geom_point() +
geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
library(ggplot2)
ggplot(
data = mtcars,
mapping = aes(x=mpg, y=carb)
) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
estadistico Durbin-Watson - El Estadístico Durbin-Watson es una prueba estadística que se utiliza para detectar la presencia de autocorrelación en los residuos (errores de predicción) de un análisis de regresión. La autocorrelación se refiere a una relación entre los valores separados el uno del otro por un intervalo de tiempo dado.
library(lmtest)
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.1201, p-value = 0.003287
## alternative hypothesis: true autocorrelation is greater than 0
nls()# Inspección visual de los datos
plot(mtcars$carb, mtcars$mpg, main = "mpg vs carb", xlab = "carb", ylab = "mpg")
# Ajustar el modelo no lineal con diferentes valores iniciales
modelo2 <- nls(mpg ~ a * exp(b * carb), data = mtcars, start = list(a = 1, b = -0.1))
# Imprimir el resumen del modelo
summary(modelo2)
##
## Formula: mpg ~ a * exp(b * carb)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 28.16767 2.45975 11.451 1.78e-12 ***
## b -0.12759 0.03324 -3.838 0.000594 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.953 on 30 degrees of freedom
##
## Number of iterations to convergence: 7
## Achieved convergence tolerance: 8.512e-06
# Predecir valores usando el modelo ajustado
carb_estimado <- predict(modelo2)
# Alternativa: modelo polinomial
modelo_alternativo <- nls(mpg ~ a + b * carb + c * I(carb^2), data = mtcars, start = list(a = 1, b = 1, c = 1))
# Imprimir el resumen del modelo alternativo
summary(modelo_alternativo)
##
## Formula: mpg ~ a + b * carb + c * I(carb^2)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 30.7686 2.8717 10.715 1.35e-11 ***
## b -5.5589 1.7226 -3.227 0.0031 **
## c 0.4749 0.2219 2.140 0.0409 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.833 on 29 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 4.992e-09
# Predecir valores usando el modelo alternativo
carb_estimado_alt <- predict(modelo_alternativo)
library(ggplot2)
ggplot(
data = mtcars,
mapping = aes(x = mpg, y = carb)
) +
geom_point() +
geom_smooth() +
geom_line(aes(x = mpg, y = carb_estimado))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
library(datasets)
write.csv(x = mtcars[, c("mpg","cyl","disp","hp","drat","wt","carb")], file = "mtcars.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: regresion no lineal .ipynb: https://colab.research.google.com/drive/1OwiTECBv5mzI9N8dwXEBhTW9hAjo98fO?usp=sharing.
Se deberán instalar lo siguiente: 1. El paquete de R llamado “reticulate” 2. Todos los módulos de Python que se usen, se deben instalar en la Terminal 3. por ejemplo: matplotlib: lanzando: pip install matplotlib
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'
mtcars = pd.read_csv("/cloud/project/mtcars.csv")
mtcars.info()
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 32 entries, 0 to 31
## Data columns (total 8 columns):
## # Column Non-Null Count Dtype
## --- ------ -------------- -----
## 0 Unnamed: 0 32 non-null object
## 1 mpg 32 non-null float64
## 2 cyl 32 non-null int64
## 3 disp 32 non-null float64
## 4 hp 32 non-null int64
## 5 drat 32 non-null float64
## 6 wt 32 non-null float64
## 7 carb 32 non-null int64
## dtypes: float64(4), int64(3), object(1)
## memory usage: 2.1+ KB
mtcars["mpg"]
## 0 21.0
## 1 21.0
## 2 22.8
## 3 21.4
## 4 18.7
## 5 18.1
## 6 14.3
## 7 24.4
## 8 22.8
## 9 19.2
## 10 17.8
## 11 16.4
## 12 17.3
## 13 15.2
## 14 10.4
## 15 10.4
## 16 14.7
## 17 32.4
## 18 30.4
## 19 33.9
## 20 21.5
## 21 15.5
## 22 15.2
## 23 13.3
## 24 19.2
## 25 27.3
## 26 26.0
## 27 30.4
## 28 15.8
## 29 19.7
## 30 15.0
## 31 21.4
## Name: mpg, dtype: float64
mtcars["carb"]
## 0 4
## 1 4
## 2 1
## 3 1
## 4 2
## 5 1
## 6 4
## 7 2
## 8 2
## 9 4
## 10 4
## 11 3
## 12 3
## 13 3
## 14 4
## 15 4
## 16 4
## 17 1
## 18 2
## 19 1
## 20 1
## 21 2
## 22 2
## 23 4
## 24 2
## 25 1
## 26 2
## 27 2
## 28 4
## 29 6
## 30 8
## 31 2
## Name: carb, dtype: int64
def f(x, a, b):
return a*np.exp(b*(x))
x = mtcars["mpg"]
y = mtcars["carb"]
res,cov = curve_fit(f,x,y)
print(res)
## [ 8.3030575 -0.05635779]
print(cov)
## [[ 6.58442108e+00 -4.35268646e-02]
## [-4.35268646e-02 3.09606913e-04]]
xx = np.linspace(8,40,50)
fig,axes=plt.subplots()
axes.scatter(x,y)
axes.plot(xx,f(xx,8.3030575,-0.05635779))
Utilice ggplot() del paquete ggplot2, de acuerdo al capítulo 1: 1 Data visualization
library(ggplot2)
ggplot(
data = mtcars,
mapping = aes(x = mpg, y = carb)
) +
geom_point(colour = "pink")
geom_smooth(colour = "black" )
## geom_smooth: na.rm = FALSE, orientation = NA, se = TRUE
## stat_smooth: na.rm = FALSE, orientation = NA, se = TRUE
## position_identity
Utilice ggplot() del paquete ggplot2, de acuerdo al capítulo 1: 1 Data visualization
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(datasets)
# mtcars[, c("mpg","cyl","disp","hp","drat","wt","carb")]
modelo3 <- lm(carb ~ ., data = mtcars)
summary(modelo3)
##
## Call:
## lm(formula = carb ~ ., data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.2349 -0.3722 0.1054 0.2529 1.0242
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.468075 4.942922 -0.499 0.62275
## mpg -0.013788 0.057301 -0.241 0.81218
## cyl 0.285369 0.267713 1.066 0.29855
## disp -0.014310 0.003589 -3.987 0.00067 ***
## hp 0.013498 0.005060 2.667 0.01441 *
## drat 0.416966 0.422699 0.986 0.33515
## wt 1.533209 0.426193 3.597 0.00169 **
## qsec -0.224938 0.191678 -1.174 0.25373
## vs -0.230362 0.551387 -0.418 0.68034
## am -0.118783 0.559190 -0.212 0.83383
## gear 0.771539 0.356707 2.163 0.04223 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6969 on 21 degrees of freedom
## Multiple R-squared: 0.8739, Adjusted R-squared: 0.8139
## F-statistic: 14.55 on 10 and 21 DF, p-value: 2.596e-07
modelo4 <- lm(mpg ~ .,data = mtcars[c("mpg","cyl","disp","hp","drat","wt","carb")])
summary(modelo4)
##
## Call:
## lm(formula = mpg ~ ., data = mtcars[c("mpg", "cyl", "disp", "hp",
## "drat", "wt", "carb")])
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8398 -1.5374 -0.4027 1.1366 5.6332
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.644580 8.875237 3.904 0.000635 ***
## cyl -1.028354 0.772134 -1.332 0.194931
## disp 0.009206 0.015813 0.582 0.565638
## hp -0.019331 0.020285 -0.953 0.349726
## drat 1.145915 1.547607 0.740 0.465929
## wt -3.434305 1.325496 -2.591 0.015747 *
## carb -0.196203 0.633312 -0.310 0.759278
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.583 on 25 degrees of freedom
## Multiple R-squared: 0.8519, Adjusted R-squared: 0.8163
## F-statistic: 23.96 on 6 and 25 DF, p-value: 3.127e-09
# Espacio para el código de Selección Automática de Variables con stepAIC()
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(datasets)
mejor_modelo <- stepAIC(modelo4)
## Start: AIC=66.83
## mpg ~ cyl + disp + hp + drat + wt + carb
##
## Df Sum of Sq RSS AIC
## - carb 1 0.640 167.43 64.954
## - disp 1 2.261 169.05 65.262
## - drat 1 3.658 170.44 65.525
## - hp 1 6.059 172.84 65.973
## <none> 166.79 66.831
## - cyl 1 11.834 178.62 67.025
## - wt 1 44.786 211.57 72.442
##
## Step: AIC=64.95
## mpg ~ cyl + disp + hp + drat + wt
##
## Df Sum of Sq RSS AIC
## - drat 1 3.018 170.44 63.526
## - disp 1 6.949 174.38 64.255
## <none> 167.43 64.954
## - cyl 1 15.411 182.84 65.772
## - hp 1 21.066 188.49 66.746
## - wt 1 77.476 244.90 75.124
##
## Step: AIC=63.53
## mpg ~ cyl + disp + hp + wt
##
## Df Sum of Sq RSS AIC
## - disp 1 6.176 176.62 62.665
## <none> 170.44 63.526
## - hp 1 18.048 188.49 64.746
## - cyl 1 24.546 194.99 65.831
## - wt 1 90.925 261.37 75.206
##
## Step: AIC=62.66
## mpg ~ cyl + hp + wt
##
## Df Sum of Sq RSS AIC
## <none> 176.62 62.665
## - hp 1 14.551 191.17 63.198
## - cyl 1 18.427 195.05 63.840
## - wt 1 115.354 291.98 76.750
summary(mejor_modelo)
##
## Call:
## lm(formula = mpg ~ cyl + hp + wt, data = mtcars[c("mpg", "cyl",
## "disp", "hp", "drat", "wt", "carb")])
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.9290 -1.5598 -0.5311 1.1850 5.8986
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 38.75179 1.78686 21.687 < 2e-16 ***
## cyl -0.94162 0.55092 -1.709 0.098480 .
## hp -0.01804 0.01188 -1.519 0.140015
## wt -3.16697 0.74058 -4.276 0.000199 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.512 on 28 degrees of freedom
## Multiple R-squared: 0.8431, Adjusted R-squared: 0.8263
## F-statistic: 50.17 on 3 and 28 DF, p-value: 2.184e-11
A continuación, se presentan las conclusiones obtenidas tras realizar un análisis y modelización de los datos del dataset mtcars, el cual incluye diversas pruebas de normalidad, análisis de correlación, regresiones lineales y no lineales, así como una regresión lineal múltiple con selección automática de variables.
Importar Paquetes y Cargar Dataset Se importaron los paquetes necesarios para realizar el análisis y se cargó el dataset mtcars, verificando que los datos estuvieran correctamente estructurados y listos para su análisis.
Pruebas de Normalidad Se realizaron pruebas de normalidad utilizando el test de Shapiro-Wilk para cada variable del dataset:
Variables que siguen una distribución aproximadamente normal: mpg, drat, wt, carb Variables que no siguen una distribución normal: cyl, disp, hp Esto indica que para algunas variables se podrían aplicar métodos paramétricos, mientras que para otras, sería más adecuado utilizar métodos no paramétricos.
Variables con fuerte correlación positiva: wt y disp Variables con fuerte correlación negativa: mpg y wt Esto sugiere que el peso del vehículo (wt) está fuertemente correlacionado tanto con el desplazamiento (disp) como con el consumo de combustible (mpg).
Regresiones Lineales Simples y Autocorrelación Se ajustó un modelo de regresión lineal simple para predecir el número de carburadores (carb) en función de mpg. El modelo mostró una relación negativa entre mpg y carb. Sin embargo, la prueba de autocorrelación de Durbin-Watson indicó que los residuos del modelo no mostraban autocorrelación significativa.
Regresiones No Lineales Se exploraron modelos de regresión no lineal utilizando la función nls() en R y curve_fit() en Python:
Modelo Exponencial: Ajuste moderado de los datos, con coeficientes estimados que indicaron una disminución exponencial en carb conforme aumenta mpg. Modelo Polinomial: Se ajustó un modelo polinomial de segundo grado, que también mostró un buen ajuste a los datos. Ambos enfoques de modelización no lineal proporcionaron una mejor comprensión de las relaciones no lineales entre las variables.
Modelo Inicial: Incluyó todas las variables predictoras. Selección Automática de Variables: Utilizando stepAIC(), se seleccionaron las variables más significativas para el modelo final. El mejor modelo ajustado mostró que variables como wt, hp, y disp son significativas para predecir mpg, mientras que carb está influenciado por otras variables como mpg, hp, y drat.
¡Éxitos en el análisis y la modelización de datos!. ```