Mohamad Rizki Pratama 19090117
Disini saya menggunakan data iklim dari kabupaten tegal yang tersedia selama 3 tahun yaitu tahun 2017 , 2018 dan tahun 2019 yang menyajikan rata-rata data baik curah hujan, kecepatan angin, kelembaban udara dan unsur pendukung data iklim lainnya yang dijabarkan setiap bulannya.
Data iklim tersebut saya dapatkan dari publikasi website resmi BPS Kabupaten Tegal https://tegalkab.bps.go.id/ yang diterbitkan dalam format PDF yang kemudian saya pindahkan kedalam dokumen excel.
Data Iklim : https://drive.google.com/file/d/1BKjCrjJfcrGLykps6KAD_wW5ASekeqcP/view?usp=sharing
library(readxl)
## Warning: package 'readxl' was built under R version 4.0.3
data_iklim = read_excel("E:/data_iklim_kabtegal_2017-2019.xlsx")
head(data_iklim)
## # A tibble: 6 x 5
## suhu.udara kecepatan.angin tekanan.udara kelembaban.udara curah.hujan
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 27.3 3 1009. 85 363.
## 2 27.3 4 1010. 84 394.
## 3 27.8 3 1010 81 150.
## 4 28.3 4 1010. 79 108.
## 5 28.4 4 1010. 78 86.1
## 6 28.1 4 1011. 79 46.6
memasukan setiap variabel data yang ada didalam data iklim kedalam sebuah variabel
suhu_udara = data_iklim$suhu.udara
kecepatang_angin = data_iklim$kecepatan.angin
tekanan_udara = data_iklim$tekanan.udara
kelembaban_udara = data_iklim$kelembaban.udara
curah_hujan = data_iklim$curah.hujan
Menyusun Model Regresi Linier Berganda
model regresi linier berganda akan digunakan untuk mengecek linearitas, normalitas dan akan digunakan untuk mencari prediksi data
model_reg_curah_hujan <- lm(curah_hujan ~ suhu_udara + kecepatang_angin + tekanan_udara + kelembaban_udara , data = data_iklim)
Melakukan Uji Setiap Asumsi Regresi Linier
Uji asumsi regresi linear dilakukan untuk menguji beberapa pengujian diantaranya menguji Normalitas, multikolinieritas, heterokesdastisitas, autokorelasi dan linieritas dari sebuah model regresi.
Uji asumsi Normalitas
uji normalitas dilakukan untuk menentukan apakah model regresi berdistribusi normal atau tidak
Menampilkan Plot hasil pengujian
par(mfrow = c(2,2))
plot(model_reg_curah_hujan)
point pada grafik Normal Q-Q menunjukan point-point data berada disekitar garis putus-putus yang berarti data terdistribusi dengan normal sehingga dapat dikatakan model regresi memenuhi asumsi Normalitas.
Uji asumsi Multikolinieritas
pengujian korelasi antar variabel independent untuk melihat tidak adanya korelasi erat antar variabel independent dapat dilakukan dengan melihat nilai VIF menggunakan perintah vif() dalam package car.
library(car)
## Warning: package 'car' was built under R version 4.0.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.0.3
vif(model_reg_curah_hujan)
## suhu_udara kecepatang_angin tekanan_udara kelembaban_udara
## 1.723872 3.618943 2.024064 4.876170
Nilai VIF untuk Variabel suhu_udara berada dibawah 2 yang berarti tidak terjadi multikolinieritas dalam variabel suhu_udara, sedangkan pada variabel kecepatan_angin, tekanan_udara, dan kelembaban_udara nilai variabel VIF melebihi 2 yang berarti terjadi multikolinieritas pada 3 variabel diatas. sehingga model regresi tidak memenuhi asumsi Multikolinieritas.
Uji asumsi Heteroskedastisitas
mengukur apakah terjadi ketidaksamaan varians residual(Heteroskedastisitas) dari data-data pengukuran dengan melihat sebaran pada grafik Residual vs Fitted menggunakan perintah yang sama dengan Uji Normalitas. menampilkan grafik uji heteroskedastisitas.
par(mfrow = c(2,2))
plot(model_reg_curah_hujan)
pada grafik Residual vs Fitted menunjukan data tersebar dan tidak membuat satu pola tertentu dan tidak terjadi perbedaan varians residual dan pengujian model memenuhi uji asumsi heteroskedastisitas.
Uji asumsi Autokorelasi
melakukan uji autokorelasi untuk mengetahui apakah ada pengaruh dari data terdahulu kepada data yang baru, uji dilakukan karena data iklim berbentu time series, uji dilakukan dengan menggunakan perintah dwtest() dalam package lmtest.
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.0.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.0.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(model_reg_curah_hujan)
##
## Durbin-Watson test
##
## data: model_reg_curah_hujan
## DW = 1.1736, p-value = 0.001919
## alternative hypothesis: true autocorrelation is greater than 0
hasil uji diatas menunjukan nilai durbin-watson test p-value kurang dari 0.05 yang berarti terjadi pengaruh antar data sebelumnya dengan data terbaru dan terdapat asumsi autokorelasi yang terpenuhi antar data dalam model yang sudah dibuat.
Uji asumsi Linieritas
Menguji hubungan linier antara variabel dependent dan independent untuk memenuhi asumsi adanya hubungan linier antar variabel tersebut dengan perintah crPlots() dari package library conf.
library(conf)
## Warning: package 'conf' was built under R version 4.0.3
crPlots(model_reg_curah_hujan)
dari grafik diatas posisi dua garis dengan warna berbeda(ungu dan biru) (garis putus-putus dan garis sambung) berada pada posisi yang hampir berdempetan, artinya variabel independent memiliki linieritas dengan variabel dependent sehingga dapat dikatakan asumsi linieritas model regresi terpenuhi.
Hasil Regresi Linier Berganda
summary(model_reg_curah_hujan)
##
## Call:
## lm(formula = curah_hujan ~ suhu_udara + kecepatang_angin + tekanan_udara +
## kelembaban_udara, data = data_iklim)
##
## Residuals:
## Min 1Q Median 3Q Max
## -179.006 -58.874 -0.441 48.876 183.713
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -22605.818 19397.299 -1.165 0.253
## suhu_udara -12.434 32.914 -0.378 0.708
## kecepatang_angin -26.318 39.441 -0.667 0.510
## tekanan_udara 21.046 18.361 1.146 0.260
## kelembaban_udara 25.479 7.015 3.632 0.001 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 93.43 on 31 degrees of freedom
## Multiple R-squared: 0.6937, Adjusted R-squared: 0.6541
## F-statistic: 17.55 on 4 and 31 DF, p-value: 1.278e-07
dari hasil uji diatas didapat hasil dari model persamaan regresi linear berganda dimana nilai persamaannya yaitu curah_hujan = -22605.818 + (-12.434)suhu_udara + (-26.318)kecepatan_angin + 21.046tekanan_udara + 25.479kelembaban_udara + e
melihat dari hasil pengujian diatas dapat dinyatakan bahwa pengaruh kelembaban_udara terhadap curah_hujan adalah signifikan dengan nilai p-value pada kolom Pr(>|t|) lebih kecil dari 0.05.
Mencari Data Prediksi Curah Hujan
predict(model_reg_curah_hujan)
## 1 2 3 4 5 6 7
## 381.069598 348.214527 289.774605 210.491506 181.664820 225.605974 142.918423
## 8 9 10 11 12 13 14
## 2.919575 25.529079 44.631734 164.954874 214.827552 183.258565 404.910122
## 15 16 17 18 19 20 21
## 241.145364 211.171856 118.079924 143.238499 1.961798 -2.056622 -50.045711
## 22 23 24 25 26 27 28
## -70.516199 69.706110 104.591167 318.601291 321.343591 275.223225 222.556014
## 29 30 31 32 33 34 35
## 109.916954 55.981476 55.661400 10.156733 12.357947 -67.168163 -30.464167
## 36
## 201.286561
prediksi_data = data.frame(suhu_udara,kecepatang_angin,tekanan_udara,kelembaban_udara,curah_hujan,prediksi_curah_hujan=predict(model_reg_curah_hujan))
Mencari selisih antara data prediksi curah hujan dengan data curah hujan
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.3
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
prediksi_data = prediksi_data%>% mutate(selisih=abs(curah_hujan-predict(model_reg_curah_hujan)));
head(prediksi_data)
## suhu_udara kecepatang_angin tekanan_udara kelembaban_udara curah_hujan
## 1 27.3 3 1009.2 85 363.2
## 2 27.3 4 1010.1 84 394.3
## 3 27.8 3 1010.0 81 149.5
## 4 28.3 4 1010.2 79 108.1
## 5 28.4 4 1010.1 78 86.1
## 6 28.1 4 1010.8 79 46.6
## prediksi_curah_hujan selisih
## 1 381.0696 17.86960
## 2 348.2145 46.08547
## 3 289.7746 140.27460
## 4 210.4915 102.39151
## 5 181.6648 95.56482
## 6 225.6060 179.00597