Tugas Akhir PADK: Analisis Regresi Logistik

Packages

Packages yang digunakan adalah lmtest, car, plotrix, aod, dan ggplot2

library(lmtest)
## Warning: package 'lmtest' was built under R version 4.2.3
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)
## Loading required package: carData
library(plotrix)
library(aod)
## Warning: package 'aod' was built under R version 4.2.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3

Metadata

Data yang digunakan adalah data sekunder yang terdiri dari 7 peubah dengan 1129 baris. Akan tetapi, dalam analisis ini hanya digunakan 4 peubah, yaitu event sebagai peubah respon, lalu age, gender, dan way sebagai peubah penjelas.

Peubah Keterangan Tipe Peubah
Event Kejadian turnover Numerik (0 dan 1)
Age Usia Numerik
Gender Jenis kelamin Kategorik (male dan female)
Way Transportasi ke kantor Kategorik (bus, car, dan foot)
library(rio)
data <- import("https://raw.githubusercontent.com/aidara11/pengantar-analisis-data-kategorik/main/data%20tugas%20padk.csv")
head(data)
##   event gender age        industry profession greywage way
## 1     1      m  35           Banks         HR    white bus
## 2     1      m  33           Banks         HR    white bus
## 3     1      f  35 PowerGeneration         HR    white bus
## 4     1      f  35 PowerGeneration         HR    white bus
## 5     1      m  32          Retail Commercial    white bus
## 6     1      f  42     manufacture         HR    white bus

Eksplorasi Data

1. Bar chart peubah Event (kejadian turnover)

ggplot(data, aes(x = factor(event), fill = factor(event))) +
  scale_fill_manual(values = c("green", "darkblue")) + 
  geom_bar(position = "dodge") +
  labs(x = "Kejadian turnover", y = "Frekuensi", fill = "Turnover") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Turnover merupakan jumlah karyawan yang meninggalkan suatu perusahaan dan digantikan oleh karyawan baru dalam suatu periode waktu. Berdasarkan barchart, frekuensi terjadinya turnover dan tidak terjadinya turnover hampir sama. Hal ini menandakan bahwa tidak ada kecenderungan pada kejadian turnover.

2. Bar chart kejadian turnover (event) berdasarkan usia (age)

ggplot(data, aes(x = cut(age, breaks = seq(18, 60, by = 5)), fill = factor(event))) +
  scale_fill_manual(values = c("green", "darkblue")) + 
  geom_bar(position = "dodge") +
   geom_text(
    aes(label = ..count..), 
    stat = "count", 
    position = position_dodge(width = 0.9), 
    vjust = -0.5,
    size = 3,
    color = "black",
    fontface = "bold"
  ) +
  labs(x = "Usia", y = "Frekuensi", fill = "Turnover") +
  scale_x_discrete(labels = c("18-22", "23-27", "28-32", "33-37", "38-42", "43-47", "48-52", "53-57", "58-62")) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Pada peubah usia, frekuensi kejadian turnover didominasi oleh rentang usia 23-27 tahun. Sementara itu, frekuensi kejadian tidak terjadinya turnover didominasi oleh rentang usia 28-32 tahun. Pada bar chart juga menunjukkan bahwa kelompok individu dengan usia 20-40 tahun lebih sering terlibat dengan kejadian turnover daripada kelompok individu dengan usia di bawah 20 tahun atau di atas 40 tahun. Semakin bertambahnya usia maka cenderung semakin rendah frekuensi turnovernya. Hal ini terlihat pada plot yang cenderung menjulur ke kanan. Hal ini wajar karena yang menjadi karyawan di suatu perusahaan biasanya berada di rentang usia 20-40 tahun.

2. Bar chart kejadian turnover (event) berdasarkan jenis kelamin (gender)

ggplot(data, aes(x = gender, fill = factor(event))) +
  geom_bar(position = "dodge") +
    geom_text(
    aes(label = ..count..), 
    stat = "count", 
    position = position_dodge(width = 0.9), 
    vjust = -0.5,
    size = 3,
    color = "black",
    fontface = "bold"
  ) +
  labs( x = "Jenis kelamin", y = "Frekuensi", fill = "Turnover") +
  scale_fill_manual(values = c("green", "darkblue")) + 
  theme_minimal()

Berdasarkan Bar chart kejadian turnover (event) berdasarkan jenis kelamin (gender), terlihat bahwa wanita lebih banyak bekerja sebagai karyawan di suatu perusahaan daripada pria, sehingga kejadian turnover pada wanita juga lebih tinggi. Meskipun perbandingan antara turnover dan tidak turnover pada masing-masing jenis kelamin tidak terlalu berbeda, namun kita dapat mengetahui bahwa lebih banyak kejadian turnover pada wanita dan lebih banyak kejadian tidak turnover pada pria.

3. Bar chart kejadian turnover (event) berdasarkan transportasi ke kantor (way)

ggplot(data, aes(x = way, fill = factor(event))) +
  geom_bar(position = "dodge") +
  geom_text(
    aes(label = ..count..), 
    stat = "count", 
    position = position_dodge(width = 0.9), 
    vjust = -0.5,
    size = 3,
    color = "black",
    fontface = "bold"
  ) +
  labs(title = "Bar Chart of Turnover by Way", x = "Transportasi ke Kantor", y = "Frekuensi", fill = "Turnover") +
  scale_fill_manual(values = c("green", "darkblue")) + 
  theme_minimal()

Berdasarkan bar chart kejadian turnover (event) berdasarkan transportasi ke kantor (way), terlihat bahwa mayoritas karyawan menggunakan bus sebagai alat transportasi menuju ke perusahaan. Karyawan yang menggunakan bus dan mobil lebih banyak terlibat dalam kejadian turnover, sedangkan karyawan yang jalan kaki lebih banyak terlibat dalam kejadian tidak turnover di perusahaannya.

Analisis Regresi Logistik

data$`event` <- as.factor(data$`event`)
data$age <- as.integer(data$age)
data$gender<- as.factor(data$gender)
data$way<- as.factor(data$way)
str(data)
## 'data.frame':    1129 obs. of  7 variables:
##  $ event     : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
##  $ gender    : Factor w/ 2 levels "f","m": 2 2 1 1 2 1 1 1 1 1 ...
##  $ age       : int  35 33 35 35 32 42 42 28 29 30 ...
##  $ industry  : chr  "Banks" "Banks" "PowerGeneration" "PowerGeneration" ...
##  $ profession: chr  "HR" "HR" "HR" "HR" ...
##  $ greywage  : chr  "white" "white" "white" "white" ...
##  $ way       : Factor w/ 3 levels "bus","car","foot": 1 1 1 1 1 1 1 1 1 1 ...
head(data)
##   event gender age        industry profession greywage way
## 1     1      m  35           Banks         HR    white bus
## 2     1      m  33           Banks         HR    white bus
## 3     1      f  35 PowerGeneration         HR    white bus
## 4     1      f  35 PowerGeneration         HR    white bus
## 5     1      m  32          Retail Commercial    white bus
## 6     1      f  42     manufacture         HR    white bus
model<-glm(data$`event`~data$age+data$gender+data$way,data=data,family=binomial(link="logit"))
summary(model)
## 
## Call:
## glm(formula = data$event ~ data$age + data$gender + data$way, 
##     family = binomial(link = "logit"), data = data)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -1.302  -1.210   1.059   1.139   1.593  
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)   
## (Intercept)   0.555087   0.275501   2.015  0.04392 * 
## data$age     -0.014941   0.008651  -1.727  0.08416 . 
## data$genderm -0.094737   0.140592  -0.674  0.50041   
## data$waycar   0.062777   0.136322   0.461  0.64515   
## data$wayfoot -0.622220   0.206842  -3.008  0.00263 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1565.0  on 1128  degrees of freedom
## Residual deviance: 1551.3  on 1124  degrees of freedom
## AIC: 1561.3
## 
## Number of Fisher Scoring iterations: 4

Model Regresi Logistik: \[logit[\pi(x)]=\alpha+\beta_1age+\beta_2genderm+\beta_3waycar+\beta_4wayfoot\] \[logit[\pi(x)]=0.555087-0.014941age-0.094737genderm+0.062777waycar-0,622220wayfoot\]

\(age\) = usia karyawan

\(genderm\) = bernilai 1 untuk male, 0 untuk female

\(waycar\) = bernilai 1 untuk car, 0 untuk lainnya

\(wayfoot\) = bernilai 1 untuk foot, 0 untuk lainnya

Perhitungan Odds Rasio

Peubah Age

b1 <- summary(model)$coefficients[2,1]
b2 <- summary(model)$coefficients[3,1]
b3 <- summary(model)$coefficients[4,1]
b4 <- summary(model)$coefficients[5,1]

\[exp(\beta_4)=OR=\frac{Odds(X=x+1)}{Odds(X=x)}\]

Odds_Age <- exp(b1)
Odds_Age
## [1] 0.98517

\(OR=0.98517\)

Interpretasi: Peluang terjadinya turnover karyawan akan menurun secara multiplikatif sebesar 0.98517 untuk setiap kenaikan 1 tahun usia karyawan.

Peubah gender (Male vs Female)

Odds_Male <- exp(b2)
Odds_Male
## [1] 0.9096122

\(Oddsratio(Pria)=0.9096122\)

Interpretasi:

Untuk nilai peubah lainnya tetap, dugaan odds bagi seorang laki-laki untuk turnover adalah 0.9096122 kali dibanding wanita.

Peubah Way (Car vs Bus)

Odds_Car <- exp(b3)
Odds_Car
## [1] 1.06479

\(Oddsratio(Car)=1.06479\)

Interpretasi:

Untuk nilai peubah lainnya tetap, dugaan odds bagi karyawan yang menggunakan car untuk turnover adalah 1.06479 kali lebih besar dibanding karyawan yang menggunakan bus.

Peubah Way (Foot vs Bus)

Odds_Foot <- exp(b4)
Odds_Foot
## [1] 0.5367517

\(Oddsratio(Foot)=0.5367517\)

Interpretasi:

Untuk nilai peubah lainnya tetap, dugaan odds bagi karyawan yang berjalan kaki untuk turnover adalah 0.5367517 kali dibanding karyawan yang menggunakan bus.

Pendugaan peluang peubah kategorik

rataan_age <- mean(data$age)
rataan_age
## [1] 31.06377

Dalam pendugaan peluang peubah kategorik, peubah numerik dianggap konstan. Sehingga, peubah Age akan dianggap konstan dengan nilai rata-ratanya sebesar \(31.06377\) atau 31 tahun.

Peluang peubah kategorik: \[\pi(x)=\frac{exp(logit[\pi(x)])}{1+exp(logit[\pi(x)])}\]

p <- function(logit){
  exp(logit)/(1+exp(logit))
}
p <- function(logit){
  exp(logit)/(1+exp(logit))
}
alpha <- summary(model)$coefficients[1,1]
b1 <- summary(model)$coefficients[2,1]
b2 <- summary(model)$coefficients[3,1]
b3 <- summary(model)$coefficients[4,1]
b4 <- summary(model)$coefficients[5,1]
logit_x <- function(c1,c2,d){
  alpha+b1*c1+b2*c2+b3*d+b4*rataan_age
}
Peubah <- c("Bus_Laki-laki","Bus_Wanita","Car_Laki-laki","Car_Wanita","Foot_Laki-laki","Foot_Wanita")
Logit <- c(logit_x(0,0,1),logit_x(0,0,0),logit_x(1,0,1),logit_x(1,0,0),logit_x(0,1,1),logit_x(0,1,0))
Peluang <- c(p(logit_x(0,0,1)),p(logit_x(0,0,0)),p(logit_x(1,0,1)),p(logit_x(1,0,0)),p(logit_x(0,1,1)),p(logit_x(0,1,0)))
Kejadian <- ifelse(Peluang>0.5,"Turnover","Tidak turnover")
data.frame(Peubah, Logit, Peluang, Kejadian)
##           Peubah     Logit      Peluang       Kejadian
## 1  Bus_Laki-laki -18.71062 7.483061e-09 Tidak turnover
## 2     Bus_Wanita -18.77340 7.027735e-09 Tidak turnover
## 3  Car_Laki-laki -18.72557 7.372086e-09 Tidak turnover
## 4     Car_Wanita -18.78834 6.923514e-09 Tidak turnover
## 5 Foot_Laki-laki -18.80536 6.806683e-09 Tidak turnover
## 6    Foot_Wanita -18.86814 6.392514e-09 Tidak turnover

Berdasarkan perhitungan di atas, dapat diketahui bahwa pada umur 31 tahun baik pria maupun wanita memiliki peluang untuk tidak turnover.

Uji Simultan

\(H_0: \beta_1=\beta_2=\beta_3=\beta_4=0\) \(H_1:\) minimal ada satu \(\beta_i\neq0\)

# Likelihood ratio test
lrtest(model)
## Likelihood ratio test
## 
## Model 1: data$event ~ data$age + data$gender + data$way
## Model 2: data$event ~ 1
##   #Df  LogLik Df  Chisq Pr(>Chisq)   
## 1   5 -775.66                        
## 2   1 -782.49 -4 13.653   0.008487 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan Likelihood ratio test, didapat p-value sebesar 0.008487 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\). Dapat disimpulkan bahwa secara bersama-sama peubah way, age, dan gender berpengaruh signifikan terhadap terjadinya kejadian turnover pada taraf nyata 5%.

Uji Parsial

Menggunakan Uji Wald Hipotesis: \(H_0:\beta_i=0\) \(H_1:\beta_i\neq0\)

# Age
wald.test(Sigma =vcov(model), b = coef(model),Terms = 2)
## Wald test:
## ----------
## 
## Chi-squared test:
## X2 = 3.0, df = 1, P(> X2) = 0.084

\(p-value=0.5>\alpha=0.05\), Tak Tolak \(H_0\)

# Gender
wald.test(Sigma =vcov(model), b = coef(model),Terms = 3)
## Wald test:
## ----------
## 
## Chi-squared test:
## X2 = 0.45, df = 1, P(> X2) = 0.5

\(p-value=0.84>\alpha=0.084\), Tak Tolak \(H_0\)

# Way
wald.test(Sigma =vcov(model), b = coef(model),Terms = 4:5)
## Wald test:
## ----------
## 
## Chi-squared test:
## X2 = 10.3, df = 2, P(> X2) = 0.0058

\(p-value=0.0058<\alpha=0.05\), Tolak \(H_0\) Dapat disimpulkan bahwa hanya penduga koefisien way yang berpengaruh signifikan terhadap perolehan nilai model.

Kesimpulan

Wanita cenderung memiliki peluang yang tinggi untuk mengalami turnover daripada laki-laki. Jika dilihat berdasarkan peubah way, karyawan yang berangkat menggunakan mobil dan bus memiliki kesempatan turnover lebih tinggi daripada karyawan yang berjalan kaki ke perusahaannya.