Para tener un mejor manejo de estas variables y facilitar el procedimiento del parcial, vamos a utilizar las siguientes bibliotecas.
# por medio del comando install.packages("tidyverse") descargamos la libreria
# Utilizamos el comando library() para utilizar la libreria
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("ggplot2")
library("ggpmisc")
## Cargando paquete requerido: ggpp
## Registered S3 methods overwritten by 'ggpp':
## method from
## heightDetails.titleGrob ggplot2
## widthDetails.titleGrob ggplot2
##
## Adjuntando el paquete: 'ggpp'
##
## The following object is masked from 'package:ggplot2':
##
## annotate
library("ggpubr")
##
## Adjuntando el paquete: 'ggpubr'
##
## The following objects are masked from 'package:ggpp':
##
## as_npc, as_npcx, as_npcy
## Cargamos el conjunto de datos "mtcars" y le asignamos una variable para facilitar su manejo.
data("mtcars")
Una vez cargada la base de datos y de asignarle un nombre, procedemos a cargarlo para visualizar sus variables
## En el resultado podemos oberservar que hay un total de 11 variables para 32 objetos.
mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Con esta informacion realizamos una visualización general de como se distribuyen las variables continuas de los datos mtcars. apartir de este grafico, seleccionamos las variables a manejar, que son mtg, wt, hp y drat. Estos diagramas sirven para identifcar la forma de la distribución como simetrica o sesgada a la derecha o a la izquierda,permitiendo identificar los valores atipicos y puede verificar si los datos siguen una distribución normal, que es importante para aplicar los metodos estadisticos, como las regresiones y compara la dispersión de los datos.
mtcars %>%
select_if(is.numeric) %>% #Selecciona unicamente las columnas numericas del dataset mtcars
pivot_longer(cols = everything(), names_to = "variable", values_to = "valor") %>% #Transforma el dataset de formato ancho a formato largo creando dos columnas (variable y valor)
ggplot(aes(x = valor)) +
geom_histogram(fill = "orange", color = "black", bins = 10) + ##definimos la estética, usando valores numéricos en el eje x para generar un histograma por cada variable con 10 intervalos, color de bore y relleno
facet_wrap(~variable, scales = "free") + #Creamos un grafico por cada variable numerica en un panle separado, tambien permitimos que cada histograma tenga su propia escala de eje x
theme_minimal() #Aplicamos un tema de estilo simple pero limpio.
A partir de esta grafica,, se puede evidenciar lo siguiente, de cada variable:
cyl (número de cilindros)
disp (desplazamiento del motor en pulgadas cúbicas)
hp (caballos de fuerza)
drat (relación del eje trasero)
wt (peso del auto en miles de libras)
gear (número de marchas)
vs (tipo de motor: 0 = en V, 1 = en línea)
carb (número de carburadores)
mpg (millas por galón)
Utilizamos la función glimpse() para ver la estructura de los datos y calculamos las estadisticas resumidas de todas las variables de mtcars.
glimpse(mtcars)
## Rows: 32
## Columns: 11
## $ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8,…
## $ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8,…
## $ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 16…
## $ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180…
## $ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92,…
## $ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.…
## $ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18…
## $ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,…
## $ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,…
## $ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3,…
## $ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2,…
Con este resumen de la estructura de los datos podemos hacer comparaciones mas adelante entre autos con diferente transmisión para ver si en verdad hay diferencia en el rendimiento, esto gracias a que los valores de mpg son muy variados que van desde autos muy eficientes hasta muy ineficientes.
Ahora calculamos la estadistica resumida para todas las variables numericas de mtcars
mtcars %>% # usamos dplyr para resumir todas las columnas numericas
summarise(across(where(is.numeric),list( #seleccionamos las variables numericas automaticamente
media = mean, #deinimos que funciones se van a aplicar para cada columna seleccionada
mediana = median,
sd = sd,
min = min,
max = max
), na.rm = TRUE)) #ignoramos los valores NA si los hubiera
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(...)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
##
## # Previously
## across(a:b, mean, na.rm = TRUE)
##
## # Now
## across(a:b, \(x) mean(x, na.rm = TRUE))
## mpg_media mpg_mediana mpg_sd mpg_min mpg_max cyl_media cyl_mediana cyl_sd
## 1 20.09062 19.2 6.026948 10.4 33.9 6.1875 6 1.785922
## cyl_min cyl_max disp_media disp_mediana disp_sd disp_min disp_max hp_media
## 1 4 8 230.7219 196.3 123.9387 71.1 472 146.6875
## hp_mediana hp_sd hp_min hp_max drat_media drat_mediana drat_sd drat_min
## 1 123 68.56287 52 335 3.596563 3.695 0.5346787 2.76
## drat_max wt_media wt_mediana wt_sd wt_min wt_max qsec_media qsec_mediana
## 1 4.93 3.21725 3.325 0.9784574 1.513 5.424 17.84875 17.71
## qsec_sd qsec_min qsec_max vs_media vs_mediana vs_sd vs_min vs_max
## 1 1.786943 14.5 22.9 0.4375 0 0.5040161 0 1
## am_media am_mediana am_sd am_min am_max gear_media gear_mediana gear_sd
## 1 0.40625 0 0.4989909 0 1 3.6875 4 0.7378041
## gear_min gear_max carb_media carb_mediana carb_sd carb_min carb_max
## 1 3 5 2.8125 2 1.6152 1 8
una vez calculamos la estdistica de las variables numericas de mtcars podemos hacer la comparación grafica por el rendimiento de mpg entre carros automaticos y manuales.
mtcars <- mtcars %>%
mutate(am=factor(am, labels = c("Automatica", "Manual")))
por medio de este codigo convertimos la variable am, en factor con etiquetas legibles. Luego de estp, realizamos graficos boxplot para ver la comparación del rendimiento entre carros automaticos y manuales dentro de las variables de interes, dependiendo del tipo de transmisión del vehiculo (am).
mtcars %>%
ggplot(aes(x = am, y = mpg, fill = am)) +
geom_boxplot(alpha = 0.7, outliner.color =
"red") +
labs (title = "Comparación de mpg según tipo de transmisión",
x = "tipo de transmisión",
y = "Rendimiento (mpg)"
) + theme_minimal()
## Warning in geom_boxplot(alpha = 0.7, outliner.color = "red"): Ignoring unknown
## parameters: `outliner.colour`
Con el boxplot ya podemos interpretar que en la transmisión automatica (rojo) la mediana tiene alrededor de 17mpg que es bajo consumo, ilustrando una caja pequeña que indica menos variabilidad y con menor rendimiento promedio. EN la trnasmisión Manual (azul), la mediana esta cerca de 23 mpg con una caja mas grande indicando mayor disperción con mejores valores maximos y la tendencia hacia una mayor eficiencia.
ggplot(mtcars, aes(x = am, y = wt, fill = am)) +
geom_boxplot() +
labs(title = "Comparación de peso por tipo de transmisión",
x = "Transmisión", y = "Peso (wt)") +
theme_minimal()
En la interpretacion de este boxplot en la transmicion automatica la media es de aproximadamente 3,5 con un rango intercuartilico que esta entre 3,3 y 4,0 con valores atipicos mayores a 5, indicando que los autos automaticos tienden a ser mas pesados. En la transmicion manual la mediana es de aproximadamente 2,3 con valores atipicos bien definidos, por lo que los autos manuales son mas ligeros.
ggplot(mtcars, aes(x = am, y = hp, fill = am)) +
geom_boxplot() +
labs(title = "Comparación de caballos de fuerza por tipo de transmisión",
x = "Transmisión", y = "Caballos de fuerza (hp)") +
theme_minimal()
En la transmicion automatica la mediana es aproximadamente de 180hp con la mayoria de datos entre 120 y 210 hp con una mayor concentracion de autos potentes sin valores atipicos tan marcados. En la transmicion manual la mediana es aproximadamente 110hp con valores atipicos mayores a 220 y hasta 330 hp. Estos autos son menos potentes pero pocos con una potencia alta .
ggplot(mtcars, aes(x = am, y = drat, fill = am)) +
geom_boxplot() +
labs(title = "Comparación de relación diferencial por tipo de transmisión",
x = "Transmisión", y = "Relación diferencial (drat)") +
theme_minimal()
en la interpretacion de la transmicion automatica la mediana es de aproximadamente 3.1 sin valores atipicos con una distribucion con valores mas concentrados en un rango pequeño. En la transmicion manual la mediana es de aproximadamente 4,2 con valores atipicos casi en 5.
El planteamiento de las hipotesis es sobre la diferencia de medias o medianas mediante el uso de boxplots para la comparación de grupos, evaluando si el consumo de combustible (mpg) varia segun la variable categorica como el tipo de transmisión (am) o el numero de cilindros (cyl).
Al comparar mpg según el am, tenemos que:
el am = 0 es transmisión automatica
el am = 1 es transmisión manual
Hipotesis 0: En los autos con transmision automatica o manual, no se presenta una diferencia significativa en el rendimiento del combustible. Hipotesis 1: En los autos con transmisión automatica o manual, hay una gran diferencia en el rendimiento del combustible entre los dos tipos de transmisión.
Para poder comparar el consumo de combustible entre los carros de transmisión automatica o manual de la variable am, se debe establecer si se puede suponer igualdad de varianzas entre estos grupos, para determinar el tipo de prueba t que se debe aplicar.
Al observar los boxplots de mpg segun am, se evidencia que la dispersión de los datos en los grupos es diferente. El rango intercuartilico y los bigotes muestran una diferencia considerable, aunque al hacer la prueba de fisher para comparar las varianzas, se puede evidenciar un valor p superior a 0.05, lo que indica que las varianzas son iguales.
Para confrimar esta información, vamos a realizar una prueba de fisher, donde se compare la homogeneidad de las varianzas.
var.test(mpg ~ am, data = mtcars)
##
## F test to compare two variances
##
## data: mpg by am
## F = 0.38656, num df = 18, denom df = 12, p-value = 0.06691
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.1243721 1.0703429
## sample estimates:
## ratio of variances
## 0.3865615
El valor p, dio un resultado de 0.067, por lo que al ser mayor a 0.05, no se descarta la hipotesis nula (0) y se asume que tienen igualdad de varianzas, por lo cual, si se pueden asumir varianzas iguales y realizar la prueba t-student con el argumento TRUE.
t.test(mpg ~ am, data = mtcars, var.equal = TRUE) # o FALSE según var.test
##
## Two Sample t-test
##
## data: mpg by am
## t = -4.1061, df = 30, p-value = 0.000285
## alternative hypothesis: true difference in means between group Automatica and group Manual is not equal to 0
## 95 percent confidence interval:
## -10.84837 -3.64151
## sample estimates:
## mean in group Automatica mean in group Manual
## 17.14737 24.39231
Al obervar los resultados de la prueba t student, podemos observar que:
t = -4.1061 indicando que la media del grupo 0 es considerablemente menor que la del grupo 1, en comparación con la variación de los datos.
df = 30 indicando que entre los datos de ambos grupos, hay 30 valores independientes que aportan información para calcular la diferencia entre medias
p-value = 0.000285, que al ser un valor muy pequeño, indica que la diferencia entre medias es altamente significativa.
El intervalo de confianza es del 95%, por lo que la diferencia real de medias está entre -10.85 y -3.64, por lo que todo el intervalo es por debajo de 0, reforazando que el grupo 1 tiene un mayor redimiento de combustible de millas por galon que el grupo 0.
comparamos la variacion de medidas de wt segun su tipo de transmisión, se evaluan las diferencias significativas en el peso de los vehiculos, primero se ejecuta la varianza y luego la prueba t.
var.test(wt ~ am, data = mtcars)
##
## F test to compare two variances
##
## data: wt by am
## F = 1.5876, num df = 18, denom df = 12, p-value = 0.4177
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.5107978 4.3959133
## sample estimates:
## ratio of variances
## 1.587613
t.test(wt ~ am, data = mtcars, var.equal = FALSE)
##
## Welch Two Sample t-test
##
## data: wt by am
## t = 5.4939, df = 29.234, p-value = 6.272e-06
## alternative hypothesis: true difference in means between group Automatica and group Manual is not equal to 0
## 95 percent confidence interval:
## 0.8525632 1.8632262
## sample estimates:
## mean in group Automatica mean in group Manual
## 3.768895 2.411000
calculamos la regresión lineal de mpg, en función de hp, este analisis puede identificar, si la potencia del vehiculo predice en parte su consumo de combustible.
modelo_hp <- lm(mpg ~ hp, data = mtcars)
summary(modelo_hp)
##
## Call:
## lm(formula = mpg ~ hp, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.7121 -2.1122 -0.8854 1.5819 8.2360
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.09886 1.63392 18.421 < 2e-16 ***
## hp -0.06823 0.01012 -6.742 1.79e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.863 on 30 degrees of freedom
## Multiple R-squared: 0.6024, Adjusted R-squared: 0.5892
## F-statistic: 45.46 on 1 and 30 DF, p-value: 1.788e-07
ggplot(mtcars, aes(x = hp, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE, color = "blue") +
stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~")),
formula = y ~ x, parse = TRUE, label.x = "right") +
labs(title = "Regresión: mpg ~ hp", x = "Caballos de fuerza", y = "Rendimiento (mpg)") +
theme_minimal()
## Warning: The dot-dot notation (`..eq.label..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(eq.label)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
demuestra la regresión lineal de mpg en funcion de drat, los resultados se interpretan a traves de los graficos y el valor de R^2.
modelo_drat <- lm(mpg ~ drat, data = mtcars)
summary(modelo_drat)
##
## Call:
## lm(formula = mpg ~ drat, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.0775 -2.6803 -0.2095 2.2976 9.0225
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.525 5.477 -1.374 0.18
## drat 7.678 1.507 5.096 1.78e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.485 on 30 degrees of freedom
## Multiple R-squared: 0.464, Adjusted R-squared: 0.4461
## F-statistic: 25.97 on 1 and 30 DF, p-value: 1.776e-05
ggplot(mtcars, aes(x = drat, y = mpg)) +
geom_point(color = "purple") +
geom_smooth(method = "lm", se = TRUE, color = "darkred") +
stat_poly_eq(
aes(label = paste(..eq.label.., ..rr.label.., sep = "~")),
formula = y ~ x, parse = TRUE, label.x = "right"
) +
labs(
title = "Regresión lineal: mpg ~ drat",
x = "Relación del eje diferencial (drat)",
y = "Rendimiento (mpg)"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
summary(modelo_hp)
##
## Call:
## lm(formula = mpg ~ hp, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.7121 -2.1122 -0.8854 1.5819 8.2360
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.09886 1.63392 18.421 < 2e-16 ***
## hp -0.06823 0.01012 -6.742 1.79e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.863 on 30 degrees of freedom
## Multiple R-squared: 0.6024, Adjusted R-squared: 0.5892
## F-statistic: 45.46 on 1 and 30 DF, p-value: 1.788e-07
summary(modelo_drat)
##
## Call:
## lm(formula = mpg ~ drat, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.0775 -2.6803 -0.2095 2.2976 9.0225
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.525 5.477 -1.374 0.18
## drat 7.678 1.507 5.096 1.78e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.485 on 30 degrees of freedom
## Multiple R-squared: 0.464, Adjusted R-squared: 0.4461
## F-statistic: 25.97 on 1 and 30 DF, p-value: 1.776e-05