## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## corrplot 0.94 loaded
##
## Adjuntando el paquete: 'mod'
## The following objects are masked from 'package:base':
##
## drop, use
data <- read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/MTCars.csv")
head(data)
## car_ID symboling CarName fueltype aspiration doornumber
## 1 1 3 alfa-romero giulia gas std two
## 2 2 3 alfa-romero stelvio gas std two
## 3 3 1 alfa-romero Quadrifoglio gas std two
## 4 4 2 audi 100 ls gas std four
## 5 5 2 audi 100ls gas std four
## 6 6 2 audi fox gas std two
## carbody drivewheel enginelocation wheelbase carlength carwidth carheight
## 1 convertible rwd front 88.6 168.8 64.1 48.8
## 2 convertible rwd front 88.6 168.8 64.1 48.8
## 3 hatchback rwd front 94.5 171.2 65.5 52.4
## 4 sedan fwd front 99.8 176.6 66.2 54.3
## 5 sedan 4wd front 99.4 176.6 66.4 54.3
## 6 sedan fwd front 99.8 177.3 66.3 53.1
## curbweight enginetype cylindernumber enginesize fuelsystem boreratio stroke
## 1 2548 dohc four 130 mpfi 3.47 2.68
## 2 2548 dohc four 130 mpfi 3.47 2.68
## 3 2823 ohcv six 152 mpfi 2.68 3.47
## 4 2337 ohc four 109 mpfi 3.19 3.40
## 5 2824 ohc five 136 mpfi 3.19 3.40
## 6 2507 ohc five 136 mpfi 3.19 3.40
## compressionratio horsepower peakrpm citympg highwaympg price
## 1 9.0 111 5000 21 27 13495
## 2 9.0 111 5000 21 27 16500
## 3 9.0 154 5000 19 26 16500
## 4 10.0 102 5500 24 30 13950
## 5 8.0 115 5500 18 22 17450
## 6 8.5 110 5500 19 25 15250
names(data)
## [1] "car_ID" "symboling" "CarName" "fueltype"
## [5] "aspiration" "doornumber" "carbody" "drivewheel"
## [9] "enginelocation" "wheelbase" "carlength" "carwidth"
## [13] "carheight" "curbweight" "enginetype" "cylindernumber"
## [17] "enginesize" "fuelsystem" "boreratio" "stroke"
## [21] "compressionratio" "horsepower" "peakrpm" "citympg"
## [25] "highwaympg" "price"
| Nombre de la Variable | Tipo de Variable |
|---|---|
| Car_ID | Integer |
| Symboling | Categorical |
| carCompany | Categorical |
| fueltype | Categorical |
| aspiration | Categorical |
| doornumber | Categorical |
| carbody | Categorical |
| drivewheel | Categorical |
| enginelocation | Categorical |
| wheelbase | Numeric |
| carlength | Numeric |
| carwidth | Numeric |
| carheight | Numeric |
| curbweight | Numeric |
| enginetype | Categorical |
| cylindernumber | Categorical |
| enginesize | Numeric |
| fuelsystem | Categorical |
| boreratio | Numeric |
| stroke | Numeric |
| compressionratio | Numeric |
| horsepower | Numeric |
| peakrpm | Numeric |
| citympg | Numeric |
| highwaympg | Numeric |
| price (Dependent variable) | Numeric |
Ya conociendo el dataset y explorándolo, tenemos la información necesaria para descartar nuestras variables cualitativas y así hacer el análisis de correlaciones solo con nuestras variables cuantitativas. ## Subseting el dataset solo con variables cuantitativas
cuantitativas <- c( "price", "wheelbase", "carlength", "carwidth", "carheight",
"curbweight", "enginesize", "boreratio", "stroke",
"compressionratio", "horsepower", "peakrpm",
"citympg", "highwaympg")
subset1 <- data[, cuantitativas]
head(subset1)
## price wheelbase carlength carwidth carheight curbweight enginesize boreratio
## 1 13495 88.6 168.8 64.1 48.8 2548 130 3.47
## 2 16500 88.6 168.8 64.1 48.8 2548 130 3.47
## 3 16500 94.5 171.2 65.5 52.4 2823 152 2.68
## 4 13950 99.8 176.6 66.2 54.3 2337 109 3.19
## 5 17450 99.4 176.6 66.4 54.3 2824 136 3.19
## 6 15250 99.8 177.3 66.3 53.1 2507 136 3.19
## stroke compressionratio horsepower peakrpm citympg highwaympg
## 1 2.68 9.0 111 5000 21 27
## 2 2.68 9.0 111 5000 21 27
## 3 3.47 9.0 154 5000 19 26
## 4 3.40 10.0 102 5500 24 30
## 5 3.40 8.0 115 5500 18 22
## 6 3.40 8.5 110 5500 19 25
par(oma = c(1, 1, 1, 1), mar = c(5, 4, 4, 2) + 0.1)
corrplot.mixed(cor(subset1),
lower = "number",
upper = "circle",
tl.pos = "n")
corrplot(cor(subset1), add = TRUE, method = "circle",
type = "upper", tl.pos = "lt", # Etiquetas en la parte superior izquierda
tl.col = "black", number.cex = 0.7, addCoef.col = "black",
cl.pos = "n",
diag = TRUE)
Dado
que ya filtramos nuestras variables cualitativas, ahora falta elegir las
variables con mejor correlación con nuestra variable dependiente, que es
el precio. Esto lo podemos deducir observando la gráfica anterior y
seleccionando todas las variables que tengan una correlación mayor a 0.5
o menor a -0.5.
subset_price <- subset1[, c("price", "curbweight", "enginesize", "boreratio", "horsepower",
"wheelbase", "carlength", "carwidth", "citympg", "highwaympg")]
head(subset_price)
## price curbweight enginesize boreratio horsepower wheelbase carlength carwidth
## 1 13495 2548 130 3.47 111 88.6 168.8 64.1
## 2 16500 2548 130 3.47 111 88.6 168.8 64.1
## 3 16500 2823 152 2.68 154 94.5 171.2 65.5
## 4 13950 2337 109 3.19 102 99.8 176.6 66.2
## 5 17450 2824 136 3.19 115 99.4 176.6 66.4
## 6 15250 2507 136 3.19 110 99.8 177.3 66.3
## citympg highwaympg
## 1 21 27
## 2 21 27
## 3 19 26
## 4 24 30
## 5 18 22
## 6 19 25
par(oma = c(1, 1, 1, 1), mar = c(5, 4, 4, 2) + 0.1)
corrplot.mixed(cor(subset_price),
lower = "number",
upper = "circle",
tl.pos = "n")
corrplot(cor(subset_price), add = TRUE, method = "circle",
type = "upper", tl.pos = "lt", # Etiquetas en la parte superior izquierda
tl.col = "black", number.cex = 0.7, addCoef.col = "black",
cl.pos = "n",
diag = TRUE)
La hipótesis nula (\(H_0\)) y la hipótesis alternativa (\(H_1\)) para la prueba F son:
\[ H_0: \beta_1 = \beta_2 = \beta_3 = \dots = \beta_k = 0 \]
\[ H_1: \text{Al menos uno de los coeficientes } \beta_i \text{ es diferente de cero} \]
Donde \(\beta_i\) representa los coeficientes de las variables independientes en el modelo.
Para cada variable independiente en el modelo, la hipótesis nula (\(H_0\)) y la hipótesis alternativa (\(H_1\)) son:
\[ H_0: \beta_i = 0 \]
\[ H_1: \beta_i \neq 0 \]
Estas hipótesis se prueban individualmente para cada \(\beta_i\) utilizando la prueba t-Student. Aquí, \(\beta_i\) representa el coeficiente de la variable independiente \(x_i\) en el modelo de regresión. ## Plantamiento del modelo inicial
modelo1 <- lm(price ~ curbweight + enginesize + boreratio + horsepower + wheelbase +
carlength + carwidth + citympg + highwaympg, data = subset_price)
summary(modelo1)
##
## Call:
## lm(formula = price ~ curbweight + enginesize + boreratio + horsepower +
## wheelbase + carlength + carwidth + citympg + highwaympg,
## data = subset_price)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8297 -1542 31 1307 14444
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -43223.926 13760.207 -3.141 0.001944 **
## curbweight 2.918 1.651 1.767 0.078749 .
## enginesize 83.615 13.434 6.224 2.91e-09 ***
## boreratio -1140.464 1212.508 -0.941 0.348083
## horsepower 53.754 15.447 3.480 0.000619 ***
## wheelbase 109.895 101.743 1.080 0.281418
## carlength -57.853 57.933 -0.999 0.319217
## carwidth 532.467 255.561 2.084 0.038508 *
## citympg -119.815 185.536 -0.646 0.519183
## highwaympg 122.855 170.820 0.719 0.472872
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3444 on 195 degrees of freedom
## Multiple R-squared: 0.8223, Adjusted R-squared: 0.8141
## F-statistic: 100.3 on 9 and 195 DF, p-value: < 2.2e-16
Las variables boreratio, wheelbase, carlength, citympg, y highwaympg se descartan porque sus valores p son mayores a 0.05, lo que indica que no son estadísticamente significativas para predecir el precio del automóvil. Las variables que permanecen en el modelo son las que tienen una significancia estadística alta y un impacto positivo considerable en el precio, como enginesize, horsepower, y carwidth.
subset_price2 <- subset_price[, c("price", "enginesize", "horsepower",
"carwidth")]
modelo2 <- lm(price ~ enginesize + horsepower
+ carwidth , data = subset_price2)
summary(modelo2)
##
## Call:
## lm(formula = price ~ enginesize + horsepower + carwidth, data = subset_price2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8497.8 -1920.2 -73.5 1356.2 14441.1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -60205.61 10223.64 -5.889 1.61e-08 ***
## enginesize 94.94 11.26 8.436 6.41e-15 ***
## horsepower 52.80 10.46 5.048 9.98e-07 ***
## carwidth 848.70 166.97 5.083 8.48e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3444 on 201 degrees of freedom
## Multiple R-squared: 0.8169, Adjusted R-squared: 0.8141
## F-statistic: 298.9 on 3 and 201 DF, p-value: < 2.2e-16
\[\text{Price} = −60205.61 + (94.94 \times \text{Enginesize}) + (52.80 \times \text{Horsepower}) + (848.70 \times \text{Carwidth}) )\]
Una compañía reconocida de automóviles (Great Wall Motors) de la República Popular de China aspira entrar en el mercado americano estableciendo allí sus centros de fabricación y ensamblaje de automóviles para competir localmente con sus contrapartes americanas o europeas.
Dicha compañía ha contratado un grupo de consultores denominados “Los científicos de datos” para obtener un modelo predictivo que explique el precio de los automóviles. Específicamente, quieren comprender las variables que explican (estadísticamente) el precio de los automóviles en el mercado americano, ya que pueden ser muy diferentes del mercado chino. La empresa quiere responderse lo siguiente:
Las variables enginesize, horsepower, y carwidth son significativas para predecir el precio de un automóvil. Esto se puede concluir con base en los valores p (Pr(>|t|)) obtenidos en el modelo:
- Enginesize: p-value = 6.41×10−156.41×10−15 (muy significativo, p < 0.001).
- Horsepower: p-value = 9.98×10−79.98×10−7 (muy significativo, p < 0.001).
- Carwidth: p-value = 8.48×10−78.48×10−7 (muy significativo, p < 0.001).
En cada caso, el valor p es considerablemente menor que el umbral de 0.05, lo que significa que existe una relación estadísticamente significativa entre estas variables y el precio del automóvil. Esto sugiere que un cambio en cualquiera de estas tres variables tiene un impacto real en la variación del precio.
El modelo tiene un R-cuadrado de 0.8169, lo que significa que aproximadamente el 81.69% de la variabilidad en el precio del automóvil es explicada por las variables enginesize, horsepower, y carwidth. Esto indica que el modelo es bastante bueno para predecir el precio, ya que un valor de R-cuadrado por encima de 0.80 generalmente indica un ajuste fuerte.
Siempre y cuando los valores del dataset no estén sesgados, este R-cuadrado sugiere que el modelo tiene una buena capacidad predictiva. Es importante verificar que los datos no contengan sesgos o valores atípicos que pudieran influir desproporcionadamente en los resultados, ya que un sesgo podría inflar artificialmente el R-cuadrado y afectar la validez del modelo.
data2 <- read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/UsedCars.csv")
head(data2)
## Make Model Price Year Kilometer
## 1 Honda Amaze 1.2 VX i-VTEC 505000 2017 87150
## 2 Maruti Suzuki Swift DZire VDI 450000 2014 75000
## 3 Hyundai i10 Magna 1.2 Kappa2 220000 2011 67000
## 4 Toyota Glanza G 799000 2019 37500
## 5 Toyota Innova 2.4 VX 7 STR [2016-2020] 1950000 2018 69000
## 6 Maruti Suzuki Ciaz ZXi 675000 2017 73315
## Fuel.Type Transmission Location Color Owner Seller.Type Engine
## 1 Petrol Manual Pune Grey First Corporate 1198 cc
## 2 Diesel Manual Ludhiana White Second Individual 1248 cc
## 3 Petrol Manual Lucknow Maroon First Individual 1197 cc
## 4 Petrol Manual Mangalore Red First Individual 1197 cc
## 5 Diesel Manual Mumbai Grey First Individual 2393 cc
## 6 Petrol Manual Pune Grey First Individual 1373 cc
## Max.Power Max.Torque Drivetrain Length Width Height
## 1 87 bhp @ 6000 rpm 109 Nm @ 4500 rpm FWD 3990 1680 1505
## 2 74 bhp @ 4000 rpm 190 Nm @ 2000 rpm FWD 3995 1695 1555
## 3 79 bhp @ 6000 rpm 112.7619 Nm @ 4000 rpm FWD 3585 1595 1550
## 4 82 bhp @ 6000 rpm 113 Nm @ 4200 rpm FWD 3995 1745 1510
## 5 148 bhp @ 3400 rpm 343 Nm @ 1400 rpm RWD 4735 1830 1795
## 6 91 bhp @ 6000 rpm 130 Nm @ 4000 rpm FWD 4490 1730 1485
## Seating.Capacity Fuel.Tank.Capacity
## 1 5 35
## 2 5 42
## 3 5 35
## 4 5 37
## 5 7 55
## 6 5 43
names(data2)
## [1] "Make" "Model" "Price"
## [4] "Year" "Kilometer" "Fuel.Type"
## [7] "Transmission" "Location" "Color"
## [10] "Owner" "Seller.Type" "Engine"
## [13] "Max.Power" "Max.Torque" "Drivetrain"
## [16] "Length" "Width" "Height"
## [19] "Seating.Capacity" "Fuel.Tank.Capacity"
| Nombre de la Variable | Tipo de Dato |
|---|---|
| Make | Categorical |
| Model | Categorical |
| Price | Integer |
| Year | DATE |
| Kilometer | Integer |
| Fuel.Type | Categorical |
| Transmission | Categorical |
| Location | Categorical |
| Color | Categorical |
| Owner | Categorical |
| Seller.Type | Categorical |
| Engine | Categorical |
| Max.Power | Categorical |
| Max.Torque | Categorical |
| Drivetrain | Categorical |
| Length | Integer |
| Width | Integer |
| Height | Integer |
| Seating.Capacity | Integer |
| Fuel.Tank.Capacity | Numeric |
Después de haber explorado los dos datasets, procedemos a realizar el correspondiente subsetting para seleccionar las variables necesarias. Para llevar a cabo la regresión multivariable y construir el modelo para nuestra variable dependiente, utilizaremos únicamente las variables cuantitativas.
cuantitativas2 <- c("Price", "Kilometer", "Length", "Width", "Height", "Seating.Capacity", "Fuel.Tank.Capacity")
subset2 <- data2[, cuantitativas2]
head(subset2)
## Price Kilometer Length Width Height Seating.Capacity Fuel.Tank.Capacity
## 1 505000 87150 3990 1680 1505 5 35
## 2 450000 75000 3995 1695 1555 5 42
## 3 220000 67000 3585 1595 1550 5 35
## 4 799000 37500 3995 1745 1510 5 37
## 5 1950000 69000 4735 1830 1795 7 55
## 6 675000 73315 4490 1730 1485 5 43
par(oma = c(1, 1, 1, 1), mar = c(5, 4, 4, 2) + 0.1)
corrplot.mixed(cor(subset2),
lower = "number",
upper = "circle",
tl.pos = "n")
corrplot(cor(subset2), add = TRUE, method = "circle",
type = "upper", tl.pos = "lt", # Etiquetas en la parte superior izquierda
tl.col = "black", number.cex = 0.7, addCoef.col = "black",
cl.pos = "n",
diag = TRUE)
Dado
que ya filtramos nuestras variables cualitativas, ahora falta elegir las
variables con mejor correlación con nuestra variable dependiente, que es
el precio. Esto lo podemos deducir observando la gráfica anterior y
seleccionando todas las variables que tengan una correlación mayor a 0.5
o menor a -0.5. ## Matriz de correlaciones con variables entre
corr>0.5 o corr< - 0.5
subset2_price <- subset2[, c("Price", "Length","Width","Fuel.Tank.Capacity")]
par(oma = c(1, 1, 1, 1), mar = c(5, 4, 4, 2) + 0.1)
corrplot.mixed(cor(subset2_price),
lower = "number",
upper = "circle",
tl.pos = "n")
corrplot(cor(subset2_price), add = TRUE, method = "circle",
type = "upper", tl.pos = "lt", # Etiquetas en la parte superior izquierda
tl.col = "black", number.cex = 0.7, addCoef.col = "black",
cl.pos = "n",
diag = TRUE)
modelo2 <- lm(Price ~ Length + Width + Fuel.Tank.Capacity, data = subset2_price)
summary(modelo2)
##
## Call:
## lm(formula = Price ~ Length + Width + Fuel.Tank.Capacity, data = subset2_price)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4226517 -778163 -216094 412501 31125964
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.210e+07 8.158e+05 -14.838 < 2e-16 ***
## Length 9.343e+02 1.909e+02 4.894 1.07e-06 ***
## Width 4.300e+03 6.084e+02 7.068 2.22e-12 ***
## Fuel.Tank.Capacity 4.252e+04 5.421e+03 7.844 7.30e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1903000 on 1870 degrees of freedom
## Multiple R-squared: 0.3857, Adjusted R-squared: 0.3847
## F-statistic: 391.4 on 3 and 1870 DF, p-value: < 2.2e-16
\[ \text{Price} = -1.210 \times 10^7 + (9.343 \times 10^2 \times \text{Length}) + (4.300 \times 10^3 \times \text{Width}) + (4.252 \times 10^4 \times \text{Fuel.Tank.Capacity)} \]
Se ha contratado a un informático para que haga un estudio de autos usados para una microempresa que desea iniciar en ese tipo de negocio. Lo primero que se le pide es que obtenga los datos que la mencionada empresa no dispone. Luego se le pide que analice los datos para conocer cuáles son aquellas características de los autos de las que depende el precio de los autos para según eso adquirir autos usados basados en esas características. El informático obtuvo los datos haciendo webscrpaing y los recopiló en el dataset denominado UsedCars.csv. Ahora necesita de un científico de datos que le ayude a responder lo siguiente:
En la tabla de coeficientes, se presentan los valores p (Pr(>|t|)) para cada variable. Estos valores indican la significancia estadística de cada variable en el modelo. Generalmente, se considera que una variable es significativa si su valor p es menor que un umbral comúnmente aceptado, como 0.05.
- Intercepto: Pr(>|t|)<2×10−16Pr(>|t|)<2×10−16, que es muy significativo.
- Length: Pr(>|t|)=1.07×10−6Pr(>|t|)=1.07×10−6, que es menor que 0.05 y, por lo tanto, significativo.
- Width: Pr(>|t|)=2.22×10−12Pr(>|t|)=2.22×10−12, que es menor que 0.05 y, por lo tanto, significativo.
- Fuel.Tank.Capacity: Pr(>|t|)=7.30×10−15Pr(>|t|)=7.30×10−15, que es menor que 0.05,y, por lo tanto, significativo.
Todas las variables en el modelo: Length, Width, y Fuel.Tank.Capacity—son significativas para explicar el precio del automóvil, dado que sus valores p son mucho menores que 0.05.
R-cuadrado indica la proporción de la variación en el precio que es explicada por las variables en el modelo. En este caso, el R-cuadrado de 0.3857 sugiere que aproximadamente el 38.57% de la variación en el precio del automóvil puede ser explicada por las variables Length, Width, y Fuel.Tank.Capacity.
R-cuadrado ajustado tiene en cuenta el número de variables en el modelo y es ligeramente menor que el R-cuadrado, con un valor de 0.3847. Este valor ajustado es útil para comparar modelos con diferentes números de variables.
El dataset podría estar sesgado debido a la falta de inclusión de una variable importante como el kilometraje, que podría afectar significativamente el precio de un carro de segunda mano. La matriz de correlación mostró que el kilometraje no se asoció con el precio, lo cual podría ser un indicativo de que no se ha incluido en el modelo. La omisión de variables importantes puede limitar la capacidad del modelo para explicar la variación en el precio del automóvil.