El código completo de esta retroalimentación fue generado con el
siguiente prompt (pueden probar con este prompt para ver los
resultados):
“Proporcione un código en R para analizar el MPG Dataset, donde se
verifica la normalidad y homogeneidad de las varianzas, se imputan
valores faltantes y se aplican pruebas paramétricas (regresion MCO) o no
paramétricas (Kruskal-Wallis) según corresponda. Además, realice una
prueba de Dunn, cree un dataframe que describa el tipo de variable para
cada columna del conjunto de datos de esta manera: Nombre_variable
Tipo_variable
mpg Numérica continua
cylinders Categórica nominal
displacement Numérica continua
horsepower Numérica continua
weight Numérica continua
acceleration Numérica continua
model_year Categórica ordinal
origin Categórica nominal
name Categórica nominal
y, finalmente, grafique las asociaciones o correlaciones entre las
variables.”
# Cargar librerias necesarias
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(car)
## Loading required package: carData
library(stats)
#cargar los datos
# Instalar el paquete 'readr' si no está instalado
if (!requireNamespace("readr", quietly = TRUE)) {
install.packages("readr")
}
# Cargar el paquete 'readr'
library(readr)
# URL del conjunto de datos
url_dataset <- "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/mpg.csv"
# Importar el conjunto de datos desde internet
mpg_data <- read_csv(url_dataset)
## Rows: 398 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): origin, name
## dbl (7): mpg, cylinders, displacement, horsepower, weight, acceleration, mod...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Ver las primeras filas del conjunto de datos
head(mpg_data)
## # A tibble: 6 × 9
## mpg cylinders displacement horsepower weight accelera…¹ model…² origin name
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
## 1 18 8 307 130 3504 12 70 usa chev…
## 2 15 8 350 165 3693 11.5 70 usa buic…
## 3 18 8 318 150 3436 11 70 usa plym…
## 4 16 8 304 150 3433 12 70 usa amc …
## 5 17 8 302 140 3449 10.5 70 usa ford…
## 6 15 8 429 198 4341 10 70 usa ford…
## # … with abbreviated variable names ¹acceleration, ²model_year
# Paso 1: Comprobar supuestos de normalidad y homogeneidad de varianza
# Prueba de Shapiro-Wilk para normalidad
shapiro_test <- shapiro.test(mpg_data$mpg)
print(shapiro_test)
##
## Shapiro-Wilk normality test
##
## data: mpg_data$mpg
## W = 0.96797, p-value = 1.183e-07
# Prueba de Levene para homogeneidad de varianzas
levene_test <- car::leveneTest(mpg_data$mpg, mpg_data$cylinders)
## Warning in leveneTest.default(mpg_data$mpg, mpg_data$cylinders):
## mpg_data$cylinders coerced to factor.
print(levene_test)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 4 14.586 4.067e-11 ***
## 393
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Shapiro Wilks:
Asumiendo un 5% de significancia, hay evidencia estadística para
rechazar la hipótesis nula. Es decir, no se cumple el supuesto de
normalidad.
Levene:
Asumiendo un 5% de significancia, hay evidencia estadística para
rechazar la hipótesis nula. Es decir, no se cumple el supuesto de
homogeneidad de varianzas.
# Paso 2: Aplicar método paramétrico o no paramétrico según corresponda
# Imputar valores faltantes con la media
mpg_data_imputed <- data.frame(lapply(mpg_data, function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x)))
if (shapiro_test$p.value > 0.05 && levene_test$p.value > 0.05) {
# Método paramétrico
model <- lm(mpg ~ ., data = mpg_data_imputed)
summary(model)
cat("R^2:", summary(model)$r.squared)
} else {
# Método no paramétrico
# Seleccionar solo columnas numéricas
mpg_data_numeric <- mpg_data_imputed[sapply(mpg_data_imputed, is.numeric)]
# Aplicar Kruskal-Wallis
kruskal_wallis_results <- lapply(mpg_data_numeric, function(x) kruskal.test(x ~ mpg_data_imputed$mpg))
print(kruskal_wallis_results)
}
## $mpg
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 397, df = 128, p-value < 2.2e-16
##
##
## $cylinders
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 336.07, df = 128, p-value < 2.2e-16
##
##
## $displacement
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 333.59, df = 128, p-value < 2.2e-16
##
##
## $horsepower
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 328.03, df = 128, p-value < 2.2e-16
##
##
## $weight
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 344.25, df = 128, p-value < 2.2e-16
##
##
## $acceleration
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 192.87, df = 128, p-value = 0.0001853
##
##
## $model_year
##
## Kruskal-Wallis rank sum test
##
## data: x by mpg_data_imputed$mpg
## Kruskal-Wallis chi-squared = 254.35, df = 128, p-value = 2.188e-10
Asumiendo un 5 % de significancia (\(\alpha\) = 0.05), existe evidencia
estadística para rechazar la hipótesis nula de Kruskall-Wallis. Es
decir, hay diferencias significativas en las medianas de rangos de al
menos un par de grupos. Esto sugiere que la variable independiente tiene
un efecto en la variable dependiente, y que la relación entre estas
variables no es puramente aleatoria. Para entender mejor qué grupos
presentan diferencias significativas, se pueden realizar pruebas de
comparaciones múltiples post-hoc, como la prueba de Dunn o la de
Conover. Estas pruebas ayudarán a identificar qué pares de grupos tienen
diferencias significativas en sus medias de rangos, y así será posible
obtener una visión más detallada de cómo la variable independiente
afecta la variable dependiente.
# Instalar y cargar el paquete FSA si aún no lo has hecho
if (!requireNamespace("FSA", quietly = TRUE)) {
install.packages("FSA")
}
## Registered S3 methods overwritten by 'FSA':
## method from
## confint.boot car
## hist.boot car
library(FSA)
## Warning: package 'FSA' was built under R version 4.2.3
## ## FSA v0.9.4. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
##
## Attaching package: 'FSA'
## The following object is masked from 'package:car':
##
## bootCase
# Asumiendo que 'cylinders' es el nombre de la columna que define los grupos en el conjunto de datos 'mpg_data_imputed'
# Convertir la columna en un factor
mpg_data_imputed$cylinders <- as.factor(mpg_data_imputed$cylinders)
# Realizar la prueba de Dunn
dunn_test_result <- dunnTest(mpg_data_imputed$mpg, g = mpg_data_imputed$cylinders, method = "bonferroni")
# Mostrar los resultados de la prueba de Dunn
print(dunn_test_result)
## Dunn (1964) Kruskal-Wallis multiple comparison
## p-values adjusted with the Bonferroni method.
## Comparison Z P.unadj P.adj
## 1 3 - 4 -2.1825916 2.906590e-02 2.906590e-01
## 2 3 - 5 -1.1295182 2.586793e-01 1.000000e+00
## 3 4 - 5 0.4113949 6.807830e-01 1.000000e+00
## 4 3 - 6 0.1769948 8.595125e-01 1.000000e+00
## 5 4 - 6 9.1986730 3.623974e-20 3.623974e-19
## 6 5 - 6 1.6223843 1.047211e-01 1.000000e+00
## 7 3 - 8 1.6897320 9.107924e-02 9.107924e-01
## 8 4 - 8 16.2404322 2.610784e-59 2.610784e-58
## 9 5 - 8 2.9431531 3.248877e-03 3.248877e-02
## 10 6 - 8 5.2411885 1.595456e-07 1.595456e-06
Estas asociaciones no paramétricas de Spearman muestran las
correlaciones de Spearman entre las variables del dataframe. La
correlación de Spearman es una medida de la relación monótona entre dos
variables, que varía entre -1 y 1. Un valor cercano a 1 indica una
relación monótona positiva fuerte, mientras que un valor cercano a -1
indica una relación monótona negativa fuerte. Un valor cercano a 0
indica que no hay una relación monótona entre las variables. Acá hay
algunos ejemplos:
1 mpg y cylinders:
Asociación negativa fuerte (-0.822). A medida que aumenta el número
de cilindros, el consumo de combustible (mpg) tiende a disminuir.
2 mpg y displacement:
Asociación negativa fuerte (-0.856). A medida que aumenta el
desplazamiento, el consumo de combustible (mpg) tiende a disminuir.
3 mpg y horsepower:
Asociación negativa fuerte (-0.843). A medida que aumenta la
potencia, el consumo de combustible (mpg) tiende a disminuir.
4 mpg y weight:
Asociación negativa fuerte (-0.875). A medida que aumenta el peso,
el consumo de combustible (mpg) tiende a disminuir.
5 mpg y acceleration:
Asociación positiva moderada (0.439). A medida que aumenta la
aceleración, el consumo de combustible (mpg) tiende a aumentar
ligeramente.
6 mpg y model_year:
Asociación positiva moderada (0.573). Los vehículos más nuevos
tienden a tener un mayor consumo de combustible (mpg).
7 cylinders y displacement:
Asociación positiva fuerte (0.912). A medida que aumenta el número
de cilindros, el desplazamiento también tiende a aumentar.
8 cylinders y horsepower:
Asociación positiva fuerte (0.809). A medida que aumenta el número
de cilindros, la potencia también tiende a aumentar.
9 cylinders y weight:
Asociación positiva fuerte (0.873). A medida que aumenta el número
de cilindros, el peso también tiende a aumentar.
# Paso 5: Graficar asociaciones o correlaciones
# Cargar la librería 'psych'
library(psych)
##
## Attaching package: 'psych'
## The following object is masked from 'package:FSA':
##
## headtail
## The following object is masked from 'package:car':
##
## logit
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
if (shapiro_test$p.value > 0.05) {
# Gráfico de dispersión para correlación de Pearson
pairs.panels(mpg_data_numeric,
method = "pearson",
hist.col = "#00AFBB",
density = TRUE,
ellipses = TRUE)
} else {
# Gráfico de dispersión para Rho de Spearman
pairs.panels(mpg_data_numeric,
method = "spearman",
hist.col = "#00AFBB",
density = TRUE,
ellipses = TRUE)
}

Para cada par de variables, se muestra un gráfico de dispersión en
la parte inferior de la diagonal y la correlación de Spearman en la
parte superior. Las correlaciones de Spearman ya las hemos interpretado
en una respuesta anterior.
Además, en la diagonal principal del gráfico, se mostrarán
histogramas y curvas de densidad de cada variable. Los histogramas
permiten visualizar la distribución de los datos para cada variable,
mientras que las curvas de densidad proporcionan una estimación
suavizada de la distribución.
El gráfico también incluye elipses en cada diagrama de dispersión.
Las elipses representan la concentración de los datos en el espacio
bidimensional. Si la elipse está inclinada hacia arriba (hacia la
derecha), indica una correlación positiva entre las variables, mientras
que si está inclinada hacia abajo (hacia la derecha), indica una
correlación negativa. La estrechez de la elipse sugiere la fuerza de la
correlación: una elipse más estrecha indica una correlación más fuerte
entre las variables.