Las variables que usamos son horsepower (caballos de fuerza) y weight (peso) como varibales cuantitativas y como las cualitativas son car name (nombre del carro) Row —
library(readr)
library(readxl)
library(corrplot)
## corrplot 0.95 loaded
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
auto_mpg_csv <- read.csv("auto-mpg.csv", sep = ";")
vars_cuanti<-names(auto_mpg_csv)[sapply(auto_mpg_csv, is.numeric)]
mat_cor <- cor(auto_mpg_csv[vars_cuanti], use = "complete.obs", method = "pearson")
corrplot(mat_cor,method = "color",)
cor(auto_mpg_csv$weight, auto_mpg_csv$horsepower)
## [1] 0.8639838
summary(auto_mpg_csv$horsepower)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 46.00 75.25 92.00 104.12 125.00 230.00
El valor mÃnimo observado de caballos de fuerza de los autos es 46.
El primer cuartil (1st Qu): El 25% de los autos tiene menos de 75.25 caballos de fuerza y el 75% más.
La mediana (Median): La mitad de los autos tiene menos de 92 caballos de fuerza y la otra mitad más.
La media aritmética (mean) de los caballos de fuerza es 104.12
El tercer cuartil (3rd Qu): El 75% de los autos pesa tiene menos de 125 caballos de fuerza y el 25% más.
El valor máximo observado de caballos de fuerza es de 230.
summary(auto_mpg_csv$weight)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1613 2224 2804 2970 3608 5140
El valor mÃnimo observado del peso de los autos es 1613lb.
El primer cuartil (1st Qu): El 25% de los autos pesa menos de 2224lb y el 75% pesa más.
La mediana (Median): La mitad de los autos pesa menos de 2804lb y la otra mitad más.
La media aritmética (mean) del peso es 2970lb.
El tercer cuartil (3rd Qu): El 75% de los autos pesa menos de 3608lb, y el 25% pesa más.
El valor máximo observado del peso de los autos es 5140lb.
hist(auto_mpg_csv$weight,
main = "Histograma del peso de los autos",
xlab = "Peso (lbs)",
col = "skyblue",
border = "white")
Distribución sesgada a la derecha.
Mayor concentración en autos livianos-medianos.
plot(auto_mpg_csv$weight, auto_mpg_csv$mpg,
main = "Diagrama de dispersión: Peso vs Rendimiento (mpg)",
xlab = "Peso (lbs)",
ylab = "Millas por galón (mpg)",
pch = 19, col = "darkblue")
Relación negativa clara
boxplot(auto_mpg_csv$weight,
main = "Diagrama de cajas del peso de los autos",
ylab = "Peso (lbs)",
col = "orange",
border = "brown")
Mediana
Rango total (~1600–5100 lbs)
Los bigotes muestran los valores más extremos sin considerarse atÃpicos.
Hay autos muy livianos y autos muy pesados.
boxplot(auto_mpg_csv$horsepower,
main = "Diagrama de cajas de la potencia (horsepower)",
ylab = "Caballos de fuerza (hp)",
col = "lightgreen",
border = "darkgreen")
Mediana
Rango intercuartÃlico
El 50% central de los autos tiene una potencia dentro de este rango.
Esto concentra a la mayorÃa en potencias moderadas.
Rango total
# Leer los datos
# Convertir variables a numéricas donde sea necesario
auto_mpg_csv$horsepower <- as.numeric(auto_mpg_csv$horsepower)
auto_mpg_csv$car.name <- as.factor(auto_mpg_csv$car.name)
# --- Análisis descriptivo ---
summary(auto_mpg_csv)
## mpg cylinders displacement horsepower
## Min. : 9.00 Min. :3.000 Min. : 68.0 Min. : 46.00
## 1st Qu.:17.50 1st Qu.:4.000 1st Qu.:104.2 1st Qu.: 75.25
## Median :23.00 Median :4.000 Median :148.5 Median : 92.00
## Mean :23.51 Mean :5.455 Mean :193.4 Mean :104.12
## 3rd Qu.:29.00 3rd Qu.:8.000 3rd Qu.:262.0 3rd Qu.:125.00
## Max. :46.60 Max. :8.000 Max. :455.0 Max. :230.00
##
## weight acceleration model.year origin
## Min. :1613 Min. : 8.00 Min. :70.00 Min. :1.000
## 1st Qu.:2224 1st Qu.:13.82 1st Qu.:73.00 1st Qu.:1.000
## Median :2804 Median :15.50 Median :76.00 Median :1.000
## Mean :2970 Mean :15.57 Mean :76.01 Mean :1.573
## 3rd Qu.:3608 3rd Qu.:17.18 3rd Qu.:79.00 3rd Qu.:2.000
## Max. :5140 Max. :24.80 Max. :82.00 Max. :3.000
##
## car.name
## ford pinto : 6
## amc matador : 5
## ford maverick : 5
## toyota corolla: 5
## amc gremlin : 4
## amc hornet : 4
## (Other) :369
# Media y desviación estándar del consumo (mpg)
mean(auto_mpg_csv$mpg, na.rm = TRUE)
## [1] 23.51457
sd(auto_mpg_csv$mpg, na.rm = TRUE)
## [1] 7.815984
# --- Comparaciones ---
# Ejemplo 1: comparación de consumo (mpg) por origen (variable cualitativa)
# origen = 1, 2, 3 (América, Europa, Asia)
t.test(mpg ~ origin, data = subset(auto_mpg_csv, origin %in% c(1, 2)), var.equal = FALSE)
##
## Welch Two Sample t-test
##
## data: mpg by origin
## t = -8.6726, df = 106.73, p-value = 5.139e-14
## alternative hypothesis: true difference in means between group 1 and group 2 is not equal to 0
## 95 percent confidence interval:
## -9.592665 -6.023124
## sample estimates:
## mean in group 1 mean in group 2
## 20.08353 27.89143
# Ejemplo 2: comparación pareada entre peso y caballos de fuerza (no tiene mucho sentido práctico, pero sirve como ejemplo estadÃstico)
t.test(auto_mpg_csv$weight, auto_mpg_csv$horsepower, paired = TRUE)
##
## Paired t-test
##
## data: auto_mpg_csv$weight and auto_mpg_csv$horsepower
## t = 70.252, df = 397, p-value < 2.2e-16
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 2786.095 2946.518
## sample estimates:
## mean difference
## 2866.307
# --- Proporciones ---
# Proporción de autos de origen 1 (América)
prop.test(sum(auto_mpg_csv$origin == 1, na.rm = TRUE), nrow(auto_mpg_csv), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(auto_mpg_csv$origin == 1, na.rm = TRUE) out of nrow(auto_mpg_csv), null probability 0.5
## X-squared = 24.626, df = 1, p-value = 6.962e-07
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5758178 0.6729734
## sample estimates:
## p
## 0.6256281
# --- Listar variables numéricas ---
nombres <- names(auto_mpg_csv)[sapply(auto_mpg_csv, is.numeric)]
nombres
## [1] "mpg" "cylinders" "displacement" "horsepower" "weight"
## [6] "acceleration" "model.year" "origin"
# --- Regresión lineal con horsepower y weight ---
# Primero aseguramos que las variables sean numéricas
auto_mpg_csv$horsepower <- as.numeric(auto_mpg_csv$horsepower)
auto_mpg_csv$weight <- as.numeric(auto_mpg_csv$weight)
# Crear la base reducida solo con las variables necesarias
datos_reg <- auto_mpg_csv[, c("mpg", "horsepower", "weight")]
# Ajustar el modelo de regresión lineal
modelo <- lm(weight ~ horsepower, data = datos_reg)
summary(modelo)
##
## Call:
## lm(formula = weight ~ horsepower, data = datos_reg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2192.63 -297.15 -79.74 330.78 1150.47
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 982.3167 62.0325 15.84 <2e-16 ***
## horsepower 19.0947 0.5592 34.15 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 426.9 on 396 degrees of freedom
## Multiple R-squared: 0.7465, Adjusted R-squared: 0.7458
## F-statistic: 1166 on 1 and 396 DF, p-value: < 2.2e-16
# Mostrar ecuación de la recta
coeficientes <- coef(modelo)
paste0("Weight = ",
round(coeficientes[1], 3), " + ",
round(coeficientes[2], 3), " * Horsepower")
## [1] "Weight = 982.317 + 19.095 * Horsepower"
## ecuacion en la gráfica
eq <- paste0("Weight = ",
round(coef(modelo)[1], 2), " + ",
round(coef(modelo)[2], 2), " * HP")
ggplot(datos_reg, aes(x = horsepower, y = weight)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE, color = "blue") +
annotate("text",
x = Inf, y = -Inf,
label = eq,
hjust = 1.1, vjust = -1.5,
size = 5) +
labs(title = "Regresión lineal", x = "Horsepower", y = "Weight")
## `geom_smooth()` using formula = 'y ~ x'
## Gráfica de diagnostico
library(ggplot2)
##Residuals vs Fitted
ggplot(data.frame(fitted = fitted(modelo),
resid = resid(modelo)),
aes(x = fitted, y = resid)) +
geom_point(alpha = 0.4, size = 2, position = position_jitter(width = 10)) +
geom_hline(yintercept = 0, color = "red") +
labs(title = "Residuals vs Fitted",
x = "Fitted values",
y = "Residuals") +
theme_minimal()
##Q-Q Plot
ggplot(data.frame(resid = rstandard(modelo)),
aes(sample = resid)) +
stat_qq(alpha = 0.4, size = 2) +
stat_qq_line(color = "red") +
labs(title = "Q-Q Residuals",
x = "Theoretical Quantiles",
y = "Standardized Residuals") +
theme_minimal()
##Scale-Location
ggplot(data.frame(fitted = fitted(modelo),
resid = rstandard(modelo)),
aes(x = fitted, y = sqrt(abs(resid)))) +
geom_point(alpha = 0.4, size = 2, position = position_jitter(width = 10)) +
geom_smooth(method = "loess", se = FALSE, color = "red") +
labs(title = "Scale-Location",
x = "Fitted values",
y = "√|Standardized residuals|") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
##Residuals vs Leverage
influ <- influence.measures(modelo)
lev <- hatvalues(modelo)
stdres <- rstandard(modelo)
ggplot(data.frame(lev = lev, stdres = stdres),
aes(x = lev, y = stdres)) +
geom_point(alpha = 0.4, size = 2) +
geom_smooth(method = "loess", se = FALSE, color = "red") +
labs(title = "Residuals vs Leverage",
x = "Leverage",
y = "Standardized residuals") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'