Modul ini disusun untuk memberikan pemahaman aplikatif mengenai permodelan statistika untuk data kategorik dan data cacah (count data).
Pembahasan mencakup empat model utama:
Seluruh contoh kasus menggunakan data asli dari repositori publik (Kaggle dan UCI Machine Learning) yang diakses secara online. Pemodelan diestimasi menggunakan pustaka (library) standar R dengan struktur syntax dan pembentukan fungsi yang konsisten dengan materi acuan kuliah.
Regresi Logistik Biner digunakan apabila variabel respon (\(Y\)) bersifat kategorik dikotomi (hanya memiliki dua kategori yang direpresentasikan dengan angka 0 dan 1).
Model ini menghubungkan satu atau lebih variabel prediktor (\(X\)) dengan fungsi logit atau nilai logaritma dari odds peluang terjadinya peristiwa sukses (\(Y = 1\)).
\[ \ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + \dots + \beta_kX_k \]
Kasus yang diangkat adalah analisis keputusan pengunjung situs web dalam mengeklik iklan (Ad Click Prediction).
Variabel Respon (\(Y\)):
Variabel Prediktor (\(X\)):
data_biner <- read.csv("advertising.csv")
colnames(data_biner)[c(1,2,3,4,10)] <- c(
"Daily_Time",
"Age",
"Area_Income",
"Internet_Usage",
"Clicked"
)
cat(
"Dimensi data asli:",
dim(data_biner)[1],
"baris dan",
dim(data_biner)[2],
"kolom.\n"
)Dimensi data asli: 1000 baris dan 10 kolom.
Daily_Time Age Area_Income Internet_Usage Clicked
1 68.95 35 61833.90 256.09 0
2 80.23 31 68441.85 193.77 0
3 69.47 26 59785.94 236.50 0
4 74.15 29 54806.18 245.89 0
5 68.37 35 73889.99 225.58 0
6 59.99 23 59761.56 226.74 0
Estimasi parameter model regresi logistik biner dilakukan menggunakan
fungsi glm() dengan spesifikasi:
model_biner <- glm(
Clicked ~ Daily_Time + Age + Internet_Usage,
data = data_biner,
family = binomial(link = "logit")
)
summary(model_biner)
Call:
glm(formula = Clicked ~ Daily_Time + Age + Internet_Usage, family = binomial(link = "logit"),
data = data_biner)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 17.009637 1.601317 10.622 < 2e-16 ***
Daily_Time -0.154902 0.015457 -10.022 < 2e-16 ***
Age 0.119124 0.020018 5.951 2.67e-09 ***
Internet_Usage -0.057947 0.005289 -10.955 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1386.29 on 999 degrees of freedom
Residual deviance: 268.38 on 996 degrees of freedom
AIC: 276.38
Number of Fisher Scoring iterations: 7
(Intercept) Daily_Time Age Internet_Usage
2.438887e+07 8.564995e-01 1.126510e+00 9.436998e-01
Daily_Time (\(\beta_1 = -0.1549\), \(p\)-value \(< 2 \times 10^{-16}\) (Sangat signifikan pada \(\alpha = 5\%\), ditandai dengan ***)) memiliki koefisien negatif dan signifikan secara statistik.
Odds Ratio (OR): \(0.8565\)
Interpretasi: Variabel waktu berselancar harian memiliki koefisien negatif dan berpengaruh secara signifikan terhadap keputusan mengeklik iklan. Nilai Odds Ratio sebesar 0.8565 menunjukkan bahwa untuk setiap penambahan \(1\) menit waktu yang dihabiskan pengguna di situs web, odds (kecenderungan) mereka untuk mengeklik iklan akan menurun menjadi \(0.8565\) kali semula. Dengan kata lain, kecenderungan mengeklik iklan mengalami penurunan sebesar 14.35% (\(1 - 0.8565 = 0.1435\)), dengan asumsi variabel prediktor lainnya konstan. Pengguna yang menghabiskan waktu lebih lama di dalam situs web cenderung lebih fokus pada konten utama sehingga mengabaikan keberadaan iklan banner.
Internet_Usage (\(\beta_3 = -0.0579\), \(p\)-value \(< 2 \times 10^{-16}\) (Sangat signifikan pada \(\alpha = 5\%\), ditandai dengan ***)) berpengaruh negatif signifikan.
Odds Ratio (OR): \(0.9437\)
Interpretasi: Rata-rata penggunaan internet harian berpengaruh negatif dan signifikan terhadap keputusan mengeklik iklan. Nilai Odds Ratio sebesar 0.9437 menandakan bahwa untuk setiap kenaikan penggunaan kuota internet harian sebesar \(1\) MB, odds pengguna untuk mengeklik iklan akan turun menjadi \(0.9437\) kali dari semula. Ini berarti terdapat penurunan kecenderungan sebesar 5.63% (\(1 - 0.9437 = 0.0563\)) untuk setiap tambahan kuota internet harian yang digunakan, asumsi variabel lain konstan.
Age (\(\beta_2 = 0.1191\), \(p\)-value \(= 2.67 \times 10^{-9}\) (Sangat signifikan pada \(\alpha = 5\%\), ditandai dengan ***)) berpengaruh positif signifikan.
Odds Ratio (OR): \(1.1265\)
Interpretasi: Variabel usia pengguna memiliki koefisien positif dan berpengaruh secara signifikan terhadap keputusan mengeklik iklan. Nilai Odds Ratio sebesar 1.1265 mengindikasikan bahwa untuk setiap pertambahan usia pengguna sebanyak \(1\) tahun, odds (kecenderungan) mereka untuk mengeklik iklan akan meningkat menjadi \(1.1265\) kali lipat semula. Dengan kata lain, terdapat peningkatan kecenderungan sebesar 12.65% (\(1.1265 - 1 = 0.1265\)) untuk setiap tahun pertambahan usia pengguna, dengan asumsi variabel prediktor lainnya bernilai konstan. Demografi pengguna yang lebih senior memiliki peluang lebih tinggi untuk merespons iklan yang ditampilkan.
Regresi Logistik Multinomial digunakan apabila variabel respon (\(Y\)) berupa data kategorik nominal yang memiliki lebih dari dua kelompok (\(M > 2\)) tanpa struktur urutan tertentu.
Model ini mengestimasi pengaruh variabel prediktor terhadap logaritma perbandingan peluang (log-odds) setiap kategori non-referensi terhadap satu kategori yang ditetapkan sebagai acuan (baseline category).
\[ \ln\left(\frac{P(Y=j)}{P(Y=\text{ref})}\right) = \beta_{0j} + \beta_{1j}X_1 + \beta_{2j}X_2 + \dots + \beta_{kj}X_k, \quad j \neq \text{ref} \]
Studi kasus menggunakan dataset morfologi tanaman bunga Iris untuk mengklasifikasikan spesies berdasarkan ukuran geometrisnya.
Variabel Respon (\(Y\)):
Variabel Prediktor (\(X\)):
data_multinomial <- read.csv("Iris.csv")
names(data_multinomial) <- c("Id","sepal_length","sepal_width","petal_length","petal_width","species")
data_multinomial$species <- gsub("Iris-","",data_multinomial$species)
table(data_multinomial$species)
setosa versicolor virginica
50 50 50
Sesuai materi acuan, model multinomial diestimasi menggunakan fungsi
multinom() dari package nnet.
data_multinomial$species <- factor(data_multinomial$species)
data_multinomial$species <- relevel(
data_multinomial$species,
ref = "setosa"
)
model_multinomial <- multinom(
species ~ sepal_length + petal_width,
data = data_multinomial,
trace = FALSE
)
summary(model_multinomial)Call:
multinom(formula = species ~ sepal_length + petal_width, data = data_multinomial,
trace = FALSE)
Coefficients:
(Intercept) sepal_length petal_width
versicolor -3.458488 -4.038920 32.58986
virginica -26.355440 -3.728656 45.43391
Std. Errors:
(Intercept) sepal_length petal_width
versicolor 143.3928 37.43875 81.88600
virginica 143.5549 37.44811 81.93643
Residual Deviance: 33.34966
AIC: 45.34966
(Intercept) sepal_length petal_width
versicolor 3.147733e-02 0.0176165 1.424278e+14
virginica 3.580782e-12 0.0240251 5.391342e+19
Kategori referensi (baseline category) yang digunakan dalam pemodelan ini adalah spesies setosa. Seluruh interpretasi log-odds dan Odds Ratio di bawah ini akan dibandingkan secara relatif terhadap spesies setosa.
Persamaan ini membandingkan peluang bunga Iris terklasifikasi sebagai spesies versicolor relatif terhadap spesies setosa.
sepal_length (\(\beta = -4.0389\), Odds Ratio \(= 0.0176\)):
Variabel panjang kelopak luar memiliki koefisien negatif. Nilai Odds Ratio sebesar 0.0176 menunjukkan bahwa untuk setiap penambahan \(1\) cm panjang kelopak luar (sepal_length), odds (kecenderungan) bunga tersebut terklasifikasi sebagai spesies versicolor dibanding setosa akan menurun menjadi \(0.0176\) kali lipat semula. Dengan kata lain, kecenderungan masuk ke kategori versicolor mengalami penurunan sebesar 98.24% (\(1 - 0.0176 = 0.9824\)), dengan asumsi variabel petal_width konstan.
petal_width (\(\beta = 32.5899\), Odds Ratio \(= 1.4243 \times 10^{14}\)):
Variabel lebar kelopak dalam memiliki koefisien positif yang sangat besar. Nilai Odds Ratio yang bernilai luar biasa besar ini mengindikasikan bahwa setiap kenaikan lebar kelopak dalam (petal_width) sebesar \(1\) cm akan meningkatkan odds (kecenderungan) bunga untuk diklasifikasikan sebagai versicolor dibandingkan setosa secara eksponensial. Hal ini menunjukkan secara statistik bahwa petal_width merupakan variabel prediktor pembeda yang sangat kuat untuk memisahkan spesies versicolor dari setosa.
Persamaan ini membandingkan peluang bunga Iris terklasifikasi sebagai spesies virginica relatif terhadap spesies setosa.
sepal_length (\(\beta = -3.7287\), Odds Ratio \(= 0.0240\)):
Variabel panjang kelopak luar memiliki koefisien negatif. Nilai Odds Ratio sebesar 0.0240 menunjukkan bahwa untuk setiap peningkatan panjang kelopak luar (sepal_length) sebesar \(1\) cm, odds bunga tersebut masuk ke kelompok virginica dibandingkan setosa akan menurun menjadi \(0.0240\) kali semula. Artinya, terdapat penurunan kecenderungan sebesar 97.60% (\(1 - 0.0240 = 0.9760\)) untuk setiap pertambahan \(1\) cm panjang kelopak luar, dengan asumsi variabel petal_width bernilai konstan.
petal_width (\(\beta = 45.4339\), Odds Ratio \(= 5.3913 \times 10^{19}\)):
Sama halnya dengan persamaan sebelumnya, variabel lebar kelopak dalam memiliki koefisien positif yang sangat dominan. Nilai Odds Ratio sebesar 5.3913e+19 menandakan bahwa setiap peningkatan lebar kelopak dalam (petal_width) sebesar \(1\) cm akan melipatgandakan odds bunga masuk ke kelompok virginica dibandingkan setosa secara masif. Karakteristik kelopak dalam (petal) yang lebar merupakan penciri utama yang memisahkan spesies virginica dari spesies setosa.
Regresi Logistik Ordinal digunakan ketika variabel respon memiliki urutan atau tingkatan alami.
Pendekatan yang paling umum digunakan adalah Proportional Odds Model (Cumulative Logit Model).
\[ \ln \left( \frac{P(Y \le j)} {P(Y > j)} \right) = \alpha_j - ( \beta_1X_1 + \beta_2X_2 + \dots + \beta_kX_k ) \]
Kasus ini mengklasifikasikan kondisi kesehatan janin berdasarkan hasil pemeriksaan kardiotokografi (CTG).
Variabel Respon (\(Y\)):
Variabel Prediktor (\(X\)):
data_ordinal <- read.csv("fetal_health.csv")
names(data_ordinal) <- gsub(" ", "_", names(data_ordinal))
data_ordinal$fetal_health <- factor(
data_ordinal$fetal_health,
levels = c(1, 2, 3),
ordered = TRUE
)
table(data_ordinal$fetal_health)
1 2 3
1655 295 176
Model ordinal diestimasi menggunakan fungsi polr() dari
package MASS.
model_ordinal <- polr(
fetal_health ~ baseline.value + accelerations,
data = data_ordinal,
Hess = TRUE
)
summary(model_ordinal)Call:
polr(formula = fetal_health ~ baseline.value + accelerations,
data = data_ordinal, Hess = TRUE)
Coefficients:
Value Std. Error t value
baseline.value 0.03982 0.0059475 6.696e+00
accelerations -749.00400 0.0008497 -8.815e+05
Intercepts:
Value Std. Error t value
1|2 5.6803 0.8139 6.9791
2|3 7.0565 0.8235 8.5687
Residual Deviance: 2252.965
AIC: 2260.965
baseline.value accelerations
1.040627 0.000000
Nilai Koefisien (\(\beta_2\)): \(-749.00400\)
Signifikansi: Nilai t-value sebesar -8.815e+05 (jauh lebih kecil dari \(-1.96\)) menunjukkan pengaruh yang sangat signifikan secara statistik.
Odds Ratio (OR): \(0.000000\) (Mendekati \(0\))
Interpretasi: Variabel jumlah akselerasi detak jantung janin memiliki koefisien negatif yang sangat kuat. Nilai Odds Ratio sebesar 0.000000 mengindikasikan bahwa untuk setiap penambahan unit akselerasi detak jantung janin, odds (kecenderungan) janin tersebut untuk bergeser ke tingkat risiko kesehatan yang lebih parah (Suspect atau Pathological) menurun hingga mendekati \(0\). Secara klinis, temuan ini sangat logis karena akselerasi jantung janin yang aktif dan responsif merupakan indikator klinis utama bahwa kondisi bayi di dalam kandungan berada dalam keadaan sehat (Normal), sehingga menurunkan peluang janin masuk ke kategori sakit.
Nilai Koefisien (\(\beta_1\)): \(0.03982\)
Signifikansi: Nilai t-value sebesar 6.696 (\(> 1.96\)) menunjukkan bahwa variabel ini berpengaruh secara signifikan pada taraf nyata \(5\%\).
Odds Ratio (OR): \(1.040627\)
Interpretasi: Variabel denyut jantung dasar janin memiliki koefisien positif dan berpengaruh signifikan. Nilai Odds Ratio sebesar 1.040627 menunjukkan bahwa untuk setiap kenaikan denyut jantung dasar janin sebesar \(1\) bpm, odds (kecenderungan) janin tersebut untuk mengalami kondisi kesehatan yang lebih buruk (bergeser dari kategori Normal ke Suspect, atau dari Suspect ke Pathological) meningkat sebesar \(1.040627\) kali lipat semula. Dengan kata lain, terdapat peningkatan risiko kondisi janin memburuk sebesar 4.06% (\(1.040627 - 1 = 0.0406\)) untuk setiap kenaikan 1 bpm denyut jantung dasar janin, dengan asumsi variabel accelerations konstan.
Model ini menghasilkan dua nilai batas ambang (cutpoint) kumulatif antar kategori respon:
Batas Normal | Suspect (1|2): Nilai estimasi ambang batas bawah sebesar 5.6803. Titik ini merupakan nilai log-odds kumulatif untuk memisahkan janin dengan status kesehatan Normal (1) terhadap kelompok Suspect & Pathological (2 & 3).
Batas Suspect | Pathological (2|3): Nilai estimasi ambang batas atas sebesar 7.0565. Titik ini merupakan nilai log-odds kumulatif untuk memisahkan janin dengan status kesehatan Normal & Suspect (1 & 2) terhadap kelompok janin dengan status parah/Pathological (3).
Regresi Poisson digunakan apabila variabel respon berupa data cacah (count data), yaitu bilangan bulat non-negatif.
Model menggunakan fungsi tautan logaritma (log link).
\[ \ln(\mu) = \beta_0 + \beta_1X_1 + \beta_2X_2 + \dots + \beta_kX_k \]
Model ini mengasumsikan kondisi equidispersion:
\[ \text{Mean} = \text{Variance} \]
Kasus ini mengukur frekuensi klaim asuransi kendaraan di Swedia.
Variabel Respon (\(Y\)):
Variabel Prediktor (\(X\)):
data_poisson <- read.csv("Car_Insurance_Claim.csv")
data_poisson$OUTCOME <- as.numeric(data_poisson$OUTCOME)
head(
data_poisson[, c(
"AGE",
"CREDIT_SCORE",
"OUTCOME"
)]
) AGE CREDIT_SCORE OUTCOME
1 65+ 0.6290273 0
2 16-25 0.3577571 1
3 16-25 0.4931458 0
4 16-25 0.2060129 0
5 26-39 0.3883659 1
6 40-64 0.6191274 0
Model Poisson diestimasi menggunakan fungsi glm() dengan
keluarga distribusi Poisson.
model_poisson <- glm(
OUTCOME ~ AGE + CREDIT_SCORE,
data = data_poisson,
family = poisson(link = "log")
)
summary(model_poisson)
Call:
glm(formula = OUTCOME ~ AGE + CREDIT_SCORE, family = poisson(link = "log"),
data = data_poisson)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.17110 0.06619 2.585 0.00974 **
AGE26-39 -0.65945 0.04465 -14.771 < 2e-16 ***
AGE40-64 -1.31850 0.06103 -21.604 < 2e-16 ***
AGE65+ -1.72815 0.08517 -20.291 < 2e-16 ***
CREDIT_SCORE -1.25837 0.15478 -8.130 4.29e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 6559.3 on 9017 degrees of freedom
Residual deviance: 5182.0 on 9013 degrees of freedom
(982 observations deleted due to missingness)
AIC: 10850
Number of Fisher Scoring iterations: 6
(Intercept) AGE26-39 AGE40-64 AGE65+ CREDIT_SCORE
1.1866038 0.5171347 0.2675359 0.1776125 0.2841159
Variabel usia dimasukkan ke dalam model sebagai variabel kategorik dummy dengan kategori referensi (baseline group) adalah kelompok usia termuda, yaitu AGE 16-25.
AGE26-39 (\(\beta = -0.65945\), IRR \(= 0.5171\)): Koefisien bertanda negatif dan sangat signifikan (\(p\text{-value} < 2 \times 10^{-16}\), ditandai dengan ***). Nilai IRR sebesar 0.5171 menunjukkan bahwa kelompok pengemudi berusia 26–39 tahun memiliki laju frekuensi klaim sebesar \(0.5171\) kali dari laju kelompok pengemudi berusia 16–25 tahun. Dengan kata lain, kelompok usia ini memiliki laju frekuensi klaim 48.29% lebih rendah (\(1 - 0.5171 = 0.4829\)) dibandingkan kelompok usia termuda (16–25 tahun), dengan asumsi variabel skor kredit konstan.
AGE40-64 (\(\beta = -1.31850\), IRR \(= 0.2675\)): Koefisien bertanda negatif dan sangat signifikan (\(p\text{-value} < 2 \times 10^{-16}\)). Nilai IRR sebesar 0.2675 mengindikasikan bahwa pengemudi berusia 40–64 tahun memiliki laju frekuensi klaim sebesar \(0.2675\) kali dari kelompok pengemudi berusia 16–25 tahun. Hal ini setara dengan penurunan laju frekuensi klaim sebesar 73.25% (\(1 - 0.2675 = 0.7325\)) dibandingkan kelompok referensi.
AGE65+ (\(\beta = -1.72815\), IRR \(= 0.1776\)): Koefisien bertanda negatif dan sangat signifikan (\(p\text{-value} < 2 \times 10^{-16}\)). Nilai IRR sebesar 0.1776 menunjukkan bahwa kelompok pengemudi paling senior (65 tahun ke atas) memiliki laju frekuensi klaim hanya \(0.1776\) kali dari kelompok usia 16–25 tahun. Ini menunjukkan penurunan laju frekuensi klaim yang paling drastis, yaitu sebesar 82.24% (\(1 - 0.1776 = 0.8224\)). Secara keseluruhan, semakin matang usia pengemudi, laju risiko pengajuan klaim asuransi kendaraannya terbukti semakin menurun secara signifikan.
Nilai Koefisien (\(\beta\)): \(-1.25837\) Signifikansi: p-value \(= 4.29 \times 10^{-16}\) (Sangat signifikan pada \(\alpha = 5\%\), ditandai dengan ***) Incidence Rate Ratio (IRR): \(0.2841\)
Interpretasi: Variabel skor kredit memiliki koefisien pengaruh yang bernilai negatif kuat dan sangat signifikan. Nilai IRR sebesar 0.2841 mengindikasikan bahwa untuk setiap kenaikan \(1\) satuan skor kredit nasabah, laju rata-rata pengajuan klaim asuransi kendaraannya akan menurun menjadi \(0.2841\) kali dari semula. Artinya, terdapat penurunan laju frekuensi klaim sebesar 71.59% (\(1 - 0.2841 = 0.7159\)) untuk setiap kenaikan satu unit skor kredit, dengan asumsi variabel kelompok usia bernilai konstan. Hal ini menunjukkan secara konsisten bahwa nasabah dengan kondisi finansial/skor kredit yang lebih sehat cenderung berkendara dengan lebih bertanggung jawab dan memiliki risiko klaim yang jauh lebih rendah.
Goodness-of-Fit Analisis: Model ini memiliki nilai Residual Deviance sebesar 5182.0 dengan derajat bebas (degrees of freedom) sebesar 9013. Rasio antara Residual Deviance terhadap derajat bebasnya adalah \(5182 / 9013 = 0.575\). Karena nilai rasio ini berada di bawah angka \(1\), model tidak menunjukkan adanya gejala overdispersion (di mana varians data jauh lebih besar dibanding rata-ratanya), sehingga asumsi distribusi Poisson terpenuhi dengan baik dan estimasi galat baku (standard error) dari parameter model dinilai valid.
Pemodelan statistika terapan untuk data kategorik dan data cacah (count data) memerlukan pendekatan khusus di luar metode Ordinary Least Squares (OLS) konvensional. Melalui modul praktis ini, keempat rumpun permodelan telah berhasil dieksplorasi menggunakan dataset riil asli dari repositori publik dengan ringkasan karakteristik sebagai berikut:
| No | Model Analisis | Karakteristik Variabel Respon (\(Y\)) | Kasus Riil & Variabel Respon Terpilih | Variabel Prediktor Signifikan (\(X\)) |
|---|---|---|---|---|
| 1 | Regresi Logistik Biner | Kategorik Dikotomi / Biner (\(2\)
pilihan: 0 atau 1) |
Keputusan klik iklan banner (Clicked: Tidak Klik /
Klik) |
Daily_Time (-), Internet_Usage (-),
Age (+) |
| 2 | Regresi Logistik Multinomial | Kategorik Nominal (\(> 2\) kelompok tanpa tingkatan/urutan) | Klasifikasi spesies bunga Iris (species: Setosa /
Versicolor / Virginica) |
petal_width (+), sepal_length (-) |
| 3 | Regresi Logistik Ordinal | Kategorik Ordinal (\(> 2\) kelompok dengan tingkatan alami) | Status tingkat kesehatan janin (fetal_health: Normal
< Suspect < Pathological) |
baseline.value (+), accelerations (-) |
| 4 | Regresi Poisson | Data Cacah / Count Data (Bilangan bulat non-negatif) | Frekuensi pengajuan klaim asuransi mobil Swedia
(OUTCOME / Jumlah Klaim) |
AGE (-) terhadap referensi, CREDIT_SCORE
(-) |