Regresi Robust

Analisis regresi, baik linear maupun non linear memodelkan hubungan variabel dependen dengan independen. Akan tetapi, pada beberapa kasus terdapat outlier pada data, maka digunakan regresi robust. Regresi robust merupakan metode yang bertujuan menghasilkan model regresi yang lebih stabil dan akurat bahkan dalam kasus data yang tidak normal. Dalam kasus ini, ingin menganalisis hubungan harapan hidup dengan beberapa variabel prediktor berupa kasus kematian dewasa, tingkat pendidikan, dan kasus kematian bayi.

Dataset ini diambil dari format excel yaitu data_case_method - dataset.xlsx yang berisi informasi tentang harapan hidup, informasi kesehatan, serta informasi ekonomi dan demografi tentang 179 negara dari tahun 2000 hingga 2015. Dataset yang disesuaikan memiliki 21 variabel atau kolom yang berbeda dan 2.864 baris atau entri data. Syntax berikut menampilkan lima data pertama dari dataset.

library(readxl)
data_case_method_dataset <- read_excel("D:/SMT 6/SIM/RMarkdown/data_case_method - dataset.xlsx")
knitr::kable(head(data_case_method_dataset, 5))
No Country Region Year Infant_deaths Under_five_deaths Adult_mortality Alcohol_consumption Hepatitis_B Measles BMI Polio Diphtheria Incidents_HIV GDP_per_capita Population_mln Thinness_ten_nineteen_years Thinness_five_nine_years Schooling Economy_status_Developed Economy_status_Developing Life_expectancy
1 Turkiye Middle East 2015 11.1 13.0 105.8240 1.32 97 65 27.8 97 97 0.08 11006 78.53 4.9 4.8 7.8 0 1 76.5
2 Spain European Union 2015 2.7 3.3 57.9025 10.35 97 94 26.0 97 97 0.09 25742 46.44 0.6 0.5 9.7 1 0 82.8
3 India Asia 2007 51.5 67.9 201.0765 1.57 60 35 21.2 67 64 0.13 1076 1183.21 27.1 28.0 5.0 0 1 65.4
4 Guyana South America 2006 32.8 40.5 222.1965 5.68 93 74 25.3 92 93 0.79 4146 0.75 5.7 5.5 7.9 0 1 67.0
5 Israel Middle East 2012 3.4 4.3 57.9510 2.89 97 89 27.0 94 94 0.08 33995 7.91 1.2 1.1 12.8 1 0 81.7

Estimasi Model Regresi Berganda dengan MKT

Gunakan metode analisis regresi dengan Ordinary Least Square (OLS) atau Metode Kudrat Terkecil (MKT) untuk mengestimasi model regresi awal.

# Membangun model regresi berganda
mkt <- lm(Life_expectancy ~ Adult_mortality + Schooling + Infant_deaths , data=data_case_method_dataset)
# Menampilkan ringkasan model
summary(mkt)
## 
## Call:
## lm(formula = Life_expectancy ~ Adult_mortality + Schooling + 
##     Infant_deaths, data = data_case_method_dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.6727 -1.0174 -0.0169  1.0427  5.1513 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     80.0666353  0.1578773  507.14   <2e-16 ***
## Adult_mortality -0.0484974  0.0004093 -118.48   <2e-16 ***
## Schooling        0.2667687  0.0146391   18.22   <2e-16 ***
## Infant_deaths   -0.1291953  0.0022604  -57.16   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.516 on 2860 degrees of freedom
## Multiple R-squared:  0.974,  Adjusted R-squared:  0.974 
## F-statistic: 3.576e+04 on 3 and 2860 DF,  p-value: < 2.2e-16
residu_data=resid(mkt)

Dapat dilihat bahwa model menghasilkan R2 adjusted sebesar 97,40% yang artinya bahwa variabel kasus kematian dewasa, tingkat pendidikan, dan kasus kematian bayi berpengaruh terhadap harapan hidup sebesar 97,40% dan 2,6% dipengaruhi oleh faktor lainnya di luar model.

Uji Asumsi Klasik

Uji asumsi klasik adalah persyaratan statistik yang harus dipenuhi pada analisis regresi yang berbasis ordinary least square (OLS). Jika ada asumsi yang dilanggar, maka tidak dapat digunakan. Maka dari itu, digunakan regresi robust.

Langkah pertama untuk melakukan uji asumsi klasik adalah memanggil library yang diperlukan sebagai berikut:

#Uji asumsi klasik
library(car)
## Loading required package: carData
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric

dengan fungsi yang disediakan dalam library “lmtest” dapat digunakan untuk menguji asumsi klasik regresi seperti normalitas residual, homoskedastisitas, tidak adanya autokorelasi, dan lain-lain. Sedangkan fungsi library “car” adalah “vif()” untuk menguji multikolinearitas.

Uji Normalitas

Berikut merupakan penyajian syntax R untuk melakukan uji normalitas menggunakan uji Shapiro-Wilk pada residu regresi. Uji Shapiro-Wilk adalah salah satu metode yang umum digunakan untuk menguji apakah suatu sampel berasal dari populasi yang terdistribusi secara normal.

normality_test <- shapiro.test(residu_data)
cat("Nilai p-value dari uji normalitas:")
## Nilai p-value dari uji normalitas:
print(normality_test$p.value)
## [1] 0.0005654226

Berdasarkan nilai p-value, dapat disimpulkan bahwa terdapat bukti yang cukup kuat untuk menolak hipotesis nol bahwa residu regresi terdistribusi secara normal. Artinya, residu regresi tidak mengikuti distribusi normal.

Uji Homoskedastisitas

Uji homoskedastisitas digunakan untuk menguji asumsi bahwa varians residual dalam model regresi adalah konstan. Asumsi ini penting dalam analisis regresi karena ketidakhomoskedastisitas dapat menghasilkan bias dalam estimasi parameter dan mengganggu interpretasi hasil regresi.

Homoskedasticity_test <- bptest(mkt)
cat("Nilai p-value dari uji homoskedastisitas:")
## Nilai p-value dari uji homoskedastisitas:
print(Homoskedasticity_test$p.value)
##           BP 
## 3.044425e-08

Berdasarkan nilai p-value yang diperoleh, menunjukkan bahwa terdapat bukti yang kuat untuk menolak hipotesis nol bahwa varians residual dalam model regresi adalah konstan (homoskedastisitas). Dengan demikian, dapat disimpulkan bahwa terdapat ketidakhomoskedastisitas dalam data.

Uji Non Autokorelasi

Uji autokorelasi atau uji non-autokorelasi dalam konteks regresi adalah pengujian apakah terdapat hubungan linier antara nilai residual pada suatu observasi dengan nilai residual pada observasi sebelumnya. Jika terdapat autokorelasi, berarti terdapat pola ketergantungan antara residual-residual tersebut.

autocorr_test <- dwtest(mkt)
cat("Nilai p-value dari uji autokorelasi:")
## Nilai p-value dari uji autokorelasi:
print(autocorr_test$p.value)
## [1] 0.5903459

Berdasarkan nilai dapat disimpulkan tidak terdapat cukup bukti statistik untuk menolak hipotesis nol bahwa tidak ada autokorelasi dalam residu model. Artinya, tidak ada indikasi kuat adanya autokorelasi dalam data.

Uji Multikolinearitas

Untuk melakukan uji multikolinearitas, dapat digunakan metode Variance Inflation Factor (VIF). VIF mengukur sejauh mana variabel independen terkait erat dengan variabel lain dalam model regresi. Semakin tinggi nilai VIF, semakin tinggi tingkat multikolinearitas. Nilai VIF >10 menunjukkan adanya multikolinearitas yang signifikan.

multicol_test <- vif(mkt)
print(multicol_test)
## Adult_mortality       Schooling   Infant_deaths 
##        2.754629        2.683741        4.823978

Berdasarkan output, dapat disimpulkan bahwa tidak ada indikasi kuat mengenai masalah multikolinearitas pada model tersebut.

Deteksi Pencilan

Pendeteksian pencilan dilakukan dengan menggunakan nilai difference in fitted value (DFFITS). Suatu data dikatakan sebagai pencilan jika nilai DFFITS> nilai pembandingnya.

dffits_values <- dffits(mkt)
nilai_pembanding <- 2 * (sqrt(3/2864))
cat("\nNilai Pembanding DFFITS:", nilai_pembanding)
## 
## Nilai Pembanding DFFITS: 0.06472978
jumlah_outlier <- sum(abs(dffits_values) > nilai_pembanding)
cat("\n\nJumlah Data Outlier:", jumlah_outlier)
## 
## 
## Jumlah Data Outlier: 242

Hasil identifikasi menunjukkan bahwa sebanyak 242 data dari 2864 merupakan data outlier.

ESTIMASI M PEMBOBOT HUBER

Adanya beberapa uji asumsi klasik yang dilanggar dan adanya pencilan pada data menyebabkan taksiran model regresi belum dapat dikatakan baik. Sehingga perlu dilakukan alternatif lain untuk mengestimasi parameter. Parameter yang lebih tahan terdapat pencilan salah satunya dengan metode regresi robust estimasi M dengan fungsi pembobot Huber. Proses ini menggunakan cara iteratif.

Proses iteratif dimulai dengan menentukan estimasi awal koefisien regresi yang diperoleh dengan metode kuadrat terkecil yang kemudian dihitung nilai residual dan nilai sig serta pembobot w. Nilai residual dari model iterasi 1 digunakan untuk iterasi ke-2. Itetrasi akan terus berlanjut hingga diperoleh nilai beta hat yang konvergen atau sama dengan hasil iterasi sebelumnya.

# Inisialisasi matriks untuk menyimpan hasil koefisien
koefisien <- matrix(NA, nrow = 10, ncol = 4)

# Menghitung residu awal
residu <- resid(mkt)

# Pengulangan loop untuk estimasi M-pembobot Huber
for (i in 1:10) {
  # Menghitung sig
  sig <- median(abs(residu - median(residu))) / 0.6745
  
  # Menghitung nilai ui
  u <- residu / sig
  
  # Menghitung pembobot
  pembobot <- ifelse(abs(u) > 1.345, 1.345 / abs(u), 1)
  
  # Membangun model regresi dengan pembobot
  model <- lm(Life_expectancy ~ Adult_mortality + Schooling + Infant_deaths, data = data_case_method_dataset, weights = pembobot)
  
  # Menyimpan hasil koefisien
  koefisien[i, ] <- coef(model)
  
  # Menghitung residu
  residu <- model$residuals
}

# Menampilkan tabel hasil koefisien
library(knitr)
knitr::kable(koefisien, caption = "Hasil Koefisien Iterasi")
Hasil Koefisien Iterasi
80.18527 -0.0489696 0.2640274 -0.1289269
80.21434 -0.0490814 0.2630640 -0.1289062
80.22179 -0.0491085 0.2627726 -0.1289128
80.22385 -0.0491157 0.2626846 -0.1289167
80.22442 -0.0491176 0.2626589 -0.1289183
80.22453 -0.0491178 0.2626530 -0.1289192
80.22456 -0.0491179 0.2626516 -0.1289195
80.22456 -0.0491179 0.2626512 -0.1289196
80.22456 -0.0491179 0.2626511 -0.1289197
80.22456 -0.0491179 0.2626511 -0.1289197
# Membangun model regresi dengan pembobot dari iterasi terakhir
model_terakhir <- lm(Life_expectancy ~ Adult_mortality + Schooling + Infant_deaths, data = data_case_method_dataset, weights = pembobot)

# Menampilkan summary model terakhir
summary(model_terakhir)
## 
## Call:
## lm(formula = Life_expectancy ~ Adult_mortality + Schooling + 
##     Infant_deaths, data = data_case_method_dataset, weights = pembobot)
## 
## Weighted Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.1075 -1.0327 -0.0274  1.0290  3.2505 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     80.224564   0.147500  543.90   <2e-16 ***
## Adult_mortality -0.049118   0.000386 -127.25   <2e-16 ***
## Schooling        0.262651   0.013630   19.27   <2e-16 ***
## Infant_deaths   -0.128920   0.002130  -60.52   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.378 on 2860 degrees of freedom
## Multiple R-squared:  0.977,  Adjusted R-squared:  0.9769 
## F-statistic: 4.042e+04 on 3 and 2860 DF,  p-value: < 2.2e-16

Dapat dilihat bahwa model menghasilkan R2 adjusted sebesar 97,69% yang artinya bahwa variabel kasus kematian dewasa, tingkat pendidikan, dan kasus kematian bayi berpengaruh terhadap harapan hidup sebesar 97,69% dan 2,31% dipengaruhi oleh faktor lainnya di luar model.

Ternyata hasil perhitungan beta hat tiap iterasi berhenti pada iterasi ke-10. Jadi dengan menggunakan estimasi-M memakai fungsi pembobot Huber diperoleh taksiran model regresi sebagai berikut

\[ \hat{Y} = 80.22456 - 0.0491179 X_1 + 0.2626511 X_2 - 0.1289197 X_3 \]

Interpretasi dari model regresi robust dengan estimasi M yaitu kasus kematian dewasa, tingkat pendidikan, dan kasus kematian bayi memiliki pengaruh terhadap harapan hidup.Setiap kenaikan satu unit kasus kematian dewasa (𝑋1) maka akan menurunkan angka harapan hidup sebesar -0.0491179 unit. Setiap kenaikan satu unit tingkat pendidikan (𝑋2) maka akan meningkatkan angka harapan hidup sebesar 0.2626511 unit. Serta, setiap kenaikan satu unit kasus kematian bayi (𝑋3) maka akan menurunkan angka harapan hidup sebesar -0.1289197 unit.