Saat ini sedang ramai-ramainya mengenai pasien covid-19 mengenai kondisi pasien yaitu hidup/sembuh atau meninggal. Nah kali ini kita akan membahas mengenai regresi logistik yang dapat diterapkan untuk analisis harapan hidup/sembuh pasien covid-19 seperti pengolahan data menggunakan package dplyr untuk melihat analisis awal. Package dplyr tersebut sangat berguna sekali untuk mengolah data numerik menjadi range / kategorikal. Pembahasan mengenai analisis Regresi logistik hampir sama dengan regresi linear dan berganda namun menggunakan bersifat kategorikal/dikotomi. Dikotomi yang dimaksud adalah skala data nominal dengan dua kategori misalnya: ya dan Tidak, Baik dan Buruk atau Tinggi dan Rendah . Pada regresi logistik ada 2 yaitu
- jika variabel tak bebas memiliki dua kategori, maka disebut regresi logistik biner (binary regression logistic).
- jika variabel tak bebas memiliki lebih dari dua kategori, maka disebut regresi logistik multinomial (multinomial/polychotomous logistic regression).
Kita bahas mengenai jenis-jenis variabel yang secara garis besar dibagi menjadi 2 yaitu kategorikal dan kontinue
Variabel Kategorikal
Contents
Variabel kategorikal merupakan variabel hitung yang tidak memenuhi sifat operasi aritmatik. Variabel kategorikal sering disebut sebagai variabel kualitatif.
- Nominal: variabel kategorikal yang nilainya tidak merepresentasikan urutan. Contoh dari variabel nominal ialah variabel yang memiliki 2 nilai, yaitu 0 dan 1, dimana 0 merepresentasikan laki-laki dan 1 merepresentasikan perempuan.
- Ordinal : variabel kategorikal yang nilainya merepresentasikan urutan. Urutan pada variabel ordinal terjadi secara
alamiah. Contoh dari variabel ordinal ialah tingkat luka yang dialami dalam kecelakaan (1: ringan, 2: sedang, dan 3: Berat).
Variabel Kontinu
Variabel Kontinu merupakan variabel yang memiliki nilai-nilai yang terdapat dalam suatu selang/interval bilangan real. Contoh variabel kontinu adalah harga kendaran.
Setelah kalian pahami mengenai jenis variabel, kita lanjutkan mengenai asumsi pada regresi logistik yaitu
- Tidak membutuhkan hubungan linier antara variabel independen dengan variabel dependen.
- Variabel independen tidak memerlukan asumsi multivariate normality.
- Asumsi homokedastisitas tidak diperlukan
- Variabel bebas tidak perlu diubah ke dalam bentuk metrik (interval atau skala ratio).
- Variabel dependen harus bersifat dikotomi
- Variabel independen tidak harus memiliki keragaman yang sama antar kelompok variabel
- Kategori dalam variabel independen harus terpisah satu sama lain atau bersifat eksklusif
Persamaan umum regresi logistik yaitu diturunkan dari persamaan
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Sehingga persamaan umum menjadi berikut
![]()
Model regresi logistik termasuk kategori Generalized Linear Models/GLM yang digunakan untuk memecahkan masalah peubah respon kategorik (misalnya biner), dengan menggunakan fungsi penghubung (link function) tertentu sehingga diperoleh suatu model yang mampu menganalisa hubungan antara peubah respon kategorik (Dependen Variabel) dengan satu atau beberapa peubah penjelas (Independen Variabel).
Package
Pada analisis regresi logistik yang akan kita gunakan tidak membutuhkan package khusus karena sudah ada function defaultnya hanya butuh package dplyr untuk sedikit mengolah data menjadi kategorikal
Dataset
Dataset yang akan kita gunakan untuk analisis regresi logistik adalah data 100 pasien Covid-19 (data dummy bukan asli yaaa) pasien-covid-19 yang sedang dirawat yaitu mengenai umur dan kondisi (hidup atau meninggal). Dataset tersebut disimpan dalam bentuk csv dengan nama file pasien-covid-19.csv berikut tampilan dataset tersebut
library(dplyr)
covid <-read.csv('dataset/pasien-covid-19.csv')
print(covid)
hasil
> library(dplyr)
> covid <-read.csv('dataset/pasien-covid-19.csv')
> print(covid)
no kondisi usia
1 1 hidup 20
2 2 hidup 21
3 3 hidup 23
4 4 hidup 25
5 5 hidup 25
6 6 hidup 27
7 7 meninggal 26
8 8 hidup 29
9 9 hidup 28
10 10 hidup 29
11 11 hidup 30
12 12 hidup 30
13 13 hidup 30
14 14 hidup 30
15 15 hidup 31
16 16 meninggal 31
17 17 hidup 32
18 18 hidup 32
19 19 hidup 33
20 20 hidup 34
21 21 hidup 34
22 22 hidup 34
23 23 meninggal 34
24 24 hidup 34
25 25 hidup 34
26 26 hidup 35
27 27 hidup 35
28 28 hidup 36
29 29 meninggal 36
30 30 hidup 36
31 31 hidup 37
32 32 meninggal 37
33 33 hidup 37
34 34 hidup 38
35 35 hidup 38
36 36 hidup 39
37 37 meninggal 39
38 38 hidup 40
39 39 meninggal 40
40 40 hidup 41
41 41 hidup 41
42 42 hidup 41
43 43 hidup 42
44 44 hidup 42
45 45 meninggal 43
46 46 hidup 43
47 47 hidup 43
48 48 meninggal 43
49 49 hidup 44
50 50 hidup 44
51 51 meninggal 44
52 52 meninggal 44
53 53 hidup 45
54 54 meninggal 45
55 55 hidup 46
56 56 meninggal 46
57 57 hidup 47
58 58 hidup 47
59 59 meninggal 47
60 60 hidup 48
61 61 meninggal 48
62 62 meninggal 48
63 63 hidup 49
64 64 hidup 49
65 65 meninggal 49
66 66 hidup 50
67 67 meninggal 50
68 68 hidup 51
69 69 hidup 52
70 70 meninggal 52
71 71 meninggal 53
72 72 meninggal 53
73 73 meninggal 54
74 74 hidup 55
75 75 meninggal 55
76 76 meninggal 55
77 77 meninggal 56
78 78 meninggal 56
79 79 meninggal 56
80 80 hidup 57
81 81 hidup 57
82 82 meninggal 57
83 83 meninggal 57
84 84 meninggal 57
85 85 meninggal 57
86 86 hidup 58
87 87 meninggal 58
88 88 meninggal 58
89 89 meninggal 59
90 90 meninggal 59
91 91 hidup 60
92 92 meninggal 60
93 93 meninggal 61
94 94 meninggal 62
95 95 meninggal 62
96 96 meninggal 63
97 97 hidup 64
98 98 meninggal 64
99 99 meninggal 65
100 100 meninggal 69
>
Variabel indepeden umur sedangkan dependen kondisi (kategorikal)
Pembagian kategori usia
Untuk mempermudah dalam analisis data, maka perlu dibuat sebuah range umur serta berapa frekuensi yang muncul pada kategori tersebut, misalkan kita punya aturan sebagai berikut
Untuk pengolahan hal tersebut, kita bisa menggunakan function ifelse dan dilanjut dengan group_by seperti berikut
a <- covid %>% mutate(kategori=ifelse(usia >=20 & usia<=29,'A',
ifelse(usia >=30 & usia<=39,'B',
ifelse(usia >=40 & usia<=49,'C','D'))))
hidup_meninggal <-a %>% group_by(kategori,kondisi) %>% summarise(frekuensi=n())
print(hidup_meninggal)
hasil
kategori kondisi frekuensi <chr> <fct> <int> 1 A hidup 9 2 A meninggal 1 3 B hidup 22 4 B meninggal 5 5 C hidup 17 6 C meninggal 11 7 D hidup 9 8 D meninggal 26
Kita dapat membacanya rentang usia 20 s.d 29 (kategori A) ada 10 pasien dengan hidup 9 orang dan 1 orang meninggal. Bila kita hanya ingin tahu berapa jumlah setiap kategori yaitu
data_kategori <-a %>% group_by(kategori) %>% summarise(frekuensi=n()) print(data_kategori)
hasil
kategori frekuensi <chr> <int> 1 A 10 2 B 27 3 C 28 4 D 35
Kita seleksi lagi hanya kondisi hidup saja untuk setiap kategori
data_hidup <-a %>% filter(kondisi=='hidup') %>% group_by(kategori) %>% summarise(frekuensi = n()) print(data_hidup)
hasil
kategori frekuensi <chr> <int> 1 A 9 2 B 22 3 C 17 4 D 9
Kita dapat membuat proporsi, misalkan jumlah pasien kategori A yaitu 10 dengan yang hidup 9 sehingga punya proporsi 9/10 = 0.9, kita bisa membuat tabel lagi menjadi berikut
data_hidup_proporsi<-data_hidup %>% mutate(proporsi=c(data_hidup$frekuensi/data_kategori$frekuensi)) print(data_hidup_proporsi)
hasil
kategori frekuensi proporsi <chr> <int> <dbl> 1 A 9 0.9 2 B 22 0.815 3 C 17 0.607 4 D 9 0.257
Agar lebih menarik bisa ditampilkan menjadi berikut
usia <-c('20 s.d 29','30 s.d 39','40 s.d 49','> 50')
barplot(data_hidup_proporsi$proporsi,names.arg = usia,
xlab='kategori umur',ylab='harapan hidup',col='blue',
main='Harapan Hidup Pasien Covid-19',border='black')
Nah kalian bisa melihat data tersebut lebih baik dan bisa menyimpulkan bahwa harapan hidup semakin nipis untuk orang yang berumur.
Estimasi Harapan Hidup Pasien Covid-19
Salah satu syarat penggunaan metode regresi logistik ialah data pada variabel tak bebas bersifat non-metrik (kategori) dalam hal ini yaitu kondisi. Nah kita harus ubah kondisi yaitu hidup==1 dan meninggal ==0 yang berarti harapan hidup ![]()
a2 <- covid %>% mutate(binary=ifelse(kondisi=='hidup',1,0)) print(a2) model = glm(formula = a2$binary ~ covid$usia, family = 'binomial') summary(model) b0 = model$coefficient[1] #intercept b1 = model$coefficient[2] print(data.frame(b0,b1))
hasil
Call:
glm(formula = a2$binary ~ covid$usia, family = "binomial")
Deviance Residuals:
Min 1Q Median 3Q Max
-2.2562 -0.8200 0.4626 0.8411 1.9845
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.39351 1.14585 4.707 2.51e-06 ***
covid$usia -0.11269 0.02431 -4.635 3.56e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 136.66 on 99 degrees of freedom
Residual deviance: 106.79 on 98 degrees of freedom
AIC: 110.79
Number of Fisher Scoring iterations: 4
b0 b1
(Intercept) 5.393514 -0.1126932
Berdasarkan model diatas maka persamaan peluang logistik harapan hidup pasien covid-19 berdasarkan usia yaitu
![]()
Misalkan kita akan prediksi peluang untuk harapan hidup umur 20 yaitu
usia = 20 peluang = exp(b0+b1*usia)/(1+exp(b0+b1*usia)) print(data.frame(usia,peluang))
hasil
usia peluang (Intercept) 20 0.9584989
Harapan hidup pasien covid-19 untuk umur 20 sebesar 0.9, mari kita coba untuk umur 60
usia = 60 peluang = exp(b0+b1*usia)/(1+exp(b0+b1*usia)) print(data.frame(usia,peluang))
hasil
usia peluang (Intercept) 60 0.2029303
Semakin tipis harapan hidup pasien covid-19 jika semakin “berumur” yaitu 0.20 saja. Walaupun kondisi hidup/meninggal pasien ada banyak faktor selain umur seperti penyakit komplikasi sebelumnya tapi setidaknya ada gambaran awal saja mengenai korelasinya/peluang mengenai umur vs kondisi pasien.
Melalui plot berikut kita akan gambaran mengenai hubungan peluang dan umur
plot(peluang_hidup, xlab='kategori umur',ylab='harapan hidup',col='blue',
main='Harapan Hidup Pasien Covid-19')


