Prediksi harga beli mobil saat ini
knitr::include_graphics("Beli-mobil.jpg")
menggunakan linear regression analysis, akan dibuat suatu model untuk memprediksi faktor-faktor yang menjadikan harga beli mobil
car <- read.csv("data_car.csv")
glimpse(car)
## Rows: 301
## Columns: 9
## $ Car_Name <chr> "ritz", "sx4", "ciaz", "wagon r", "swift", "vitara brezz~
## $ Year <int> 2014, 2013, 2017, 2011, 2014, 2018, 2015, 2015, 2016, 20~
## $ Selling_Price <dbl> 3.35, 4.75, 7.25, 2.85, 4.60, 9.25, 6.75, 6.50, 8.75, 7.~
## $ Present_Price <dbl> 5.59, 9.54, 9.85, 4.15, 6.87, 9.83, 8.12, 8.61, 8.89, 8.~
## $ Kms_Driven <int> 27000, 43000, 6900, 5200, 42450, 2071, 18796, 33429, 202~
## $ Fuel_Type <chr> "Petrol", "Diesel", "Petrol", "Petrol", "Diesel", "Diese~
## $ Seller_Type <chr> "Dealer", "Dealer", "Dealer", "Dealer", "Dealer", "Deale~
## $ Transmission <chr> "Manual", "Manual", "Manual", "Manual", "Manual", "Manua~
## $ Owner <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
Keterangan di setiap kolom:
Car_Name: Nama/model dari mobilYear: Tahun produksi/pembuatanSelling_Price: Harga jual mobilPresent_Price: Harga beli mobil saat iniKms_Driven: Jumlah kilometer yang sudah ditempuhFuel_Type: Jenis bahan bakarSeller_Type: Jenis penjualTransmission: Jenis transmisi mobilOwner: Status sebagai pemilik (1 = yes, 0 = no)df_car <- car %>%
mutate_if(is.character, as.factor)
cek jumlah missing value (NA) dari tiap kolom
colSums(is.na(df_car))
## Car_Name Year Selling_Price Present_Price Kms_Driven
## 0 0 0 0 0
## Fuel_Type Seller_Type Transmission Owner
## 0 0 0 0
ggcorr(df_car, label = T)
## Warning in ggcorr(df_car, label = T): data in column(s) 'Car_Name', 'Fuel_Type',
## 'Seller_Type', 'Transmission' are not numeric and were ignored
Pada grafik korelasi, terlihat bahwa semua variabel memiliki pengaruh positif dan negative terhadap Present_Price dimana faktor Selling_Price memiliki korelasi positif yang paling tinggi dibandingkan faktor-faktor lain.
boxplot(df_car$Present_Price)
plot(df_car$Year, df_car$Present_Price)
df_car %>%
group_by(Car_Name) %>%
summarise(Present_Price= mean(Present_Price),
freq = n()) %>%
arrange(desc(Present_Price))
untuk harga termahal jenis mobil land cruiser dan mobil paling banyak yang beli jenis city
Selanjutnya dapat dibuat model regresi linear dengan menggunakan model penuh, terhadap variabel target present price dan mem filter nama dari mobil
model_car <- lm(formula = Present_Price ~ ., data = df_car %>% select(-Car_Name))
summary(model_car)
##
## Call:
## lm(formula = Present_Price ~ ., data = df_car %>% select(-Car_Name))
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.990 -1.473 0.124 1.107 32.908
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.403e+03 1.716e+02 8.176 9.07e-15 ***
## Year -6.969e-01 8.521e-02 -8.179 8.89e-15 ***
## Selling_Price 1.645e+00 6.015e-02 27.355 < 2e-16 ***
## Kms_Driven 1.335e-05 6.267e-06 2.130 0.034 *
## Fuel_TypeDiesel -1.772e+00 2.493e+00 -0.711 0.478
## Fuel_TypePetrol -5.780e-01 2.443e+00 -0.237 0.813
## Seller_TypeIndividual -1.417e-01 5.136e-01 -0.276 0.783
## TransmissionManual 3.416e-01 6.567e-01 0.520 0.603
## Owner 1.551e+00 8.185e-01 1.895 0.059 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.425 on 292 degrees of freedom
## Multiple R-squared: 0.8472, Adjusted R-squared: 0.843
## F-statistic: 202.4 on 8 and 292 DF, p-value: < 2.2e-16
plot(df_car$Selling_Price, df_car$Present_Price)
abline(df_car)
interprestasi lm model_car :
prediksi data baru
test_car <- read.csv("car_test.csv")
test_car
pred_test <- predict(model_car, newdata = test_car)
head(pred_test)
## 1 2 3 4 5 6
## 10.063413 5.456176 7.925281 7.639385 10.282011 35.613828
Cek Error Model
mean Absolute Error
MAE(pred_test, test_car$Present_Price)
## [1] 2.591223
Mean Absolute precentage Error
MAPE(pred_test, test_car$Present_Price)
## [1] 1.130904
Root Mean Square Error
RMSE(pred_test, test_car$Present_Price)
## [1] 5.003974
syarat terpenuhin semua variabel VIF < 10, VIF = variance influance factor , ingin cek apakah ada prediktor yang berhubungan dengan prediktor lain.
vif(model_car)
## GVIF Df GVIF^(1/(2*Df))
## Year 1.552555 1 1.246016
## Selling_Price 2.390371 1 1.546083
## Kms_Driven 1.518826 1 1.232407
## Fuel_Type 1.551123 2 1.115993
## Seller_Type 1.544114 1 1.242624
## Transmission 1.275007 1 1.129162
## Owner 1.052988 1 1.026152
plot(density(model_car$residuals))
shapiro.test(model_car$residuals)
##
## Shapiro-Wilk normality test
##
## data: model_car$residuals
## W = 0.76888, p-value < 2.2e-16
karena p-value < 0.05, maka residual/error tidak berdistribusi normal
qqPlot(model_car$residuals)
## [1] 87 65
bptest(model_car)
##
## studentized Breusch-Pagan test
##
## data: model_car
## BP = 108.6, df = 8, p-value < 2.2e-16
syarat terpenuhi : p-value > 0.05
Dari plot juga terbentuk pola sehingga syarat tidak terpenuhi
plot(model_car$fitted.values, model_car$residuals)
abline(h = 0, col = "red")
Dari plot juga terbentuk pola sihingga syarat tidak terpenuhi
data.frame(prediksi = model_car$fitted.values, error = model_car$residuals) %>%
ggplot(aes(prediksi,error))+
geom_hline(yintercept = 0)+ #garis lurus di sumbu y = 0
geom_point()+
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
pada uji Multikolinearitas, tidak ada nilai sama dengan atau lebih dari 10 sehingga tidak Multikolinearitas antar variabel Berdasarkan model ini, harga beli mobil berkorelasi besar pada harga pembelian mobil dan tahun pembuatan mobil tersebut