Variables

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")

  1. Distribución sesgada a la derecha.

    • La mayoría de los autos pesa entre 2000 y 3500 lbs.
  2. Mayor concentración en autos livianos-medianos.

    • El grupo más numeroso está en el rango de 2000–2500 lbs, seguido de 2500–3000 lbs.
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")

  1. Relación negativa clara

    • A medida que el peso del auto aumenta, el rendimiento en millas por galón disminuye.
boxplot(auto_mpg_csv$weight,
        main = "Diagrama de cajas del peso de los autos",
        ylab = "Peso (lbs)",
        col = "orange",
        border = "brown")

  1. Mediana

    • La línea gruesa dentro de la caja indica que la mitad de los autos pesan menos de 2800 lbs y la otra mitad más.
  2. 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")

  1. Mediana

    • La línea central de la caja indica que la mitad de los autos tiene menos de 90 hp y la otra mitad más. Esto muestra que la mayoría son autos de potencia baja o media.
  2. 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.

  3. Rango total

    • Los bigotes muestran que la mayoría de los autos tiene entre 50 y 200 hp.
# 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'