Ordinal Logistic Regression
1. Persiapan Data
library(tidyverse)
## Warning: package 'dplyr' 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.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── 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
# Load dataset
df_MAR <- read.csv("C:/Users/Alfathrindra Agastyo/Documents/Semester 4/Analisis Multivariat/Tugas/data_ordinal_new.csv")
# Lihat data
View(df_MAR)
Data yang digunakan dalam analisis ini berasal dari survei tingkat
kepuasan pelanggan terhadap beberapa faktor seperti pendapatan, harga,
jumlah produk yang dibeli, dan total pembelian. Langkah awal adalah
membaca data dari file CSV dan melakukan pemeriksaan awal untuk memahami
struktur dataset.
3. Ordinal Logistic Regression dengan Satu Variabel Independen
library(MASS)
## Warning: package 'MASS' was built under R version 4.4.3
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
# Model regresi ordinal dengan satu IV
fit_basic <- polr(Tingkat.Kepuasan ~ Pendapatan, data = df_MAR, method = "logistic")
# Output ringkasan model
summary(fit_basic)
##
## Re-fitting to get Hessian
## Call:
## polr(formula = Tingkat.Kepuasan ~ Pendapatan, data = df_MAR,
## method = "logistic")
##
## Coefficients:
## Value Std. Error t value
## Pendapatan -0.07339 0.1329 -0.5523
##
## Intercepts:
## Value Std. Error t value
## 1|2 -1.2609 1.2581 -1.0022
## 2|3 -0.2235 1.2272 -0.1822
##
## Residual Deviance: 42.91573
## AIC: 48.91573
4. Tabel Output Model Rapi
library(broom)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
# Output rapi dengan broom
tidy(fit_basic, conf.int = TRUE) %>%
kable() %>%
kable_styling("basic", full_width = FALSE)
##
## Re-fitting to get Hessian
|
term
|
estimate
|
std.error
|
statistic
|
conf.low
|
conf.high
|
coef.type
|
|
Pendapatan
|
-0.0733906
|
0.1328721
|
-0.5523403
|
-0.3471607
|
0.1931749
|
coefficient
|
|
1|2
|
-1.2608894
|
1.2580814
|
-1.0022319
|
NA
|
NA
|
scale
|
|
2|3
|
-0.2235486
|
1.2271952
|
-0.1821622
|
NA
|
NA
|
scale
|
Output model disajikan dalam bentuk tabel yang lebih rapi
menggunakan fungsi tidy() dari paket broom, dilengkapi dengan interval
kepercayaan. Tabel ini memudahkan interpretasi koefisien serta
signifikansi dari variabel Pendapatan.
5. Ordinal Logistic Regression dengan Beberapa Variabel
Independen
# Model regresi ordinal penuh
fit_full <- polr(Tingkat.Kepuasan ~ Pendapatan + Harga + Jumlah + Total, data = df_MAR, method = "logistic")
# Output ringkasan model
summary(fit_full)
##
## Re-fitting to get Hessian
## Call:
## polr(formula = Tingkat.Kepuasan ~ Pendapatan + Harga + Jumlah +
## Total, data = df_MAR, method = "logistic")
##
## Coefficients:
## Value Std. Error t value
## Pendapatan 0.1880 0.2780 0.6760
## Harga -2.3505 2.6786 -0.8775
## Jumlah -0.7940 1.3653 -0.5815
## Total 0.1806 0.6858 0.2633
##
## Intercepts:
## Value Std. Error t value
## 1|2 -4.9442 5.5027 -0.8985
## 2|3 -3.7844 5.4668 -0.6922
##
## Residual Deviance: 40.16584
## AIC: 52.16584
Model selanjutnya memperluas analisis dengan memasukkan beberapa
variabel independen, yaitu Pendapatan, Harga, Jumlah, dan Total. Model
ini memungkinkan kita melihat kontribusi masing-masing variabel terhadap
perubahan tingkat kepuasan pelanggan.
6. Tabel Output Model Full
# Tabel rapi
tidy(fit_full, conf.int = TRUE) %>%
kable() %>%
kable_styling("basic", full_width = FALSE)
##
## Re-fitting to get Hessian
|
term
|
estimate
|
std.error
|
statistic
|
conf.low
|
conf.high
|
coef.type
|
|
Pendapatan
|
0.1879535
|
0.2780431
|
0.6759867
|
-0.355011
|
0.8737004
|
coefficient
|
|
Harga
|
-2.3504600
|
2.6786379
|
-0.8774833
|
-9.036944
|
2.5877785
|
coefficient
|
|
Jumlah
|
-0.7939513
|
1.3653201
|
-0.5815130
|
-3.993932
|
1.8149592
|
coefficient
|
|
Total
|
0.1805629
|
0.6857825
|
0.2632947
|
-1.151074
|
1.7607908
|
coefficient
|
|
1|2
|
-4.9442352
|
5.5027443
|
-0.8985035
|
NA
|
NA
|
scale
|
|
2|3
|
-3.7843864
|
5.4668345
|
-0.6922446
|
NA
|
NA
|
scale
|
Tabel hasil dari model penuh memperlihatkan estimasi koefisien,
error standar, nilai statistik uji, dan p-value untuk masing-masing
prediktor. Dari sini dapat dianalisis variabel mana yang memiliki
pengaruh paling signifikan terhadap tingkat kepuasan pelanggan.
7. Interpretasi Koefisien dalam Odds Ratio
# Koefisien dalam bentuk Odds Ratio
exp(coef(fit_full))
## Pendapatan Harga Jumlah Total
## 1.2067773 0.0953253 0.4520550 1.1978915
# Tabel odds ratio rapi
tidy(fit_full, conf.int = TRUE, exponentiate = TRUE) %>%
kable() %>%
kable_styling("basic", full_width = FALSE)
##
## Re-fitting to get Hessian
|
term
|
estimate
|
std.error
|
statistic
|
conf.low
|
conf.high
|
coef.type
|
|
Pendapatan
|
1.2067773
|
0.2780431
|
0.6759867
|
0.7011658
|
2.395760
|
coefficient
|
|
Harga
|
0.0953253
|
2.6786379
|
-0.8774833
|
0.0001189
|
13.300192
|
coefficient
|
|
Jumlah
|
0.4520550
|
1.3653201
|
-0.5815130
|
0.0184271
|
6.140826
|
coefficient
|
|
Total
|
1.1978915
|
0.6857825
|
0.2632947
|
0.3162970
|
5.817036
|
coefficient
|
|
1|2
|
0.0071244
|
5.5027443
|
-0.8985035
|
NA
|
NA
|
scale
|
|
2|3
|
0.0227228
|
5.4668345
|
-0.6922446
|
NA
|
NA
|
scale
|
8. Analisis Efek Marginal
library(marginaleffects)
## Warning: package 'marginaleffects' was built under R version 4.4.3
# Marginal Effects untuk Pendapatan
mfx_Pendapatan <- avg_comparisons(fit_full, variables = "Pendapatan", type = "probs")
##
## Re-fitting to get Hessian
mfx_Pendapatan
##
## Group Estimate Std. Error z Pr(>|z|) S 2.5 % 97.5 %
## 1 -0.03605 0.0497 -0.726 0.468 1.1 -0.1334 0.0613
## 2 -0.00402 0.0110 -0.366 0.714 0.5 -0.0255 0.0175
## 3 0.04006 0.0585 0.685 0.493 1.0 -0.0745 0.1546
##
## Term: Pendapatan
## Type: probs
## Comparison: +1
# Marginal Effects untuk Total
mfx_Harga <- avg_comparisons(fit_full, variables = "Total", type = "probs")
##
## Re-fitting to get Hessian
mfx_Harga
##
## Group Estimate Std. Error z Pr(>|z|) S 2.5 % 97.5 %
## 1 -0.03466 0.1282 -0.270 0.787 0.3 -0.2859 0.2165
## 2 -0.00381 0.0198 -0.193 0.847 0.2 -0.0426 0.0349
## 3 0.03847 0.1469 0.262 0.793 0.3 -0.2494 0.3264
##
## Term: Total
## Type: probs
## Comparison: +1
Analisis efek marginal dilakukan untuk mengukur perubahan rata-rata
probabilitas pada setiap kategori tingkat kepuasan akibat perubahan
kecil pada masing-masing variabel. Misalnya, perubahan pada Pendapatan
atau Total pembelian dapat mempengaruhi probabilitas seorang pelanggan
merasa “Sangat Puas” dibandingkan “Tidak Puas”. Ini memberikan
interpretasi praktis terhadap hasil model.
Kesimpulan