Se dispone de un data frame con información sobre diferentes coches. Se quiere estudiar si existe una correlación entre el peso de un vehículo (Weight) y la potencia de su motor (Horsepower). El data frame se llama cars93 y está integrado a la librería MASS. Carguemos las librerías
library(MASS)
library(ggplot2)
Analicemos el data frame:
str(Cars93)
## '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 ...
summary(Cars93)
## Manufacturer Model Type Min.Price Price
## Chevrolet: 8 100 : 1 Compact:16 Min. : 6.70 Min. : 7.40
## Ford : 8 190E : 1 Large :11 1st Qu.:10.80 1st Qu.:12.20
## Dodge : 6 240 : 1 Midsize:22 Median :14.70 Median :17.70
## Mazda : 5 300E : 1 Small :21 Mean :17.13 Mean :19.51
## Pontiac : 5 323 : 1 Sporty :14 3rd Qu.:20.30 3rd Qu.:23.30
## Buick : 4 535i : 1 Van : 9 Max. :45.40 Max. :61.90
## (Other) :57 (Other):87
## Max.Price MPG.city MPG.highway AirBags
## Min. : 7.9 Min. :15.00 Min. :20.00 Driver & Passenger:16
## 1st Qu.:14.7 1st Qu.:18.00 1st Qu.:26.00 Driver only :43
## Median :19.6 Median :21.00 Median :28.00 None :34
## Mean :21.9 Mean :22.37 Mean :29.09
## 3rd Qu.:25.3 3rd Qu.:25.00 3rd Qu.:31.00
## Max. :80.0 Max. :46.00 Max. :50.00
##
## DriveTrain Cylinders EngineSize Horsepower RPM
## 4WD :10 3 : 3 Min. :1.000 Min. : 55.0 Min. :3800
## Front:67 4 :49 1st Qu.:1.800 1st Qu.:103.0 1st Qu.:4800
## Rear :16 5 : 2 Median :2.400 Median :140.0 Median :5200
## 6 :31 Mean :2.668 Mean :143.8 Mean :5281
## 8 : 7 3rd Qu.:3.300 3rd Qu.:170.0 3rd Qu.:5750
## rotary: 1 Max. :5.700 Max. :300.0 Max. :6500
##
## Rev.per.mile Man.trans.avail Fuel.tank.capacity Passengers
## Min. :1320 No :32 Min. : 9.20 Min. :2.000
## 1st Qu.:1985 Yes:61 1st Qu.:14.50 1st Qu.:4.000
## Median :2340 Median :16.40 Median :5.000
## Mean :2332 Mean :16.66 Mean :5.086
## 3rd Qu.:2565 3rd Qu.:18.80 3rd Qu.:6.000
## Max. :3755 Max. :27.00 Max. :8.000
##
## Length Wheelbase Width Turn.circle
## Min. :141.0 Min. : 90.0 Min. :60.00 Min. :32.00
## 1st Qu.:174.0 1st Qu.: 98.0 1st Qu.:67.00 1st Qu.:37.00
## Median :183.0 Median :103.0 Median :69.00 Median :39.00
## Mean :183.2 Mean :103.9 Mean :69.38 Mean :38.96
## 3rd Qu.:192.0 3rd Qu.:110.0 3rd Qu.:72.00 3rd Qu.:41.00
## Max. :219.0 Max. :119.0 Max. :78.00 Max. :45.00
##
## Rear.seat.room Luggage.room Weight Origin Make
## Min. :19.00 Min. : 6.00 Min. :1695 USA :48 Acura Integra: 1
## 1st Qu.:26.00 1st Qu.:12.00 1st Qu.:2620 non-USA:45 Acura Legend : 1
## Median :27.50 Median :14.00 Median :3040 Audi 100 : 1
## Mean :27.83 Mean :13.89 Mean :3073 Audi 90 : 1
## 3rd Qu.:30.00 3rd Qu.:15.00 3rd Qu.:3525 BMW 535i : 1
## Max. :36.00 Max. :22.00 Max. :4105 Buick Century: 1
## NA's :2 NA's :11 (Other) :87
View(Cars93)
En primer lugar se representan las dos variables mediante un diagrama de dispersión para intuir si existe relación lineal o monotónica. Si no la hay, no tiene sentido calcular este tipo de correlaciones.
ggplot(data = Cars93, aes(x = Weight, y = Horsepower)) +
geom_point(colour = "red4") +
ggtitle("Diagrama de dispersión") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
El diagrama de dispersión parece indicar una posible relación lineal positiva entre ambas variables. El siguiente análisis es para corroborar el supuesto de normalidad que impone el método de correlación sobre las dos variables estudiadas.
Representaciones gráficas:
ggplot(data = Cars93, aes(x = Weight)) +
geom_histogram(colour = "red", bins=10) +
theme_bw()
Representaciones gráficas:
ggplot(data = Cars93, aes(x = Horsepower)) +
geom_histogram(colour = "red", bins=10) +
theme_bw()
shapiro.test(Cars93$Weight)
##
## Shapiro-Wilk normality test
##
## data: Cars93$Weight
## W = 0.97432, p-value = 0.06337
shapiro.test(Cars93$Horsepower)
##
## Shapiro-Wilk normality test
##
## data: Cars93$Horsepower
## W = 0.93581, p-value = 0.0001916
La prueba de hipótesis para la variable Weight arroja un p-value = 0.06337, el cual al no ser menor a α (0,05 típicamente) no se puede rechazar H0. La prueba de hipótesis para la variable Horsepower arroja un p-value = 0.0001916, el cual al ser menor a α (0,05 típicamente) rechaza H0. Nota: si p-value < α, se rechaza Ho.
El análisis gráfico y el contraste de normalidad muestran que para la variable Horsepower no se puede asumir normalidad y que la variable Weight está en el límite. Siendo estrictos, este hecho excluye la posibilidad de utilizar el coeficiente de Pearson. Sin embargo, dado que la distribución no se aleja mucho de la normalidad y de que el coeficiente de Pearson tiene cierta robustez, a fines prácticos sí que se podría utilizar, siempre y cuando se tenga en cuenta este hecho en los resultados (o sea, con las reservas del caso).
Calculo de la correlación:
cor(x = Cars93$Weight, y = Cars93$Horsepower, method = "pearson")
## [1] 0.7387975
La función cor() arroja un coeficiente de 0.7387975, lo cual representa una correlación significativa (>0.7). Sin embargo, para poder considerar que existe realmente correlación entre las dos variables es necesario calcular su significancia, de lo contrario podría deberse al azar.
Por muy alto que sea un coeficiente de correlación, si no es significativa se ha de considerar inexistente. Recuerda que H0 considera que las variables son independientes (coeficiente de correlación poblacional = 0), mientras que la Ha considera que existe relación (coeficiente de correlación poblacional ≠ 0).
cor.test(x = Cars93$Weight,
y = Cars93$Horsepower,
alternative = "two.sided",
conf.level = 0.95,
method = "pearson")
##
## Pearson's product-moment correlation
##
## data: Cars93$Weight and Cars93$Horsepower
## t = 10.458, df = 91, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6298867 0.8192147
## sample estimates:
## cor
## 0.7387975
La prueba arroja un p-value < 2.2e-16, por lo que H0 se rechaza (p_value < α) y podemos concluir que el coeficiente de correlación es significativo. Correlación lineal
Existe una correlación significativa entre el peso del vehículo y la potencia de su motor (Coeficiente de Correlación =0.74, p-value < 2.2e-16)
La regresión lineal simple consiste en generar un modelo de regresión (ecuación de una recta) que permita explicar la relación lineal que existe entre dos variables. A la variable dependiente o respuesta se le identifica como Y y a la variable predictora o independiente como X.
lm_HPeso <- lm(Horsepower~Weight, data = Cars93)
summary(lm_HPeso)
##
## Call:
## lm(formula = Horsepower ~ Weight, data = Cars93)
##
## Residuals:
## Min 1Q Median 3Q Max
## -93.017 -20.921 -1.515 8.356 136.028
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -57.738203 19.622752 -2.942 0.00413 **
## Weight 0.065595 0.006272 10.458 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 35.49 on 91 degrees of freedom
## Multiple R-squared: 0.5458, Adjusted R-squared: 0.5408
## F-statistic: 109.4 on 1 and 91 DF, p-value: < 2.2e-16