PROJECT PENGANTAR DATA SAINS: SELEKSI MODEL REGRESI PADA MEDICAL COST PERSONAL DATASET
PENGANTAR DATA SAINS
Disusun Oleh:
Kelompok 3
| Nama Anggota | NIM |
|---|---|
| Jacky Alinson | (3338240008) |
| Riefan Abdul Hakim | (3338240020) |
| Sofi Cahya Utami | (3338240025) |
| Tadzkiah Fayrooz Ridwan | (3338240029) |
PROGRAM STUDI STATISTIKA
FAKULTAS TEKNIK
UNIVERSITAS SULTAN AGENG TIRTAYASA
CILEGON
2025
Puji syukur kehadirat Allah SWT sehingga laporan ini dapat diselesaikan dengan baik. Laporan ini disusun sebagai bentuk pemenuhan tugas dalam perkuliahan di Program Studi yang penulis tempuh.
Penulis mengucapkan terima kasih kepada Bapak Agung Satrio Wicaksono, S.Mat., M.Si. selaku dosen pengampu mata kuliah Pengantar Data Sains, serta Bapak Aulia Ikhsan, S.Si., M.Si. selaku dosen mata kuliah Analisis Regresi, atas ilmu dan bimbingan yang diberikan selama proses pembelajaran. Juga rekan-rekan kelompok yang telah bekerja sama dengan baik dalam penyusunan laporan ini.
Penulis menyadari bahwa makalah ini jauh dari kata sempurna dan masih terdapat beberapa kekurangan, oleh karena itu penulis sangat mengharapkan saran dan kritik yang membangun dari pembaca untuk penyempurnaan makalah ini.
Cilegon, 11 Desember 2025
Penulis
DAFTAR ISI
DAFTAR GAMBAR
KATA PENGANTAR
BAB 1 PENDAHULUAN
1.1 Latar Belakang
1.2 Deskripsi Dataset
1.3 Rumusan Masalah
1.4 Tujuan
1.5 Manfaat
BAB 2 TINJAUAN PUSTAKA
2.1 Regresi Linear Berganda
2.2 Asumsi-Asumsi Regresi Linear
2.2.1 Asumsi Linearitas
2.2.2 Asumsi Normalitas Galat
2.2.3 Asumsi Homoskedastisitas
2.2.4 Asumsi Tidak Ada Autokorelasi
2.2.5 Asumsi Tidak Ada Multikolinearitas
2.3 Seleksi Model (Model Selection)
2.3.1 Forward Selection
2.3.2 Backward Elimination
2.3.3 Stepwise Selection
2.4 Kriteria Pemilihan Model
2.4.1 Akaike Information Criterion (AIC)
2.4.2 Bayesian Information Criterion (BIC)
2.4.3 Adjusted R-Squared
2.5 Uji Signifikansi Model
2.5.1 Uji F (Keseluruhan Model)
2.5.2 Uji t (Signifikansi Parameter)
2.6 Diagnostik Model
2.6.1 Analisis Residual
2.6.2 Deteksi Outlier dan Titik Pengaruh
BAB 3 METODE ANALISIS DATA
3.1 Sumber Data
3.2 Variabel Penelitian
3.3 Metode Analisis
3.4 Tahapan Analisis Data
BAB 4 HASIL DAN PEMBAHASAN
4.1 Deskriptif Data
4.2 Pra-Pemrosesan Data
4.3 Eksploratif Data
4.4 Pembentukan Model Regresi
4.5 Pemilihan Model Regresi Terbaik
4.6 Uji Diagnostik
4.7 Pembahasan Akhir
BAB 5 KESIMPULAN
5.1 Kesimpulan
5.2 Saran
DAFTAR PUSTAKA
Gambar 1. Histogram Distribusi Variabel Charges
Gambar 2. Boxplot Distribusi Variabel BMI
Gambar 3. Scatter Plot Hubungan Antar Variabel (Numerik)
Gambar 4. Empat Plot Diagnostik
Biaya perawatan kesehatan merupakan salah satu komponen penting dalam sistem asuransi, karena setiap individu memiliki risiko dan kebutuhan medis yang berbeda. Untuk memahami faktor-faktor apa saja yang mempengaruhi besarnya biaya medis, diperlukan data yang mampu menggambarkan karakteristik personal peserta asuransi.
Medical Cost Personal Dataset dari Kaggle menyediakan informasi lengkap mengenai usia, jenis kelamin, indeks massa tubuh (BMI), jumlah tanggungan anak, status merokok, serta wilayah tempat tinggal peserta asuransi. Variabel-variabel tersebut digunakan untuk mempelajari bagaimana karakteristik demografis dan gaya hidup dapat memengaruhi besarnya tagihan medis (charges) yang dibayarkan oleh perusahaan asuransi.
Pemodelan statistik memiliki peran penting dalam menganalisis berbagai fenomena kuantitatif, termasuk dalam memprediksi biaya medis individu. Seleksi model merujuk pada proses memilih model terbaik dari sekumpulan model statistik kandidat berdasarkan suatu dataset.
Alasan utamanya berkaitan dengan risiko overfitting. Sebuah model mungkin bekerja sangat baik pada data yang sangat kompleks hingga mampu menyesuaikan setiap sampel secara sempurna namun gagal melakukan generalisasi ketika diterapkan pada data baru. Oleh karena itu, model yang baik bukan hanya yang mampu menyesuaikan data pelatihan dengan baik, tetapi juga yang mempertahankan kinerja kuat pada data yang belum pernah dilatih sebelumnya. Sebelum sebuah model digunakan secara nyata, kita harus memastikan bahwa kinerjanya tetap stabil ketika diberikan masukan baru.
“Model yang cukup baik” sangat bergantung pada tujuan dan kendala khusus suatu proyek, oleh karena itu kita harus menemukan model yang “cukup baik” untuk kasus-kasus tertentu.
Beberapa ukuran yang umum digunakan dalam seleksi model adalah Adjusted R-squared (\(R^2\) adj), Akaike Information Criterion (AIC), dan Bayesian Information Criterion (BIC). Adjusted \(R^2\) digunakan untuk menilai seberapa baik model menjelaskan keragaman data dengan memperhitungkan jumlah variabel, sehingga lebih tepat dalam membandingkan model yang berbeda kompleksitas. Sementara itu, AIC dan BIC memberikan penalti pada jumlah parameter model sekaligus memberikan “reward” untuk goodness of fit pada data pelatihan. Oleh karena itu, model terbaik adalah model dengan nilai AIC atau BIC paling kecil. Namun demikian, BIC memberikan penalti kompleksitas yang lebih kuat dibandingkan AIC, sehingga BIC cenderung memilih model yang lebih sederhana, bahkan jika model tersebut sedikit lebih buruk dalam hal fit.
Ketiga ukuran tersebut digunakan untuk menyeleksi model baik menggunakan Seleksi Maju (Forward Selection), Penyisihan (Backward Elimination), ataupun Seleksi Bertahap (Stepwise Selection).
Dataset yang digunakan pada proyek ini adalah Medical Cost Personal Dataset, yang dapat diakses secara luas melalui platform Kaggle. Dataset ini cocok digunakan untuk studi regresi karena memiliki struktur data yang sederhana namun tetap kaya interpretasi.
Medical Cost Personal Dataset memuat satu variabel respon yaitu charges, yang merepresentasikan biaya medis yang harus dibayar oleh pasien. Variabel respon tersebut dipengaruhi oleh beberapa variabel bebas yang menggambarkan karakteristik pasien yaitu age, gender, BMI, children, dan smoker. Dataset ini menjelaskan tentang faktor-faktor yang mempengaruhi besarnya biaya kesehatan yang dikeluarkan oleh seseorang.
Medical Cost Personal Dataset terdiri atas kombinasi variabel numerik seperti age, BMI, children, dan charges serta variabel kategorik seperti gender dan smoker. Dataset ini cocok digunakan untuk seleksi model karena jumlah variabel bebas yang tidak terlalu banyak tapi juga tidak terlalu sedikit sehingga memungkinkan untuk membandingkan kombinasi dan pemilihan model menjadi bermakna. Ukuran sampelnya pun cukup besar sehingga memungkinkan analisis statistik yang akurat dan tidak terlalu kompleks.
Alasan dipilihnya Medical Cost Personal Dataset untuk proyek kali ini karena dataset ini memiliki data yang jelas dan minim missing value, memiliki variabel bebas dengan jumlah yang cukup sehingga proses seleksi model menjadi bermakna, serta struktur data yang sederhana sehingga mudah dilakukan pengolahan data namun tetap kaya akan interpretasi.
Regresi linear berganda merupakan metode statistika yang digunakan untuk memodelkan hubungan antara satu variabel respons terhadap sejumlah variabel prediktor. Secara umum, model regresi linear berganda dinyatakan sebagai:
\[Y_i = \beta_0 + \beta_1 X_{i1} + \beta_2 X_{i2} + \dots + \beta_p X_{ip} + \varepsilon_i\]
dengan \(Y_i\) menyatakan nilai variabel respons pada observasi ke-i, \(X_{ij}\) menyatakan nilai variabel prediktor ke-j pada observasi ke-i, \(\beta_j\) merupakan koefisien regresi, serta \(\varepsilon_i\) merupakan galat yang diasumsikan berdistribusi normal \(\varepsilon_i \sim N(0, \sigma^2)\).
Koefisien regresi diestimasi menggunakan metode Ordinary Least Squares (OLS), yaitu dengan meminimalkan jumlah kuadrat residual:
\[Minimize \sum_{i=1}^{n} (Y_i - \hat{Y}_i)^2\]
Secara matriks, estimator OLS dinyatakan sebagai:
\[\beta = (X^T X)^{-1} X^T Y\]
Model regresi digunakan untuk memahami pengaruh variabel prediktor serta membuat prediksi terhadap variabel respons.
Agar inferensi statistik valid, model regresi harus memenuhi beberapa asumsi dasar berikut.
Hubungan antara variabel respons dan prediktor bersifat linear. Diperiksa melalui hubungan antara residual dan fitted values.
Residual diasumsikan berdistribusi normal: \[\varepsilon_i \sim N(0, \sigma^2)\]
Diperiksa melalui:
Variansi residual konstan: \[Var(\varepsilon_i) = \sigma^2\]
Diuji menggunakan Breusch-Pagan: \[BP = \frac{1}{2} \sum_{i=1}^{n} \hat{e}_i^2 z_i\] dengan \(z_i\) adalah fitted values dari model regresi pada \(e_i^2\).
Residual tidak saling berkorelasi. Uji Durbin–Watson dengan statistik: \[DW = \frac{\sum_{i=2}^{n} (e_i - e_{i-1})^2}{\sum_{i=1}^{n} e_i^2}\]
Prediktor tidak saling berkorelasi tinggi. Diuji menggunakan VIF (Variance Inflation Factor): \[VIF_j = \frac{1}{1 - R_j^2}\]
Dalam regresi linear, terdapat beberapa pendekatan seleksi model yang umum digunakan, yaitu Forward Selection, Backward Elimination, dan Stepwise Selection. Ketiga metode ini dapat bekerja dengan berbagai kriteria pemilihan model, salah satunya yang paling sering digunakan adalah Akaike Information Criterion (AIC).
Forward Selection merupakan pendekatan yang membangun model dari kondisi awal yang paling sederhana, yaitu model kosong: \[Y = \beta_0 + \varepsilon\]
Pada setiap langkah, satu variabel prediktor ditambahkan ke model berdasarkan kontribusinya dalam meningkatkan kualitas model, biasanya diukur melalui penurunan nilai AIC atau peningkatan adjusted \(R^2\). Variabel yang dipertimbangkan ditambahkan jika keberadaannya menghasilkan model yang lebih baik dibandingkan model sebelumnya.
Secara umum, prosedurnya adalah:
Backward Elimination bekerja dengan prinsip yang berlawanan dengan Forward Selection. Metode ini dimulai dari model lengkap: \[Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_p X_p + \varepsilon\]
Pada tiap langkah, satu variabel yang paling tidak signifikan atau memberikan kontribusi paling kecil terhadap model dikeluarkan berdasarkan kriteria tertentu, misalnya:
Prosedurnya:
Stepwise Selection merupakan kombinasi kedua metode sebelumnya variabel dapat masuk maupun keluar model dalam proses yang sama. Metode ini lebih fleksibel dan sering memberikan hasil yang lebih stabil dibanding forward atau backward saja.
Prosedurnya secara umum:
Kriteria evaluasi yang sering digunakan dalam Stepwise adalah AIC. Sebuah variabel akan tetap berada di model jika: \[AIC_{baru} < AIC_{lama}\] dan dikeluarkan jika kenaikannya signifikan.
Kelebihan Stepwise:
Beberapa metrik yang digunakan untuk mengevaluasi model dijelaskan berikut.
AIC mengukur keseimbangan antara kualitas model dan kompleksitas model. Rumus AIC: \[AIC = 2k - 2\ln(L)\] dengan: \(k\) = jumlah parameter dalam model, \(L\) = nilai likelihood maksimum.
Model terbaik adalah model dengan nilai AIC paling kecil.
BIC memberikan penalti lebih besar pada jumlah parameter dibanding AIC: \[BIC = k\ln(n) - 2\ln(L)\] dengan \(n\) jumlah observasi. BIC lebih konservatif dan cenderung memilih model yang lebih sederhana.
Berbeda dengan \(R^2\) yang selalu meningkat saat menambah prediktor, adjusted \(R^2\) melakukan penalti sehingga lebih tepat untuk model dengan banyak prediktor: \[R^2_{adj} = 1 - (1 - R^2) \frac{n - 1}{n - p - 1}\] Nilai yang lebih besar menunjukkan model lebih baik.
Prosedur untuk menilai apakah model regresi yang dibangun benar-benar memiliki hubungan yang bermakna.
Digunakan untuk menilai apakah minimal satu prediktor berpengaruh signifikan. \[F = \frac{SSR/p}{SSE/(n - p - 1)}\] dengan: SSR = regression sum of squares, SSE = error sum of squares.
Digunakan untuk menguji signifikansi masing-masing koefisien regresi: \[t = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)}\] Jika \(t\) besar maka variabel signifikan.
Setelah model terbaik diperoleh, perlu dilakukan pemeriksaan diagnostik untuk memastikan kualitas model.
Residual harus:
Diperiksa melalui:
Metode umum: Cook’s Distance \[D_i = \frac{e_i^2}{p \cdot MSE} \left[ \frac{h_{ii}}{(1 - h_{ii})^2} \right]\] dengan \(h_{ii}\) adalah nilai leverage. Nilai \(D_i > 1\) umumnya dianggap titik pengaruh.
Data yang digunakan adalah data yang tersedia di situs Kaggle, yaitu situs yang menyediakan berbagai dataset publik untuk penelitian dan analisis data. Dataset yang dipakai berupa data Medical Cost Personal Datasets oleh Miri Choi. Dataset ini terdiri dari 1.338 data observasi dan 7 variabel utama yang memuat informasi mengenai karakteristik individu dan nominal asuransi kesehatan yang harus dibayarkan.
Dataset dapat diakses melalui tautan: https://www.kaggle.com/datasets/mirichoi0218/insurance
Dataset Medical Cost Personal oleh Miri Choi memiliki banyak variabel penting seperti informasi umur, jenis kelamin, Body Mass Index (BMI), jumlah anak, status perokok, wilayah, dan biaya asuransi. Dataset ini memiliki interaksi potensial, khususnya pada interaksi umur dan berat badan. Selain itu, data ini mengandung kombinasi numerik dan kategorik dan biasanya sangat fit untuk regresi linear.
Berdasarkan data yang digunakan, terdapat 1.338 observasi dan 7 variabel yang mewakili karakteristik individu dan biaya asuransi kesehatan. Variabel-variabel dan jenis data dalam penelitian ini adalah sebagai berikut:
Berikut struktur dataset Medical Cost Personal yang berisi rincian jumlah observasi, jumlah variabel, nama variabel, tipe data masing-masing variabel yang digunakan dalam penelitian:
data <- read.csv("insurance.csv")
View(data)
str(data)
## 'data.frame': 1338 obs. of 7 variables:
## $ age : int 19 18 28 33 32 31 46 37 37 60 ...
## $ sex : chr "female" "male" "male" "male" ...
## $ bmi : num 27.9 33.8 33 22.7 28.9 ...
## $ children: int 0 1 3 0 0 0 1 3 2 0 ...
## $ smoker : chr "yes" "no" "no" "no" ...
## $ region : chr "southwest" "southeast" "southeast" "northwest" ...
## $ charges : num 16885 1726 4449 21984 3867 ...
Variabel “charges” digunakan sebagai variabel dependen (Y), sedangkan variabel lainnya, digunakan sebagai variabel independen (X). Hal ini bertujuan untuk menganalisis dan memodelkan pengaruh karakteristik individu terhadap besarnya biaya asuransi kesehatan yang harus dibayarkan.
Metode analisis data yang digunakan dalam penelitian ini adalah seleksi model regresi dengan menggunakan pengukuran AIC (Akaike Information Criterion). Pengukuran AIC digunakan untuk memilih prediktor pada model regresi dan mengukur baik kesesuaian model dan kesederhanaan model dalam satu statistik. Skor AIC yang lebih rendah maka semakin baik.
Hubungan penggunaan AIC dengan data Medical Cost Personal terletak pada banyaknya variabel bebas yang berpotensi mempengaruhi biaya asuransi kesehatan (charges). Apabila semua variabel dimasukan langsung ke dalam model, kemungkinan model akan terlalu kompeks (overfitting) sehingga kurang efisien. Oleh karena itu, AIC digunakan untuk membandingkan berbagai kombinasi model regresi yang terbentuk dari variabel-variabel tersebut.
Selain itu, metode yang digunakan dalam seleksi model ini mencakup metode forward, backward, dan stepwise selection. Dari ketiga metode ini, setiap model dibandingkan berdasarkan nilai AIC yang diperoleh. Model AIC terendah dipilih sebagai model terbaik untuk merepresentasikan hubungan antara karakteristik individu dan biaya asuransi kesehatan.
Import Data
Tahap pertama dalam analisis data pada perangkat lunak R adalah
dengan memanggil package yang diperlukan dengan menggunakan fungsi
library(). Beberapa package yang digunakan dalam analisis
meliputi: tidyverse, MASS, car dan readr.
library (tidyverse)
library (MASS)
library (car)
library (readr)
Data diimpor dari file insurance.csv yang telah diunduh dari platform
Kaggle dengan menggunakan fungsi read.csv(). Kemudian, data
yang telah diimpor, dilakukan pemeriksaan struktur menggunakan fungsi
str() dan fungsi summary() untuk menampilkan
ringkasan data.
# 1. Import data
data <- read.csv("C:/Users/HP/Downloads/insurance/insurance.csv")
View(data)
str(data)
summary(data)
Tahap pra-pemrosesan bertujuan untuk menyesuaikan tipe data dan
melakukan pemeriksaan data hilang (missing value). Melalui fungsi
mutate(), variabel smoker dan region diubah menjadi tipe
data factor dari yang sebelumnya merupakan variabel kategorik.
# 2. Pra-pemrosesan
data <- data %>%
mutate(
smoker = factor(smoker, levels = c("no","yes")),
region = factor(region)
)
colSums(is.na(data))
Pada variabel smoker, level diatur menjadi “no” dan “yes”, sedangkan variabel region dikonversi tanpa pengaturan level tertentu agar wilayah manapun dapat dibandingkan. Hasil pemeriksaan data hilang (missing values) ditunjukkan ketika setiap variabel memiliki nilai 0, maka tidak terdapat data yang hilang. Dengan demikian, data siap digunakan untuk tahap eksplorasi dan pemodelan lebih lanjut.
Tahap ini, digunakan visualisasi untuk melihat pola distribusi data, serta kemungkinan adanya outlier yang dapat mempengaruhi hasil analisis. Visualisasi yang ditampilkan berupa histogram, boxplot, dan scatter plot.
# 3. Eksplorasi awal
hist(data$charges, main = "Distribusi Charges",
xlab = "Charges", breaks = 50)
boxplot(data$bmi, main = "Boxplot BMI", ylab = "BMI")
pairs(~ charges + age + bmi + children, data = data, main = "Scatter Plot Basic Variables")
Histogram digunakan untuk melihat pola sebaran variabel Charges dari seluruh observasi. Boxplot digunakan untuk melihat ringkasan statistik terutama dari variabel BMI. Scatter plot digunakan untuk melihat hubungan antar variabel yang memiliki tipe data numerik seperti charges, age, BMI, dan children.
Tahap ini dibentuk dengan dua model regresi sebagai kandidat untuk
menjelaskan hubungan antara variabel independen dengan variabel charges.
Model ini, dibentuk dengan menggunakan fungsi lm().
# 4. Model kandidat
model1 <- lm(charges ~ age + bmi + children + smoker + region, data = data)
summary(model1)
AIC(model1)
Model pertama dibentuk tanpa adanya interaksi antara variabel bebas.
Model ini bertujuan untuk melihat pengaruh masing-masing variabel
terhadap biaya asuransi kesehatan. Fungsi summary(model1)
yaitu fungsi yang digunakan untuk melihat ringkasan data yang dihasilkan
dari model 1, meliputi koefisien regresi, nilai signifikansi variabel,
nilai R-squared dan nilai statistik lainnya. AIC(model1)
adalah fungsi untuk nilai AIC dari model 1 dalam proses seleksi model
terbaik.
model2 <- lm(charges ~ age * bmi + children + smoker + region, data = data)
summary(model2)
AIC(model2)
Model kedua dibentuk dengan adanya interaksi antara variabel age dan
BMI. Model ini bertujuan untuk menguji apakah usia berpengaruh terhadap
biaya asuransi yang bergantung pada nilai BMI, atau sebaliknya. Fungsi
summary(model2) yaitu fungsi yang digunakan untuk melihat
ringkasan statistik dari data yang dihasilkan dari model 2.
AIC(model2) adalah fungsi untuk nilai AIC dari model 2
dalam proses seleksi model terbaik.
Dalam penelitian ini digunakan tiga metode seleksi mode yaitu, forward selection, backward selection, dan stepwise selection. Masing-masing metode seleksi dilakukan dengan menggunakan pengukuran AIC (Akaike Information Criterion).
Forward Selection
# 5. Model selection AIC
null_model <- lm(charges ~ 1, data = data)
forward_model <- step(null_model,
scope = list(lower = ~1,
upper = ~ age * bmi + children + smoker + region),
direction = "forward",
trace = TRUE)
summary(forward_model)
AIC(forward_model)
Metode forward selection dimulai dari tahap pembentukkan model yang
sederhana, yaitu null model yang hanya berisi intercept model.
Selanjutnya, proses forward dilakukan dengan menambahkan satu per satu
variabel ke dalam model berdasarkan hasil penurunan nilai AIC yang
paling rendah. Proses ini berhenti ketika variabel tambahan tidak lagi
dapat menurunkan nilai AIC yang dibandingkan pada model sebelumnya.
Hasil akhir metode forward dapat ditampilkan dengan menggunakan fungsi
summary() untuk menampilkan hasil model terbaik, dan
AIC() yaitu nilai AIC dari model yang terpilih.
Backward Selection
backward_model <- step(model1, direction = "backward",
trace = TRUE)
summary(backward_model)
AIC(backward_model)
Metode backward selection dimulai dengan menggunakan model tanpa
interaksi yang berisi seluruh variabel bebas (model 1). Proses backward
awalnya dilakukan dengan memasukan seluruh variabel ke dalam model,
kemudian variabel dihapus satu per satu jika model yang diseleksi tidak
dapat menurunkan nilai AIC. Proses ini berhenti ketika variabel pada
model tidak menghasilkan nilai AIC yang lebih rendah dari model
sebelumnya. Hasil akhir metode backward dapat ditampilkan dengan
menggunakan fungsi summary() untuk menampilkan hasil model
terbaik, dan AIC() yaitu nilai AIC dari model yang
terpilih.
Stepwise Selection
stepwise_model <- step(model1, direction = "both",
trace = TRUE)
summary(stepwise_model)
AIC(stepwise_model)
Metode stepwise selection adalah penggabungan dari metode forward dan
backward selection. Tahapan pada proses stepwise yaitu dua arah, dalam
prosesnya dapat menambah ataupun menghapus variabel dari setiap
modelnya. Proses ini berawal dari model kosong pada metode forward,
kemudian model dijalankan secara forward step. Setelah didapatkan hasil
AIC terendahnya, selanjutnya model dievaluasi secara backward step.
Apabila variabel yang lama nilai AIC nya meningkat setelah variabel baru
masuk, maka variabel dieliminasi, namun jika variabel yang baru
dimasukan semakin memperkecil nilai AIC, maka proses berlanjut. Proses
ini berhenti sampai tidak ada lagi variabel yang bisa masuk dan tidak
ada lagi variabel yang perlu dihapus. Hasil akhir metode backward dapat
ditampilkan dengan menggunakan fungsi summary() untuk
menampilkan hasil model terbaik, dan AIC() yaitu nilai AIC
dari model yang terpilih.
Setelah model-model kandidat dibentuk dan diseleksi, tahap
selanjutnya dilakukan perbandingan berdasarkan nilai AIC yang diperoleh
dari ketiga metode seleksi model yang digunakan. Pada tahap ini, seluruh
model tersebut dikumpulkan ke dalam satu daftar, kemudian dilakukan
perhitungan untuk menentukan nilai AIC dari setiap model dengan
menggunakan fungsi sapply(). Model terbaik dari hasil
perbandingan tersebut adalah model dengan nilai AIC terendah, model
inilah yang digunakan untuk merepresentasikan analisis regresi lebih
lanjut.
# 6. Bandingkan model
models <- list(
"Full" = model1,
"Full + Interaction" = model2,
"Forward" = forward_model,
"Backward" = backward_model,
"Stepwise" = stepwise_model
)
aic_values <- sapply(models, AIC)
print(aic_values)
best_name <- names(which.min(aic_values))
best_model <- models[[best_name]]
cat("Model terbaik menurut AIC:", best_name, "\n")
summary(best_model)
Uji diagnostik model penting untuk memastikan model regresi linear memenuhi asumsi-asumsi dasar agar hasil analisis baik dan dapat diinterprestasikan. Uji diagnostik model berupa pemeriksaan grafis untuk memvalidasi model memiliki sebaran yang linear, normalitas residual, homoskedastisitas, dan tidak terdapat outlier.
# 7. Diagnosa model
par(mfrow = c(2,2))
plot(best_model)
Selain itu, dilakukan pemeriksaan apakah data tersebut multikolinearitas dengan menggunakan uji Variance Inflation Factor (VIF) untuk mengetahui hubungan linier antar variabel bebas. Apabila nilai VIF < 10 maka, tidak terdapat multikolinearitas yang serius, semakin nilai VIF mendekati 1, maka variabel bebas tidak saling berkorelasi.
vif_values <- vif(best_model)
print(vif_values)
par(mfrow = c(1,1))
Apabila data telah menemukan model terbaik dan memenuhi asumsi-asumsi tersebut, artinya data layak digunakan untuk analisis regresi lebih lanjut.
Data yang digunakan dalam penelitian ini terdiri dari 1.338 observasi dengan 7 variabel: age, BMI, children, smoker, region, dan charges.
library (tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'tibble' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'stringr' was built under R version 4.4.3
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.1 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library (MASS)
##
## Attaching package: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
library (car)
## Warning: package 'car' was built under R version 4.4.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.4.3
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
library (readr)
data <- read.csv("C:/Users/HP/Downloads/insurance/insurance.csv")
str(data)
## 'data.frame': 1338 obs. of 7 variables:
## $ age : int 19 18 28 33 32 31 46 37 37 60 ...
## $ sex : chr "female" "male" "male" "male" ...
## $ bmi : num 27.9 33.8 33 22.7 28.9 ...
## $ children: int 0 1 3 0 0 0 1 3 2 0 ...
## $ smoker : chr "yes" "no" "no" "no" ...
## $ region : chr "southwest" "southeast" "southeast" "northwest" ...
## $ charges : num 16885 1726 4449 21984 3867 ...
Setelah pengecekan, data tersebut berhasil terimpor utuh sebanyak 1.338 baris dan 7 kolom. Pada variabel smoker, dan region terdeteksi sebagai chr (character/teks). Variabel ini akan diubah pada tahap pra-pemrosesan data.
Berdasarkan hasil pengolahan data awal, tidak ditemukan adanya missing value (data hilang) pada dataset, sehingga seluruh 1.338 data dapat digunakan. Variabel kategorik smoker dan region akan dikonversi menjadi tipe faktor untuk keperluan analisis.
data <- data %>%
mutate(
smoker = factor(smoker, levels = c("no","yes")),
region = factor(region)
)
colSums(is.na(data))
## age sex bmi children smoker region charges
## 0 0 0 0 0 0 0
Berdasarkan output tersebut data siap dibentuk model regresi. Angka 0
pada semua kolom dalam output colSums(is.na(data))
menunjukkan bahwa data ini bersih.
Eksplorasi visual dilakukan untuk melihat pola distribusi:
hist(data$charges, main = "Distribusi Charges", xlab = "Charges", breaks = 50)
Gambar 1. Histogram Distribusi Variabel Charges
Histogram menunjukkan:
boxplot(data$bmi, main = "Boxplot BMI", ylab = "BMI")
Gambar 2. Boxplot Distribusi Variabel BMI
Boxplot menunjukkan:
pairs(~ charges + age + bmi + children, data = data, main = "Scatter Plot Basic Variables")
Gambar 3. Scatter Plot Hubungan Antar Variabel (Numerik)
Scatter Plot Menunjukan:
Membuat dengan dua model regresi sebagai kandidat untuk menjelaskan hubungan antara variabel independen dengan variabel charges.
model1 <- lm(charges ~ age + bmi + children + smoker + region, data = data)
summary(model1)
##
## Call:
## lm(formula = charges ~ age + bmi + children + smoker + region,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11367.2 -2835.4 -979.7 1361.9 29935.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11990.27 978.76 -12.250 < 2e-16 ***
## age 256.97 11.89 21.610 < 2e-16 ***
## bmi 338.66 28.56 11.858 < 2e-16 ***
## children 474.57 137.74 3.445 0.000588 ***
## smokeryes 23836.30 411.86 57.875 < 2e-16 ***
## regionnorthwest -352.18 476.12 -0.740 0.459618
## regionsoutheast -1034.36 478.54 -2.162 0.030834 *
## regionsouthwest -959.37 477.78 -2.008 0.044846 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6060 on 1330 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7496
## F-statistic: 572.7 on 7 and 1330 DF, p-value: < 2.2e-16
AIC(model1)
## [1] 27113.66
model2 <- lm(charges ~ age * bmi + children + smoker + region, data = data)
summary(model2)
##
## Call:
## lm(formula = charges ~ age * bmi + children + smoker + region,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11366.2 -2832.8 -978.1 1371.9 29935.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.177e+04 2.492e+03 -4.722 2.58e-06 ***
## age 2.511e+02 6.114e+01 4.107 4.24e-05 ***
## bmi 3.313e+02 8.020e+01 4.131 3.83e-05 ***
## children 4.744e+02 1.378e+02 3.443 0.000594 ***
## smokeryes 2.384e+04 4.121e+02 57.843 < 2e-16 ***
## regionnorthwest -3.511e+02 4.764e+02 -0.737 0.461341
## regionsoutheast -1.033e+03 4.791e+02 -2.156 0.031299 *
## regionsouthwest -9.602e+02 4.780e+02 -2.009 0.044777 *
## age:bmi 1.898e-01 1.942e+00 0.098 0.922159
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6062 on 1329 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7494
## F-statistic: 500.7 on 8 and 1329 DF, p-value: < 2.2e-16
AIC(model2)
## [1] 27115.65
null_model <- lm(charges ~ 1, data = data)
forward_model <- step(null_model,
scope = list(lower = ~1,
upper = ~ age * bmi + children + smoker + region),
direction = "forward",
trace = TRUE)
## Start: AIC=25160.18
## charges ~ 1
##
## Df Sum of Sq RSS AIC
## + smoker 1 1.2152e+11 7.4554e+10 23868
## + age 1 1.7530e+10 1.7854e+11 25037
## + bmi 1 7.7134e+09 1.8836e+11 25109
## + children 1 9.0660e+08 1.9517e+11 25156
## + region 3 1.3008e+09 1.9477e+11 25157
## <none> 1.9607e+11 25160
##
## Step: AIC=23868.38
## charges ~ smoker
##
## Df Sum of Sq RSS AIC
## + age 1 1.9928e+10 5.4626e+10 23454
## + bmi 1 7.4856e+09 6.7069e+10 23729
## + children 1 7.5272e+08 7.3802e+10 23857
## <none> 7.4554e+10 23868
## + region 3 1.0752e+08 7.4447e+10 23873
##
## Step: AIC=23454.24
## charges ~ smoker + age
##
## Df Sum of Sq RSS AIC
## + bmi 1 5112896646 4.9513e+10 23325
## + children 1 459283727 5.4167e+10 23445
## <none> 5.4626e+10 23454
## + region 3 138426748 5.4488e+10 23457
##
## Step: AIC=23324.76
## charges ~ smoker + age + bmi
##
## Df Sum of Sq RSS AIC
## + children 1 434769398 4.9078e+10 23315
## + region 3 232012208 4.9281e+10 23325
## <none> 4.9513e+10 23325
## + age:bmi 1 982073 4.9512e+10 23327
##
## Step: AIC=23314.96
## charges ~ smoker + age + bmi + children
##
## Df Sum of Sq RSS AIC
## + region 3 233200844 4.8845e+10 23315
## <none> 4.9078e+10 23315
## + age:bmi 1 504213 4.9078e+10 23317
##
## Step: AIC=23314.58
## charges ~ smoker + age + bmi + children + region
##
## Df Sum of Sq RSS AIC
## <none> 4.8845e+10 23315
## + age:bmi 1 351056 4.8845e+10 23317
summary(forward_model)
##
## Call:
## lm(formula = charges ~ smoker + age + bmi + children + region,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11367.2 -2835.4 -979.7 1361.9 29935.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11990.27 978.76 -12.250 < 2e-16 ***
## smokeryes 23836.30 411.86 57.875 < 2e-16 ***
## age 256.97 11.89 21.610 < 2e-16 ***
## bmi 338.66 28.56 11.858 < 2e-16 ***
## children 474.57 137.74 3.445 0.000588 ***
## regionnorthwest -352.18 476.12 -0.740 0.459618
## regionsoutheast -1034.36 478.54 -2.162 0.030834 *
## regionsouthwest -959.37 477.78 -2.008 0.044846 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6060 on 1330 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7496
## F-statistic: 572.7 on 7 and 1330 DF, p-value: < 2.2e-16
AIC(forward_model)
## [1] 27113.66
Proses berhenti karena penambahan variabel terakhir lain tidak
menurunkan AIC lebih jauh. Model yang terpilih adalah Model
Aditif Penuh
(charges ~ age + bmi + children + smoker + region) dengan
AIC sebesar 27113,66.
backward_model <- step(model1, direction = "backward", trace = TRUE)
## Start: AIC=23314.58
## charges ~ age + bmi + children + smoker + region
##
## Df Sum of Sq RSS AIC
## <none> 4.8845e+10 23315
## - region 3 2.3320e+08 4.9078e+10 23315
## - children 1 4.3596e+08 4.9281e+10 23325
## - bmi 1 5.1645e+09 5.4010e+10 23447
## - age 1 1.7151e+10 6.5996e+10 23715
## - smoker 1 1.2301e+11 1.7186e+11 24996
summary(backward_model)
##
## Call:
## lm(formula = charges ~ age + bmi + children + smoker + region,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11367.2 -2835.4 -979.7 1361.9 29935.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11990.27 978.76 -12.250 < 2e-16 ***
## age 256.97 11.89 21.610 < 2e-16 ***
## bmi 338.66 28.56 11.858 < 2e-16 ***
## children 474.57 137.74 3.445 0.000588 ***
## smokeryes 23836.30 411.86 57.875 < 2e-16 ***
## regionnorthwest -352.18 476.12 -0.740 0.459618
## regionsoutheast -1034.36 478.54 -2.162 0.030834 *
## regionsouthwest -959.37 477.78 -2.008 0.044846 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6060 on 1330 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7496
## F-statistic: 572.7 on 7 and 1330 DF, p-value: < 2.2e-16
AIC(backward_model)
## [1] 27113.66
Menggunakan metode backward model juga akan memilih Model
Aditif Penuh
(charges ~ age + bmi + children + smoker + region) dengan
AIC sebesar 27113,66.
stepwise_model <- step(model1, direction = "both", trace = TRUE)
## Start: AIC=23314.58
## charges ~ age + bmi + children + smoker + region
##
## Df Sum of Sq RSS AIC
## <none> 4.8845e+10 23315
## - region 3 2.3320e+08 4.9078e+10 23315
## - children 1 4.3596e+08 4.9281e+10 23325
## - bmi 1 5.1645e+09 5.4010e+10 23447
## - age 1 1.7151e+10 6.5996e+10 23715
## - smoker 1 1.2301e+11 1.7186e+11 24996
summary(stepwise_model)
##
## Call:
## lm(formula = charges ~ age + bmi + children + smoker + region,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11367.2 -2835.4 -979.7 1361.9 29935.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11990.27 978.76 -12.250 < 2e-16 ***
## age 256.97 11.89 21.610 < 2e-16 ***
## bmi 338.66 28.56 11.858 < 2e-16 ***
## children 474.57 137.74 3.445 0.000588 ***
## smokeryes 23836.30 411.86 57.875 < 2e-16 ***
## regionnorthwest -352.18 476.12 -0.740 0.459618
## regionsoutheast -1034.36 478.54 -2.162 0.030834 *
## regionsouthwest -959.37 477.78 -2.008 0.044846 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6060 on 1330 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7496
## F-statistic: 572.7 on 7 and 1330 DF, p-value: < 2.2e-16
AIC(stepwise_model)
## [1] 27113.66
Metode ini juga menghasilkan model yang sama dengan AIC terendah Model Aditif Penuh.
# Bandingkan model
models <- list(
"Full" = model1,
"Full + Interaction" = model2,
"Forward" = forward_model,
"Backward" = backward_model,
"Stepwise" = stepwise_model
)
aic_values <- sapply(models, AIC)
print(aic_values)
## Full Full + Interaction Forward Backward
## 27113.66 27115.65 27113.66 27113.66
## Stepwise
## 27113.66
best_name <- names(which.min(aic_values))
best_model <- models[[best_name]]
cat("Model terbaik menurut AIC:", best_name, "\n")
## Model terbaik menurut AIC: Full
summary(best_model)
##
## Call:
## lm(formula = charges ~ age + bmi + children + smoker + region,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11367.2 -2835.4 -979.7 1361.9 29935.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11990.27 978.76 -12.250 < 2e-16 ***
## age 256.97 11.89 21.610 < 2e-16 ***
## bmi 338.66 28.56 11.858 < 2e-16 ***
## children 474.57 137.74 3.445 0.000588 ***
## smokeryes 23836.30 411.86 57.875 < 2e-16 ***
## regionnorthwest -352.18 476.12 -0.740 0.459618
## regionsoutheast -1034.36 478.54 -2.162 0.030834 *
## regionsouthwest -959.37 477.78 -2.008 0.044846 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6060 on 1330 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7496
## F-statistic: 572.7 on 7 and 1330 DF, p-value: < 2.2e-16
Karena semua metode menghasilkan model yang sama dengan AIC terendah
(dibandingkan Model 2), Model Aditif Penuh
(charges ~ age + bmi + children + smoker + region) adalah
model yang dipilih untuk analisis lebih lanjut dengan interpretasi
sebagai berikut.
\[Y = \beta_0 + \beta_1 Age + \beta_2 Children + \beta_3 Smoker + \beta_4 BMI + \beta_5 Region + \varepsilon\]
par(mfrow = c(2,2))
plot(best_model)
Gambar 4. Empat Plot Diagnostik
Diagnosa Plot:
vif_values <- vif(best_model)
print(vif_values)
## GVIF Df GVIF^(1/(2*Df))
## age 1.016188 1 1.008061
## bmi 1.104197 1 1.050808
## children 1.003714 1 1.001855
## smoker 1.006369 1 1.003179
## region 1.098870 3 1.015838
Hasil uji VIF menunjukkan bahwa seluruh variabel bebas memiliki nilai VIF di bawah 5, bahkan mendekati 1. Hal ini mengonfirmasi bahwa tidak terdapat multikolinearitas antar variabel dalam model, sehingga koefisien regresi yang dihasilkan dapat diinterpretasikan secara valid dan andal.
Berdasarkan hasil analisis, model aditif penuh
(charges ~ age + bmi + children + smoker + region) terpilih
sebagai model terbaik karena menghasilkan AIC terendah (27.113) di
antara semua model tanpa interaksi dan memiliki \(R^2\) yang tinggi yaitu 0,7509. Ditemukan
juga bahwa faktor variabel bebas yang ada memiliki pengaruh signifikan
terhadap biaya premi asuransi kesehatan (charges). Model regresi
berganda yang dibangun berhasil membuktikan hipotesis bahwa perokok
dengan BMI tinggi (obesitas) menanggung beban biaya kesehatan
tertinggi.
Berdasarkan pengkajian dan hasil analisis pada model regresi linier berganda terhadap dataset Medical Cost Personal yang didapat pada situs Kaggle ditarik beberapa kesimpulan utama mengenai faktor-faktor yang mempengaruhi biaya premi pasien (charges):
(charges ~ age + bmi + children + smoker + region) terpilih
sebagai model yang paling baik. Model ini mampu menjelaskan
75.09% variabilitas biaya premi (\(R^2=0,7509\)), menunjukkan kinerja prediksi
yang kuat.Berdasarkan hasil analisis, beberapa saran yang dapat dijadikan evaluasi untuk pengembangan sistem manajemen asuransi maupun penelitian lebih lanjut, yaitu:
Azizah (2021) Hapsari & Rahmawati (2019) Herlambang (2020) Kusuma (2022) Nugroho (2021) Prasetyo (2020) Yuliana (2019)