paquetes <- library(help = "datasets")  # Guarda información del paquete "datasets" en la variable 'paquetes'
head(paquetes$info[[2]])               # Muestra parte de esa información (lista de datasets disponibles)
## [1] "AirPassengers           Monthly Airline Passenger Numbers 1949-1960"   
## [2] "BJsales                 Sales Data with Leading Indicator"             
## [3] "BOD                     Biochemical Oxygen Demand"                     
## [4] "CO2                     Carbon Dioxide Uptake in Grass Plants"         
## [5] "ChickWeight             Weight versus age of chicks on different diets"
## [6] "DNase                   Elisa assay of DNase"
library(MASS)
data("Cars93")
datos <- Cars93
?Cars93
## starting httpd help server ... done
head(datos)
##   Manufacturer   Model    Type Min.Price Price Max.Price MPG.city MPG.highway
## 1        Acura Integra   Small      12.9  15.9      18.8       25          31
## 2        Acura  Legend Midsize      29.2  33.9      38.7       18          25
## 3         Audi      90 Compact      25.9  29.1      32.3       20          26
## 4         Audi     100 Midsize      30.8  37.7      44.6       19          26
## 5          BMW    535i Midsize      23.7  30.0      36.2       22          30
## 6        Buick Century Midsize      14.2  15.7      17.3       22          31
##              AirBags DriveTrain Cylinders EngineSize Horsepower  RPM
## 1               None      Front         4        1.8        140 6300
## 2 Driver & Passenger      Front         6        3.2        200 5500
## 3        Driver only      Front         6        2.8        172 5500
## 4 Driver & Passenger      Front         6        2.8        172 5500
## 5        Driver only       Rear         4        3.5        208 5700
## 6        Driver only      Front         4        2.2        110 5200
##   Rev.per.mile Man.trans.avail Fuel.tank.capacity Passengers Length Wheelbase
## 1         2890             Yes               13.2          5    177       102
## 2         2335             Yes               18.0          5    195       115
## 3         2280             Yes               16.9          5    180       102
## 4         2535             Yes               21.1          6    193       106
## 5         2545             Yes               21.1          4    186       109
## 6         2565              No               16.4          6    189       105
##   Width Turn.circle Rear.seat.room Luggage.room Weight  Origin          Make
## 1    68          37           26.5           11   2705 non-USA Acura Integra
## 2    71          38           30.0           15   3560 non-USA  Acura Legend
## 3    67          37           28.0           14   3375 non-USA       Audi 90
## 4    70          37           31.0           17   3405 non-USA      Audi 100
## 5    69          39           27.0           13   3640 non-USA      BMW 535i
## 6    69          41           28.0           16   2880     USA Buick Century
str(datos)
## 'data.frame':    93 obs. of  27 variables:
##  $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
##  $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
##  $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
##  $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
##  $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
##  $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
##  $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
##  $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
##  $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
##  $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
##  $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
##  $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
##  $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
##  $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
##  $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
##  $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
##  $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
##  $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
##  $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
##  $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
##  $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
##  $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
##  $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
##  $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
##  $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
##  $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
##  $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...

Los nombres de las variables son:

Manufacturer Model Type Min.Price Price Max.Price MPG.city MPG.highway AirBags DriveTrain Cylinders EngineSize Horsepower RPM Rev.per.mile Man.trans.avail Fuel.tank.capacity Passengers Length Wheelbase Width Turn.circle Rear.seat.room Luggage.room Weight Origin Make

dim(datos)
## [1] 93 27

Hay 93 filas y 27 columnas, es decir, son 27 variables y 93 observaciones.

X1<-datos$EngineSize
Y<-datos$MPG.city
hist(X1,
     main = "Histograma de EngineSize",
     xlab = "EngineSize",
     col = "skyblue",
     border = "white")

Notamos una leve asimetría a la derecha, ya que vemos una mayor concentración en los valores más pequeños. Vemos la mayor frecuencia entre motores de tamaño 2 y 3 en unidades de litros. Hay una menor frecuencia en entre 4 y 6 litros. El 6 podría considerarse ya un valor atípico porque está muy alejado, esto podría afectar a la media.

hist(Y,
     main = "Histograma de MPG city",
     xlab = "MPG city",
     col = "skyblue",
     border = "white")

En MPG city es mucho más evidente la asimetría a la derecha, los valores están concentrados en millas por galón más pequeñas, ya que la mayor frecuencia son las de 15 millas por galón y va bajando, cuando llega a 50 millas por galón observamos muy baja frecuencia. Podríamos considerar valores atípicos entre el 45 y 50.

summary(X1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.800   2.400   2.668   3.300   5.700
sd(X1)
## [1] 1.037363
IQR(X1)
## [1] 1.5

Vemos que los tamaños de motor oscilan entre 1 (mínimo) y 5.7 (máximo). Hay una media de 2.668 litros con una desviación estándar de +- 1.037 litros. También observamos una mediana de 2.4 con un rango intercuartílico de 1.5 litros. Vemos que la media es mayor que la mediana, por tanto hay valores atípicos que la estan subiendo. El cuartil uno es el 1.8 es decir el 25% de los autos tienen a lo más 1.8 litros en cuanto al tamaño del motor. Mientras que el 75% (cuartil 3), de los autos tienen un tienen a lo más 3.3 litros.

summary(Y)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   15.00   18.00   21.00   22.37   25.00   46.00
sd(Y)
## [1] 5.619812
IQR(Y)
## [1] 7

Vemos que las millas por galón en ciudad oscilan entre 15 (mínimo) y 46 millas (máximo). Hay una media de 22.37 millas por galón con una desviación estándar de +- 5.6 millas por galón. También observamos una mediana de 21 con un rango intercuartílico de 7 millas por galón. Vemos que la media es mayor que la mediana, por tanto hay valores atípicos que la estan subiendo. El cuartil uno es el 18 es decir el 25% de los autos consumen a lo más 18 millas por galón en ciudad. Mientras que el 75% (cuartil 3), de los autos tienen consumen a lo más 25 millas por galón en ciudad.

X: EngineSize (variable explicativa) Y: MPG city (variable respuesta)

Diagrama de dispersión

with(datos, plot(EngineSize, MPG.city))

En el gráfico de dispersión se osberva una correlación negativa entre el tamaño del motor y las millas por galón en ciudad, ya que al aumentar el tamaño del motor, las millas por galón en ciudad parecen disminuir; sin embargo, vamos a realizar las pruebas estadísticas correspondientes para confirmarlo.

Normalidad

Verifiquemos que los datos sean normales, utilizando el test de shapiro pues los datos son menores a 50.

shapiro.test(X1)
## 
##  Shapiro-Wilk normality test
## 
## data:  X1
## W = 0.9361, p-value = 0.000199
shapiro.test(Y)
## 
##  Shapiro-Wilk normality test
## 
## data:  Y
## W = 0.85831, p-value = 5.763e-08

Para verificar el supuesto de normalidad se uso la prueba Shapiro-Wilk obteniendo un p-valor menor que 0.05 en el tamaño del motor y las millas por galón en ciudad, lo que indica que estas no siguen una distribución aproximadamente normal.

#Tamaño de muestra
N = nrow(datos)

#Medias
x1m = mean(X1)
ym = mean(Y)

#Covarianza
Cov = sum((X1 - x1m) * (Y - ym) / (N - 1))
Cov
## [1] -4.139165
cov(X1,Y)
## [1] -4.139165

Observamos una covarianza negativa, lo que indica que el coeficiente de correlación lineal será negativo. Sin embargo, como la covarianza no es adimensional, no podemos usarla para medir la fuerza de la relación ni compararla con otros estudios.

Coeficiente de correlación

Como observamos previamente, los datos no son normales, por tanto, calculamos el coeficiente de correlación de Spearman de la siguiente forma:

R1 = cor(X1, Y,method = "spearman")
R1
## [1] -0.821208

Obtuvimos un coeficiente de correlación de -0.82. Por tanto, existe una correlación negativa fuerte entre el tamaño del motor y las millas por galón en ciudad. Es decir, a medida que el tamaño del motor aumenta, las millas por galón en ciudad disminuyen.

Prueba de hipótesis

Ho: Ρ = 0 H1: Ρ ≠ 0

cor.test(X1, Y, method = "spearman") 
## Warning in cor.test.default(X1, Y, method = "spearman"): Cannot compute exact
## p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  X1 and Y
## S = 244122, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## -0.821208

Dado que el p-valor es menor a 0.05, rechazamos la hipótesis nula. Esto indica que hay evidencia estadística suficiente para afirmar que existe una correlación significativa entre el tamaño del motor y las millas por galón en ciudad.

# Sumas de x, y, xy

sum_x1 <- sum(X1)    
sum_y <- sum(Y)     
sum_x1y <- sum(X1 * Y)  

# Cálculo de Sxy 
Sxy <- sum_x1y - (sum_x1 * sum_y) / N 

# Suma de cuadrados
sum_x1_sq <- sum(X1^2) 
sum_y_sq <- sum(Y^2)    

# Sumas al cuadrado (del tipo (sumx)^2)

sum_x1_squared <- sum_x1^2  
sum_y_squared <- sum_y^2    

# Cálculo de Sxx y Syy

Sxx <- sum_x1_sq - (sum_x1_squared / N)
Syy <- sum_y_sq - (sum_y_squared / N)

#Realizamos la estimación de Bo y B1
B1<-((sum_x1*ym)-sum_x1y)/((sum_x1*x1m)-sum_x1_sq)
B1
## [1] -3.846372
B0<-ym -B1*x1m
B0
## [1] 32.62672
#lm linear model (y~x)
M1 = lm(Y ~ X1)
summary(M1)
## 
## Call:
## lm(formula = Y ~ X1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.6264  -2.7032  -0.5491   2.1428  17.2197 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  32.6267     1.1439  28.523  < 2e-16 ***
## X1           -3.8464     0.3999  -9.618 1.61e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.979 on 91 degrees of freedom
## Multiple R-squared:  0.5041, Adjusted R-squared:  0.4987 
## F-statistic: 92.51 on 1 and 91 DF,  p-value: 1.606e-15

La ecuación quedaría de la siguiente manera:

\[ y = 32.63 - 3.84x \]

La recta de regresión obtenida representa el mejor ajuste lineal posible para modelar la relación entre las diferencias y el número de errores, según el método de mínimos cuadrados. Al interpretarla analizamos que por cada litro que aumenta en términos del tamaño del motor, las millas por galón en ciudad disminuyen en promedio a 3.84. Por otro lado, el intercepto no es interpretable, pues si el tamaño del motor fuera 0, no habría carro que analizar, no existe carro sin motor. Su gráfica es la siguiente:

# Graficar la relación con la línea de regresión
plot(datos$EngineSize, datos$MPG.city, 
     main = "Regresión Lineal: MPG.city vs enginesize", 
     xlab = "engine size", ylab = "mpg city", pch = 19, col = "blue")
abline(M1, col = "red", lwd = 2)  # Línea de regresión

R12 <- (cor(X1, Y,method = "spearman"))^2
R12
## [1] 0.6743826

El 67.43% de la variabilidad observada las millas por galón en ciudad se debe al tamaño del motor y el 32.57% restante se debe a otros facroees que no han sido incluidas en el estudio. De todas formas, como el coeficiente de determinación es menor a 70%, no podemos afirmar que el modelo tiene una buena capacidad predictoria, sin embargo, está cerca.

p_2 <- (sum((Y - mean(Y))^2) - sum((Y - M1$fitted.values)^2)) / sum((Y - mean(Y))^2)
p_2
## [1] 0.5041045