Langsung ke konten utama

Natural Language Processing (NLP) Penerapan Stopwords Bahasa Indonesia dengan R: Topik Sepinya Jalur Pantura Akibat Adanya Tol Trans Jawa

Natural Language Processing : Stopwords Bahasa Indonesia dengan R Halo teman-teman, berjumpa lagi dengan blog sederhana ini. Pada pembahasan sebelumnya, kita telah bersama belajar penerapan stemming teks yang merupakan bagian dari Natural Language Processing (NLP) menggunakan R. Pada perjumpaan kali ini, kita akan melanjutkan perjuangan kita berbagi ilmu mengenai NLP, tepatnya adalah penerapan stopwords Bahasa Indonesia dengan R. Perlu diketahui bahwa di dalam NLP, untuk menambah keluasan dan mempertajam analisis teks, proses stemming teks saja belum cukup. Kita juga perlu membersihkan teks yang relatif atau mutlak tidak bermakna di dalam analisis teks. Biasanya teks yang dieliminasi dalam NLP merupakan kata penghubunga atau konjungsi, atau kata yang berupa ekspresi yang bercampur di dalam data teks, misalkan ekspresi tertawa "wkwk", ekspresi penolakan "gak, nggak, tidak, atau gk", bahasa asing (selain Indonesia), atau juga kata-kata yang tidak memenuhi kaidah ta

Survival Analysis dengan R

Survival Analysis dengan R

Halo teman-teman, kembali lagi bersama jokoding.com, sebuah situs belajar dan berbagi analisis data menggunakan aplikasi olah data. Kita kemarin telah membahas mengenai beberapa teori mengenai machine learning dalam data science, seperti supervised learning, unsupervised learning, serta reinforcement learning. Dalam kesempatan kali ini, kita coba kembali meneruskan pembahasan mengenai pemodelan termasuk bagaimana mengaplikasikannya dengan R.

Baik, kali ini kita akan membahas sebuah alat analisis yang sangat populer di bidang kesehatan teman-teman, yaitu survival analysis. Mungkin sebagian dari kita pernah mendengar kata survive atau yang artinya bertahan ini. Jadi, di survival analysis ini kita akan mengenal bagaimana cara menganalisis waktu atau lama hingga sebuah kejadian benar-benar terjadi. Dalam survival analysis, kita akan mengenal 2 outcome utama, yaitu waktu (T), serta event (e). Event ini merupakan variabel biner 0 dan 1 dengan nilai 1 menunjukkan terjadinya sebuah kejadian, sedangkan 0 tidak terjadinya sebuah kejadian.

Dalam survival analysis ini pula, kita juga akan mengenal istilah tersensor (cencored), yaitu ketika nilai dari event (e) bernilai 0. Namun yang perlu dicatat bahwa tersensor dalam hal ini tidak menunjukkan besaran peluang dari e itu sendiri.

Dalam survival analysis, fungsi yang digunakan di dalam pemodelan dikenal dengan fungsi survival dengan notasi sebagai berikut:

S(t) = P(T > t)

yang dapat diterjemahkan sebagai peluang kejadian (hidup) saat melampaui waktu sebesar t

Selain itu, dalam survival analysis kita juga akan mengenal fungsi Hazard yang dinotasikan sebagai berikut:

h(t) = lim dt --> 0 {P(t <= T <= (t + dt))/dt}

kalau kita amati, fungsi Hazard di atas merupakan fungsi kelajuan sesaat yang diterjemahkan sebagai laju penurunan peluang sebuah kejadian sesaat setelah waktu T. Dalam dunia kesehatan atau medis, kita dapat menerjemahkan seberapa besar peluang seseorang meninggal sesaat setelah ia hidup selama T satuan (hari, bulan, tahun). Kelajuan berdasarkan fungsi Hazard di atas menunjukkan sebuah grafik atau kurva yang menurun. Hal ini sesuai dengan situasi dalam bidang kesehatan, semakin tua seseorang, maka kualitas fisiknya juga mengalami penurunan hingga ia telah dinyatakan meninggal.

Di dalam survival analysis sendiri, setidaknya kita dapat berkenalan dengan 3 jenis model, yaitu Kaplan-Meier, model Eksponensial (exponential model), serta Cox Proportional Hazard (Coxph). Sekilas cara membedakan ketiga jenis model tersebut bisa kita amati dari grafiknya. Kaplan-Meier biasanya digambarkan dengan bentuk grafik fungsi tangga (floor function), sementara model eksponensial digambarkan dengan bentuk grafik kontinu yang mulus (smooth), sedangkan model Cox Proportional Hazard merupakan model dengan mengombinasikan model Kaplan-Meier dan Eksponensial.

Sebelum praktikum, agar pemahaman kita tidak tipis-tipis, ada baiknya kita melakukan sebuah simulasi manual terlebih dahulu. Misalkan kita meneliti ketahanan seseorang terkena penyakit kanker (cancer) sampai ia meninggal (e = 1). Dalam penelitian kita misalkan melakukan wawancara dengan jumlah sampel sebanyak 9 orang dan kita amati selama 5 tahun. Dari hasil wawancara tersebut, kemudian kita buat sebuah oretan sederhana sebagai berikut:

Hasil pengamatan 9 responden

Responden 1 ditemukan meninggal akibat penyakit kanker pada tahun ke-3 dari acuan awal penelitian. Kemudian responden 2 terpilih sampel pada tahun ke-2, namun pada tahun ke-3 ia dinyatakan meninggal akibat kanker. Responden ke-3, dia tidak tahu apakah dirinya mengidap kanker atau tidak, dia bergabung dalam penelitian pada tahun ke-2 dan ternyata ia meninggal pada tahun ke-4. Sedangkan responden ke-4, ia bergabung pada tahun ke-2 tetapi pada tahun ke-4 ia tidak lagi mau diwawancarai sehingga dianggap tersensor (e = 0). Responden ke-5, ia sejak awal penelitian tidak tahu pasti apakah ia mengidap kanker atau tidak, dan pada tahun ke-2 dia ternyata non-respon karena pindah tempat tinggal atau tinggal di luar area penelitian. Dan seterusnya sampai responden ke-9, ia baru bergabung pada tahun ke-4 dan ternyata dinyatakan meninggal akibat kanker di akhir masa penelitian (= 1). Dalam hal inilah terlihat bahwa situasi tersensor tidak ada hubungan dengan peluang seseorang meninggal akibat penyakit kanker itu sendiri, karena bisa jadi ia tersensor karena pindah tempat, tidak mau diwawancarai, atau hal lain sehingga responden tidak tercatat lagi dalam selang periode penelitian.

Dari ke-9 data penelitian ini, selanjutnya kita coba tabulasikan menjadi life table survival sebagai berikut:

Membangun life table survival

Setidaknya terdapat dua penekanan dalam pembentukan life table survival. Pertama, life table hanya mengakomodir waktu-waktu dengan event (e) yang tidak tersensor secara berurutan. Bila terdapat waktu yang berurutan tersensor (e = 0), maka dapat diabaikan, misal waktu T-1 e = 0, T-2 = 0, T-3 e = 1, maka langsung saja buat life table dari T-3. Kedua, bila kondisinya T-1 e = 1, T-2 = 0, T-3 e = 1, maka life table dimulai dari T-1 tetapi T-2 kendati tersensor, ia tetap diperhitungkan karena berkaitan dengan jumlah responden berisiko dalam life table survival.

Setelah life table survival terbentuk, berikutnya adalah kita akan membuat grafik Kaplan-Meiernya. Dalam visualisasi grafis Kaplan-Meier, titik mulainya dari peluang survival 100 persen atau 1. Kemudian menurun seperti fungsi tangga sampai batas akhir penelitian. Adapun grafik Kaplan-Meier kasus di atas dapat kita visualisasikan berikut:

Grafik Kaplan-Meier

Itu tadi sekilas mengenai bagaimana kita melakukan survival analysis paling sederhana dengan menggunakan penghitungan manual. Kita akan coba melanjutkan dengan penerapan survival analysis dengan menggunakan R. Untuk praktik survival analysis kali ini, kita akan mengangkat topik mengenai ketahanan seseorang terhadap penyakit kanker darah atau yang biasa kita sebut sebagai leukemia. Leukemia ini kalau ingat ingat pengertian secara medis merupakan kondisi seseorang yang mengalami gangguan akibat produksi sel darah putihnya terlalu berlebih dan biasa terjadi dalam tulang sumsum. Selain terjadi pada orang dewasa, penyakit ini juga kerapkali ditemukan pada anak-anak. Saking berbahayanya, orang yang mengidap penyakit ini memiliki umur yang tidak panjang.

Dalam praktik kali ini, kita akan mencoba memodelkan survival dalam bentuk sederhana mirip dengan pendahuluan kita di atas tadi dan model survival dengan menggunakan 1 kovariat. Untuk itu, teman-teman perlu mengunduh datanya pada tautan berikut. Setelah datanya diunduh, pemodelan survival analysis dapat menggunakan beberapa code berikut:

Code:

#Instal dan aktivasi package
install.packages("survival")
library(survival)

#Import Data Leukimia
library(readxl)
leukimia <- read_excel("E:/R/Survival Analysis/leukimia.xlsx")

#Mengattach data
attach(leukimia)

#melihat Variabel dalam Data
names(leukimia)

Hasil:

# A tibble: 42 x 5
   Pasien waktu sensor   TRT   WBC
    <dbl> <dbl>  <dbl> <dbl> <dbl>
 1      1     6      1     1     1
 2      2     6      1     1     2
 3      3     6      1     1     2
 4      4     7      1     1     2
 5      5    10      1     1     2
 6      6    13      1     1     2
 7      7    16      1     1     2
 8      8    22      1     1     1
 9      9    23      1     1     2
10     10     6      0     1     2
# ... with 32 more rows

[1] "Pasien" "waktu"  "sensor" "TRT"    "WBC"

Code:

#angka 1 itu kalau tidak ada covariat atau variabel X
km.model1 <- survfit(Surv(waktu, sensor) ~ 1, data = leukimia, type = "kaplan-meier")

#Melihat ringkasan model
summary(km.model1)

Hasil:

Call: survfit(formula = Surv(waktu, sensor) ~ 1, data = leukimia, type = "kaplan-meier")

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    1     42       2    0.952  0.0329       0.8901        1.000
    2     40       2    0.905  0.0453       0.8202        0.998
    3     38       1    0.881  0.0500       0.7883        0.985
    4     37       2    0.833  0.0575       0.7279        0.954
    5     35       2    0.786  0.0633       0.6709        0.920
    6     33       3    0.714  0.0697       0.5899        0.865
    7     29       1    0.690  0.0715       0.5628        0.845
    8     28       4    0.591  0.0764       0.4588        0.762
   10     23       1    0.565  0.0773       0.4325        0.739
   11     21       2    0.512  0.0788       0.3783        0.692
   12     18       2    0.455  0.0796       0.3227        0.641
   13     16       1    0.426  0.0795       0.2958        0.615
   15     15       1    0.398  0.0791       0.2694        0.588
   16     14       1    0.369  0.0784       0.2437        0.560
   17     13       1    0.341  0.0774       0.2186        0.532
   22      9       2    0.265  0.0765       0.1507        0.467
   23      7       2    0.189  0.0710       0.0909        0.395

Code:

#Plot model tanpa covariat
plot(km.model1, conf.int = F, xlab = "waktu (t)", ylab = "%Hidup = S(t)", las = 1,
     col = "blue", mark.time = T, main = "Survival Analysis Sederhana")
abline(h = 0.5, col = "red")

Hasil:

Survival Analysis tanpa kovariat

Code:

#Data leukimia dengan 1 covariat TRT
#Covariat TRT (1, 0) yang menggambarkan ada 2 grup, yaitu grup 1 dan 0
#sensor 0 berarti tidak ada kejadian kematian selama penelitian dilakukan (sensoring)
km.model2 <- survfit(Surv(waktu, sensor) ~ TRT, type = "kaplan-meier")

#Ringkasan model dengan 1 covariat TRT
summary(km.model2)

Hasil:

Call: survfit(formula = Surv(waktu, sensor) ~ TRT, type = "kaplan-meier")

                TRT=0
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    1     21       2   0.9048  0.0641      0.78754        1.000
    2     19       2   0.8095  0.0857      0.65785        0.996
    3     17       1   0.7619  0.0929      0.59988        0.968
    4     16       2   0.6667  0.1029      0.49268        0.902
    5     14       2   0.5714  0.1080      0.39455        0.828
    8     12       4   0.3810  0.1060      0.22085        0.657
   11      8       2   0.2857  0.0986      0.14529        0.562
   12      6       2   0.1905  0.0857      0.07887        0.460
   15      4       1   0.1429  0.0764      0.05011        0.407
   17      3       1   0.0952  0.0641      0.02549        0.356
   22      2       1   0.0476  0.0465      0.00703        0.322
   23      1       1   0.0000     NaN           NA           NA

                TRT=1
 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    6     21       3    0.857  0.0764        0.720        1.000
    7     17       1    0.807  0.0869        0.653        0.996
   10     15       1    0.753  0.0963        0.586        0.968
   13     12       1    0.690  0.1068        0.510        0.935
   16     11       1    0.627  0.1141        0.439        0.896
   22      7       1    0.538  0.1282        0.337        0.858
   23      6       1    0.448  0.1346        0.249        0.807

Code:

#Uji signifikansi dengan perlakuan dan tanpa perlakuan
#H0 tidak terdapat berbedaan fungsi survival antara dengan perlakuan dan tanpa perlakuan
#Jika alpha < 0,05 tolak H0
survdiff(Surv(waktu, sensor) ~ TRT)

Hasil:

Call:
survdiff(formula = Surv(waktu, sensor) ~ TRT)

       N Observed Expected (O-E)^2/E (O-E)^2/V
TRT=0 21       21     10.7      9.77      16.8
TRT=1 21        9     19.3      5.46      16.8

 Chisq= 16.8  on 1 degrees of freedom, p= 4e-05

Terlihat bahwa dengan perlakuan menunjukkan efek positif signifikan karena mampu menambah atau memperpanjang waktu bertahan hidup seorang pengidap leukemia

Code:

#plot model dengan covariat
plot(km.model2, conf.int = F, xlab = "waktu (t)", ylab = "%Hidup = S(t)", las = 1,
     col = c("red","blue"), mark.time = T, main = "Survival Analysis 1 Kovariat")
abline(h = 0.5, col = "green")
text(0,0.55, c("Median"))
legend(29,1, legend = c("tanpa perlakuan", "dengan perlakuan"),
       lwd = 1, lty = 2, col = c("red", "blue"), cex = 0.6)

Hasil:

Survival Analysis dengan 1 kovariat

Demikian sekilas pembahasan dan praktikum survival analysis menggunakan R. Nantikan unggahan berikutnya dan selamat memahami dan mempraktikkan!

Komentar

Postingan populer dari blog ini

Pemodelan Autoregressive Integrated Moving Average (ARIMA Model) dengan R

ARIMA dengan R Jumpa lagi teman-teman, sebelumnya saya mohon maaf karena kemarin tidak sempat membuat unggahan terbaru di blog ini. Baik, sebelumnya kita telah mengulas tentang pemodelan Geographically Weigthed Regression (GWR) dengan R. Kali ini, kita akan melanjutkan belajar bersama mengenai pemodelan yang tak asing lagi dan populer hingga kini, yaitu pemodelan Autoregressive Integrated Moving Average (ARIMA). Kita akan membahas ARIMA secara langsung tanpa membahas AR dan MA secara tersendiri mengingat pada dasarnya ARIMA adalah model perpaduan antara model AR dengan order p , MA dengan order q dan aspek differencing dengan order d . Artinya, ketika kita mendengar istilah AR(1), maka sebenarnya itu adalah ARIMA(1, 0, 0), ketika kita mendengar ARI(1,1), maka aslinya itu ARIMA(1, 1, 0), atau bila mendengar MA(3), itu sebenarnya ARIMA(0, 0, 3) atau IMA(2,1) sebenarnya adalah ARIMA(0, 2, 1). Data runtun waktu atau time series merupakan salah satu jenis data yang hingga kini banyak digun

Machine Learning: Memahami Reinforcement Learning

Reinforcement Learning Halo teman-teman, pada pembahasan sebelumnya, kita telah berusaha memahami mengenai supervised learning dan unsupervised learning . Sebelum lanjut ke pemodelan statistik selanjutnya, ada baiknya kita membahas tentang satu lagi jenis algoritma machine learning yang akhir-akhir ini banyak digunakan dalam membentuk artificial intelligence (AI), yaitu algoritma reinforcement learning . Kita ke pengertian berdasarkan studi literatur daring ( online ) dulu teman-teman. Saya coba mengambil salah satu pengertian reinforcement learning, misalkan dari situsnya Algoritma, menyatakan bahwa reinforcement learning merupakan algoritma yang diterapkan untuk pembelajaran mesin ( machine learning ) sedemikian rupa sehingga dapat menentukan aksi yang tepat dan pada akhirnya sebuah program dapat bekerja secara otomatis memberikan hasil atau putusan yang benar. Lebih lanjut dalam situs algoritma mengangkat sebuah perumpamaan reinforcement learning dengan menggunakan proses penugasan

Machine Learning: Perbedaan Supervised Learning dan Unsupervised Learning

Perbedaan supervised learning dan unsupervised learning Halo teman-teman, kemarin kita telah mengawali bahasan mengenai salah satu anggota dari Machine Learning sekaligus merupakan contoh dari algoritma supervised learning , yaitu Naive Bayes Classifier (NBC). Akhir-akhir ini, dunia sains data dihebohkan dengan berbagai istilah statistik yang berkaitan erat dengan komputasi atau komputasi statistik, yaitu supervised learning dan unsupervised learning . Sebenarnya ada lagi istilah baru dan cukup makin sulit menyederhanakan definisinya, yaitu reinforcement learning , tapi khusus reinforcement learning nanti akan kita bahas tersendiri karena kita mulai bersinggungan dengan Artificial Intelligence atau kecerdasan buatan. Jujur, saya mengakui bahwa tidak semua dari kita memiliki latar belakang apalagi pakar teknologi informasi (IT). Sehingga, bila kita cermati bahasan-bahasan atau istilah komputasi statistik, sains data, atau data engineering , kita mungkin akan sejenak loading , bahkan s