Kata Pengantar Puji dan syukur diucapkan kepada Allah SWT atas selesainya ebook sederhana yang berjudul Pengenalan Bahasa Pemrograman R. Ebook ini dibuat sebagai rangkuman dan catatan untuk menjawab pertanyaan-pertanyaan saya tentang bahasa pemrograman R dan juga implementasi kasus-kasus statistik pada lingkungan R. Sehingga pada ebook ini akan dipaparkan konsep-konsep dasar tentang bahasa pemrograman R, pembahasan sederhana tentang statistik serta contoh-contoh kasus dari setiap pembahasan tersebut yang dapat langsung dicoba oleh pembaca. Harapannya hal ini akan membantu pembaca yang memiliki pertanyaan yang sama seperti yang seperti saya untuk mendapatkan jawabannya pada ebook ini. Akhir kata, selamat membaca dan semoga ebook ini bermanfaat bagi para pemula dalam pengolahan data statistik dan machine learning. Kritik dan saran akan sangat berarti dan dapat ditujukan via email.
Banjarmasin, April 2016
M Reza Faisal (reza.faisal@gmail)
I
Daftar Isi Kata Pengantar ............................................................................................... I Daftar Isi ........................................................................................................ II Daftar Gambar ............................................................................................ VII 1 Pendahuluan ...............................................................................................12 Pengantar R ...................................................................................................... 12 Installasi ............................................................................................................ 12 Setup Environment Variable MS Windows .............................................. 12 Hello World ...................................................................................................... 14 R Environment ................................................................................................. 16 RStudio vs RGui .............................................................................................. 19 Referensi ........................................................................................................... 20
2 Fungsi & Operator Dasar .........................................................................21 Sintaks ............................................................................................................... 21 Operator ............................................................................................................ 22 Bantuan ............................................................................................................. 23 Working Directory .......................................................................................... 25 Memanggil Fungsi Terdahulu ...................................................................... 28 Mengelola Session .......................................................................................... 28 Memuat File ..................................................................................................... 29 Menyimpan Output ke File ........................................................................... 30 Daftar Fungsi ................................................................................................... 31 Package .............................................................................................................. 32 Lokasi Library..........................................................................................................32 Daftar Library ..........................................................................................................32 Install Package .........................................................................................................33
Setting Opsi Lingkungan .............................................................................. 33 Keluar dari Lingkungan R ............................................................................. 34
3 Dasar-Dasar Pemrograman .....................................................................35 Variable ............................................................................................................. 35 Tipe Data........................................................................................................... 35 II
Skalar ........................................................................................................................36 Vector ........................................................................................................................36 Factor ........................................................................................................................38 Matrix .......................................................................................................................39 Array .........................................................................................................................43 Data Frame ...............................................................................................................44 List .............................................................................................................................46 Fungsi Pendukung ..................................................................................................47
Percabangan ..................................................................................................... 51 Operator ...................................................................................................................51 Statement if ..............................................................................................................51 Statement ifelse........................................................................................................53 Statement switch .....................................................................................................54
Pengulangan ..................................................................................................... 54 Statement for ............................................................................................................55 Statement while .......................................................................................................56 Statement repeat ......................................................................................................57
Function ............................................................................................................ 58 Membuat Fungsi .....................................................................................................58 Menjalankan Fungsi pada RStudio.......................................................................59
Komentar .......................................................................................................... 60 Eksekusi Script R ............................................................................................ 61 Referensi ........................................................................................................... 62
4 Pemrograman Berbasis Obyek ................................................................63 Class ................................................................................................................... 63 Obyek ................................................................................................................ 64 Inheritance ........................................................................................................ 64 Method & Fungsi Generic ............................................................................. 65
5 Dasar-Dasar Pengelolaan Data ..............................................................67 Import Data ...................................................................................................... 67 Text File ....................................................................................................................67 Excel ..........................................................................................................................70 Fungsi Built-in Import Data...................................................................................76 Format Data Populer ..............................................................................................76 III
Melihat Data..................................................................................................... 78 ls() ..............................................................................................................................78 name() .......................................................................................................................79 str() ............................................................................................................................79 head() ........................................................................................................................80 tail() ...........................................................................................................................80
Export Data ....................................................................................................... 81 Teks dengan pemisah tab.......................................................................................81 Excel ..........................................................................................................................81 SPSS...........................................................................................................................82
Referensi ........................................................................................................... 82
6 Dasar-Dasar Pembuatan Grafik .............................................................83 Dasar Membuat Grafik .................................................................................. 83 plot()..........................................................................................................................83 title() ..........................................................................................................................83 text() ..........................................................................................................................84 dev.list() ....................................................................................................................88 dev.off() ....................................................................................................................88
Histogram ......................................................................................................... 88 Density .............................................................................................................. 90 Dot Plot ............................................................................................................. 91 Bar Plot .............................................................................................................. 92 Line Plot ............................................................................................................ 95 Pie Plot............................................................................................................... 97 Box Plot ............................................................................................................. 98 Scatter Plot ...................................................................................................... 100 Export Gambar ............................................................................................... 101 Referensi ......................................................................................................... 104
7 Dasar-Dasar Statistik ............................................................................105 Mean, Median & Modus .............................................................................. 105 Mean .......................................................................................................................105 Median ....................................................................................................................105 Modus .....................................................................................................................106 Hubungan Antara Mean, Median & Modus .....................................................106 IV
Linear Regression .......................................................................................... 109 Pendahuluan ..........................................................................................................109 Implementasi .........................................................................................................110 Visualisasi ..............................................................................................................111
Multiple Regression ..................................................................................... 113 Pendahuluan ..........................................................................................................113 Implementasi .........................................................................................................114
Logistic Regression ....................................................................................... 115 Pendahuluan ..........................................................................................................115 Implementasi .........................................................................................................116
Normal Distribution ..................................................................................... 117 Pendahuluan ..........................................................................................................117 Implementasi .........................................................................................................119 Contoh Kasus.........................................................................................................123
Binomial Distribution .................................................................................. 124 Pendahuluan ..........................................................................................................124 Implementasi .........................................................................................................124
Poisson Regression ....................................................................................... 126 Pendahuluan ..........................................................................................................126 Implementasi .........................................................................................................127
Analysis of Covariance................................................................................. 129 Pendahuluan ..........................................................................................................129 Implementasi .........................................................................................................129
Time Series Analysis .................................................................................... 131 Pendahuluan ..........................................................................................................131 Implementasi .........................................................................................................131 Contoh Kasus.........................................................................................................132
Nonlinear Least Square ................................................................................ 142 Pendahuluan ..........................................................................................................142 Implementasi .........................................................................................................142
Referensi ......................................................................................................... 144
8 Glosarium .................................................................................................146 Standard Deviation ....................................................................................... 146 Standard Error ................................................................................................ 146 V
p Value ............................................................................................................ 146
9 Penutup......................................................................................................147
VI
Daftar Gambar Gambar 1. Window System................................................................................................................ 13 Gambar 2. Window System Properties............................................................................................. 13 Gambar 3. Window Environment Variables. ................................................................................... 13 Gambar 4. Window Edit System Variable. ...................................................................................... 14 Gambar 5. RGui. .................................................................................................................................. 14 Gambar 6. Hello World pada command prompt. ........................................................................... 15 Gambar 7. HelloWorld.R. ................................................................................................................... 16 Gambar 8. Fitur edit data.................................................................................................................... 16 Gambar 9. Memilih lokasi untuk mengunduh paket. .................................................................... 17 Gambar 10. Daftar paket. .................................................................................................................... 18 Gambar 11. Status pemasangan paket. ............................................................................................. 18 Gambar 12. Fungsi install.packages() untuk menginstall package yang diinginkan. ................ 19 Gambar 13. RStudio. ........................................................................................................................... 19 Gambar 14. Penulisan dua fungsi sekaligus pada lingkungan R. ................................................ 22 Gambar 15. Contoh-contoh operator. ............................................................................................... 22 Gambar 16. Operator = dan tanda panah. ........................................................................................ 23 Gambar 17. Halaman utama bantuan/manual penggunaan. ........................................................ 23 Gambar 18. Bantuan untuk perintah ls(). ......................................................................................... 24 Gambar 19. Bantuan untuk fungsi help(). ........................................................................................ 25 Gambar 20. Hasil perintah setwd() dan getwd(). ............................................................................ 26 Gambar 21. Tab file pada RStudio..................................................................................................... 26 Gambar 22. Memilih direktori. .......................................................................................................... 26 Gambar 23. Perintah Set As Working Directory. ............................................................................ 26 Gambar 24. Window Create Project. ................................................................................................. 27 Gambar 25. Memilih direktori. .......................................................................................................... 27 Gambar 26. Project baru. .................................................................................................................... 28 Gambar 27. Objek data dan value pada session. ............................................................................. 29 Gambar 28. Daftar file pada working directory. ............................................................................. 30 Gambar 29. Source code HelloWorld.R. ........................................................................................... 30 Gambar 30. Daftar fungsi pada tab Environtment. ......................................................................... 30 Gambar 31. File output.txt. ................................................................................................................. 31 Gambar 32. Daftar package atau library pada path pertama. ....................................................... 32
VII
Gambar 33. Daftar package atau library pada path kedua. ........................................................... 33 Gambar 34. Prompt. ............................................................................................................................ 34 Gambar 35. Hasil penggantian parameter dengan fungsi option(). ............................................. 34 Gambar 36. Penggunaan variable. .................................................................................................... 35 Gambar 37. Variable vector. ............................................................................................................... 36 Gambar 38. Cara mengakses elemen vector vec_number.............................................................. 37 Gambar 39. Hasil akses elemen vector vec_char. ............................................................................ 37 Gambar 40. Memodifikasi nilai pada elemen vector. ..................................................................... 38 Gambar 41. Hasil penggunaan fungsi factor() dan summary(). ................................................... 38 Gambar 42. Mengubah nilai elemen pada factor. ........................................................................... 39 Gambar 43. Contoh pembuatan matrix sederhana. ........................................................................ 40 Gambar 44. Output matrix z. ............................................................................................................. 41 Gambar 45. Mengakses beberapa elemen matrix. ........................................................................... 42 Gambar 46. Mengubah nilai elemen matrix. .................................................................................... 42 Gambar 47. Array berdimesi 3x3x3. .................................................................................................. 43 Gambar 48. Array tiga_d_array. ........................................................................................................ 44 Gambar 49. Data pada data_frame. ................................................................................................... 45 Gambar 50. Tampilan data_frame secara visual pada RStudio. ................................................... 45 Gambar 51. Output variable bentukan fungsi list(). ....................................................................... 46 Gambar 52. Cara mengakses list dan outputnya. ........................................................................... 47 Gambar 53. Hasil fungsi dim(). .......................................................................................................... 47 Gambar 54. Hasil dari fungsi class(). ................................................................................................ 48 Gambar 55. Output fungsi length(). .................................................................................................. 48 Gambar 56. Output fungsi names(). .................................................................................................. 49 Gambar 57. Window Data Editor. ..................................................................................................... 49 Gambar 58. Menambah kolom dengan nama d. ............................................................................. 50 Gambar 59. Menambahkan data pada kolom d. ............................................................................. 50 Gambar 60. Data pada objek data_frame_baru. .............................................................................. 50 Gambar 61. Mengedit data pada objek dengan fungsi fix(). ......................................................... 51 Gambar 62. Hasil fungsi HitungNilai(). ........................................................................................... 53 Gambar 63. Contoh penggunaan ifelse. ........................................................................................... 54 Gambar 64. Output statement for...................................................................................................... 55 Gambar 65. Pengulangan vector dengan for(). ................................................................................ 56 Gambar 66. Output statement while. ................................................................................................ 56 Gambar 67. Pengulanan while() untuk mengakses data vector. ................................................... 57 VIII
Gambar 68. Output pengulangan dengan repeat. .......................................................................... 58 Gambar 69. Eksekusi script *.R pada RStudio. ................................................................................ 60 Gambar 70. Menjalankan script R dengan RScript.exe. ................................................................. 61 Gambar 71. Isi data pada objek bab4_data_text. ............................................................................. 68 Gambar 72. Isi data objek bab4_data_text hasil import dari file Bab4DataText02.txt. ............... 68 Gambar 73. Header data pada objek bab4_data_text. .................................................................... 69 Gambar 74. Output fungsi read.csv() dan read.csv2().................................................................... 70 Gambar 75. Window Install Packages. ............................................................................................. 71 Gambar 76. Proses pengunduhan paket xlsx. .................................................................................. 71 Gambar 77. Proses pengunduhan dan installasi paket telah berhasil. ......................................... 72 Gambar 78. Memuat paket xlsx dengan menggunakan fungsi library(). .................................... 72 Gambar 79. Data dari file Excel – Bab4DataExcel.xlsx. .................................................................. 73 Gambar 80. Hasil import data dari file Excel. .................................................................................. 74 Gambar 81. Data Excel dengan header – Bab4DataExcel.xlsx. ...................................................... 75 Gambar 82. Output objek bab4_data_excel yang menampung data dari file Excel. .................. 75 Gambar 83. Antarmuka tool Amelia. ................................................................................................ 78 Gambar 84. Daftar objek yang aktif pada workspace. .................................................................... 78 Gambar 85. Daftar objek pada tab Environment pada RStudio. ................................................... 79 Gambar 86. Output penggunaan fungsi names(). ........................................................................... 79 Gambar 87. Output penggunaan fungsi str()................................................................................... 80 Gambar 88. Output fungsi head(). .................................................................................................... 80 Gambar 89. Output fungsi tail(). ....................................................................................................... 81 Gambar 90. Gambar yang dihasilkan oleh fungsi plot(). ............................................................... 83 Gambar 91. Memberikan judul pada grafik dengan fungsi title(). ............................................... 84 Gambar 92. Memuat data dari file usingR.RData. .......................................................................... 84 Gambar 93. Grafik data primates. ..................................................................................................... 86 Gambar 94. Memberikan title dan text pada titik-titik. .................................................................. 87 Gambar 95. Setting grafik dengan menggunakan parameter tambahan pada fungsi plot(). ... 87 Gambar 96. Memuat isi file Bab4DataPasien.txt ke data_pasien. ................................................. 88 Gambar 97. Histogram data_pasien$AGE. ...................................................................................... 89 Gambar 98. Histogram dengan title dan label. ................................................................................ 90 Gambar 99. Grafik density data_pasien$AGE. ................................................................................ 90 Gambar 100. Data pada mtcars. ......................................................................................................... 91 Gambar 101. Chart dengan fungsi dotchart(). ................................................................................. 92 Gambar 102. Chart bar distribusi mobil. .......................................................................................... 93 IX
Gambar 103. Chart bar ditampilkan secara horizontal. ................................................................. 93 Gambar 104. Chart bar horizontal dengan label. ............................................................................ 94 Gambar 105. Chart stack bar. ............................................................................................................. 94 Gambar 106. Chart bar group. ........................................................................................................... 95 Gambar 107. Chart line dengan berbagai nilai parameter type. ................................................... 96 Gambar 108. Chart line tanpa menggunakan parameter type=”n” pada fungsi plot(). ............ 97 Gambar 109. Chart pie. ....................................................................................................................... 98 Gambar 110. Data jarak tempuh. ....................................................................................................... 99 Gambar 111. Chart boxplot data jarak tempuh. .............................................................................. 99 Gambar 112. Keterangan box pada boxplot. .................................................................................. 100 Gambar 113. Contoh hasil plot scatter. ........................................................................................... 101 Gambar 114. Halaman pertama file kumpulan_chart.pdf. .......................................................... 102 Gambar 115. Halaman kedua file kumpulan_chart.pdf. .............................................................. 103 Gambar 116. Halaman ketiga file kumpulan_chart.pdf. .............................................................. 103 Gambar 117. Distribusi data ketika nilai mean, median dan modus adalah sama. ................. 107 Gambar 118. Distribusi data jika mean lebih kecil daripada median dan modus. ................... 108 Gambar 119. Distribusi data jika mean lebih besar daripada median dan modus. .................. 108 Gambar 120. Plot linear regression tinggi dan berat. ................................................................... 109 Gambar 121. Plot data tinggi dan berat. ......................................................................................... 112 Gambar 122. Garis model linear regression. .................................................................................. 112 Gambar 123. Prediksi data baru tinggi 170 cm. ............................................................................. 113 Gambar 124. Prediksi data baru tinggi 185 cm. ............................................................................. 113 Gambar 125. Kurva density ketika nilai mean, median dan modus adalah sama. .................. 118 Gambar 126. Kurva distribusi normal. ........................................................................................... 118 Gambar 127. Luar di bawah kurva sesuai panjang deviasi standar. .......................................... 119 Gambar 128. Grafik plot dengan menggunakan fungsi dnorm(). .............................................. 120 Gambar 129. Grafik plot fungsi dnorm() dengan nilai mean = 0. ............................................... 120 Gambar 130. Grafik plot dengan menggunakan fungsi pnorm(). .............................................. 121 Gambar 131. Grafik plot dengan fungsi qnorm(). ......................................................................... 122 Gambar 132. Grafik histogram dengan data dari hasil fungsi rnorm()...................................... 122 Gambar 133. dua kemungkinan keluaran saat melempar uang koin. ....................................... 124 Gambar 134. Grafik plot dengan menggunakan fungsi dbinom(). ............................................ 125 Gambar 135. Data curah_hujan_timeseries. ................................................................................... 131 Gambar 136. Plot curah hujan. ......................................................................................................... 132 Gambar 137. Data deret waktu kelahiran di kota New York. ..................................................... 133 X
Gambar 138. Plot kelahiran di kota New York. ............................................................................. 133 Gambar 139. Data komponen seasonal pada deret waktu kelahiran di kota New York. ........ 134 Gambar 140. Data komponen trend pada deret waktu kelahiran di kota New York. ............. 134 Gambar 141. Plot komponen-komponen data deret waktu. ....................................................... 135 Gambar 142. Grafik plot CO2. ......................................................................................................... 136 Gambar 143. Plot data CO2 dan data hasil prediksi. .................................................................... 138 Gambar 144. Plot nilai-nilai komponen pada data CO2. ............................................................. 138 Gambar 145. Grafik plot data AirPassengers. ................................................................................ 139 Gambar 146. Grafik plot data aktual dan prediksi penumpang pesawat. ................................. 141 Gambar 147. Plot grafik komponen-komponen pada model_penumpang. .............................. 141 Gambar 148. Plot data x dan y. ........................................................................................................ 143 Gambar 149. Plot dengan data baru. ............................................................................................... 144
XI
1
Pendahuluan Pengantar R R bukan saja bahasa tetapi juga lingkungan/environment untuk komputasi statistik dan grafik. R merupakan project GNU yang dikembangkan oleh Bell Laboratories (sebelumnya AT&T, sekarang Lucent Technologies) oleh John Chamber dan teman-temannya.
R menyediakan berbagai macam tool statistik dari linier dan memodelan non linier, uji statistik klasik, analisis time-series, klasifikasi, clustering dan lain-lain. R juga menyediakan tool teknik grafis yang bertujuan untuk menampilkan data yang telah diolah secara visual dalam bentuk grafik. R merupakan project open-source yang memungkinkan banyak pihak untuk memberikan kontribusi dalam proses pengembangan.
Installasi Installer atau source code R tersedia dalam beberapa platform yaitu Windows, Mac OS X dan Linux. Pada ebook ini digunakan installer yang diunduh dari link berikut ini https://cran.rstudio.com/. Saat ebook ini ditulis versi R adalah 3.2.3 yang release pada tanggal 10 Desember 2015, versi ini mempunyai kode Wooden Chrismas-Tree. Nama file installer yang digunakan adalah R3.2.2-win.exe. Proses installasi sangat mudah seperti proses installer pada platform Windows pada umumnya.
Setup Environment Variable MS Windows Setelah proses installasi maka file-file hasil installasi akan disimpan pada folder C:\Program Files\R\. Jika nanti ada keperluan untuk menjalankan script *.R pada command line maka harus dilakukan setup environment agar R.exe atau Rscript.exe dapat dijalankan tanpa harus mengetikan lokasi file secara lengkap. Berikut ini adalah langkah-langkah yang harus dilakukan untuk melakukan setup environment variable pada MS Windows. Pertama jalankan Windows Explorer kemudian pada My Computer atau This PC klik kanan dan pilih Properties. Pada jendela System pilih Advanced system settings.
12
Gambar 1. Window System. Kemudian pada window System Properties klik tombol Environment Variables.
Gambar 2. Window System Properties. Kemudian pada window Environment Variables pilih Path pada kolom System variables dan klik tombol Edit.
Gambar 3. Window Environment Variables.
13
Kemudian pada window Edit System Variable dapat ditambahkan baris berikut ini.
Gambar 4. Window Edit System Variable. Kemudian klik tombol OK.
Hello World Setelah proses installasi selesai dilakukan. Maka saatnya untuk menjalankan RGui untuk pertama kali. Berikut ini adalah antarmuka yang dapat dilihat.
Gambar 5. RGui. Saat belajar bahasa pemrograman baru maka hal pertama yang dilakukan adalah membuat program sederhana yaitu Hello World. Untuk menampilkan kalimat Hello World dapat dilakukan beberapa cara, yang pertama adalah menulis baris berikut ini pada command prompt yang terlihat pada gambar. sprintf("R says Hello World")
Maka hasilnya dapat dilihat pada gambar di bawah ini.
14
Gambar 6. Hello World pada command prompt.
Cara yang kedua adalah membuat file HelloWorld.R denga nisi seperti berikut ini. HelloWorld.R HelloWorld <- function( name ) { sprintf( "Hello world from , %s", name ); }
Kemudian tentukan direktori kerja ke lokasi file tersebut disimpan. Dengan sintaks perintah seperti berikut ini. setwd(direktori)
Kemudian panggil file tersebut dengan perintah berikut ini. source(nama_file)
Selanjutnya panggil nama fungsi yang terdapat pada file tersebut. HelloWorld(“R”)
Pada gambar di bawah ini dapat dilihat hasil dari setiap perintah yang telah disebutkan di atas.
15
Gambar 7. HelloWorld.R.
R Environment Dari paparan di atas dapat dilihat bahwa R bukan hanya sebagi bahasa pemrograman saja, tetapi juga merupakan lingkungan atau environment yang dapat digunakan sebagai tool menulis perintah atau mengeksekusi program yang ditulis dengan bahasa R. Sebagai lingkungan atau environment yang terintegrasi, R juga memiliki fitur-fitur lain yang sangat membantu. Sebagai contoh fitur untuk melihat dan mengedit data seperti yang terlihat pada gambar di bawah ini.
Gambar 8. Fitur edit data.
16
Fitur lain adalah integrasi untuk mengakses paket bantuan pengolahan data.
Gambar 9. Memilih lokasi untuk mengunduh paket.
Untuk menggunakan paket yang diinginkan terlebih dahulu dipilih lokasi tempat paket tersebut disimpan. Pada gambar di atas dipilih lokasi di Japan. Setelah lokasi paket dipilih, maka akan ditampilkan daftar paket-paket yang tersedia seperti yang dapat dilihat pada gambar di bawah ini.
17
Gambar 10. Daftar paket. Setelah paket yang diinginkan dipilih maka selanjutnya paket tersebut akan diunduh dan dipasang untuk siap digunakan.
Gambar 11. Status pemasangan paket. Cara lain untuk menginstall package adalah dengan menggunakan fungsi install.packages(). Berikut adalah sintaks dari fungsi ini: install.packages(“nama_paket”)
18
Sebagai contoh jika ingin menginstall paket randomForest untuk melakukan klassifikasi maka dapat diketikan baris berikut ini. install.packages(“randomForest”)
Dan hasil dari fungsi di atas dapat dilihat pada gambar di bawah ini.
Gambar 12. Fungsi install.packages() untuk menginstall package yang diinginkan. Bagi yang telah memiliki pengalaman dengan Matlab, maka paket (package) yang dibahas di atas memiliki kemiripan dengan Toolbox pada Matlab. Package/paket pada R ini memiliki kemampuan spesifik untuk mengolah data. Karena lingkungan R yang bersifat terbuka maka paket ini terus bertambah dan berkembang. Bahkan kita pun dapat terlibat dalam membuat paket sendiri sesuai dengan kebutuhan.
RStudio vs RGui Pada bagian sebelumnya sudah diperlihatkan RGui yang menjadi tool default pada lingkungan R. Selain RGui ada tool lain yang memiliki fitur yang sama dengan beberapa kemudahan lain yang ditawarkan yaitu RStudio.
Gambar 13. RStudio.
19
Ada beberapa kemudahan-kemudahan yang diberikan oleh RStudio, yaitu: 1. 2. 3. 4. 5.
Bantuan code completion yang akan menampilkan daftar perintah saat kita telah mengetik karakter pada command prompt. Integrasi bantuan dalam satu layar, sehingga informasi hasil perintah help() dapat langsung ditampilkan. Tab environment yang menampilkan daftar objek yang dibuat. Tab display Files, Plots, Package yang juga terintegrasi pada satu layar. Penggunakan shortcut untuk posisi cursor masih dapat digunakan pada command prompt. Seperti shortcut tombol keyboard Ctrl dan panah kiri atau kanan untuk pindah cursor per kata.
Pembahasan pada ebook ini selanjutnya akan digunakan RStudio sebagai tool belajar bahasa R.
Referensi https://www.r-project.org/about.html https://dzone.com/articles/learn-r-hello-world-r https://www.rstudio.com/
20
2
Fungsi & Operator Dasar
Pada bagian ini akan diberikan sintaks fungsi- fungsi beserta contoh-contoh penggunaannya. Fungsi-fungsi yang akan dibahas akan digolongkan sesuai dengan pekerjaan yang ingin dilakukan/diselesaikan.
Sintaks Perlu diperhatikan bahwa fungsi atau kode pada lingkungan R adalah case sensitif, artinya penggunaan huruf besar atau kecil akan sangat berpengaruh. Misal jika fungsi adalah setwd() ditulis dengan huruf kecil maka perintah yang ditulis dengan SETWD() atau SetWD() tidak akan dikenali oleh lingkungan R. Hal ini juga berpengaruh pada penulisan sintaks program atau penulisan fungsi. Selain itu biasanya fungsi pada lingkungan R memiliki akhiran (), sebagai contoh: ls() setwd() help()
Tanda () sering kita temui saat pengakses fungsi atau prosedur pada bahasa pemrograman pada umumnya. Seperti layaknya fungsi atau prosedur maka diantara tanda () dapat berisi parameter, seperti contoh berikut ini: help(“ls”) atau help(ls) setwd(“C:/data”) sprintf(“hello world”) read.table(header = TRUE, text = " a b 1 2 3 4 ")
Dari contoh-contoh di atas dapat dilihat bahwa fungsi-fungsi tidak ditulis tanpa tanda baca sebagai akhiran. Tetapi jika ingin menggunakan akhiran untuk satu fungsi maka dapat digunakan tanda ; Berikut ini contoh penggunaan tanda ; pada lingkungan R. ls();
21
sprintf(“kalimat pertama”); sprintf(“kalimat kedua”)
Hasil dari contoh fungsi di atas dapat dilihat pada gambar di bawah ini.
Gambar 14. Penulisan dua fungsi sekaligus pada lingkungan R.
Operator Pada command prompt, pengguna dapat melakukan operasi matematika. Operator adalah salah sarana yang digunakan untuk melakukan operasi matematika. Pada gambar di bawah ini dapat dilihat penggunaan contoh matematika sederhana.
Gambar 15. Contoh-contoh operator. Selain operator matematika seperti contoh di atas, R juga memili operati untuk assignment yaitu = atau tanda panah (<- atau ->). Pada contoh di bawah ini dapat dilihat penggunaan keduanya dan perbedaannya.
22
Gambar 16. Operator = dan tanda panah. Dari contoh di atas fungsi operator = dan tanda panan (<- atau ->) memiliki fungsi yang sama yaitu untuk assign suatu nilai ke variable (misal variabel x, y, z). selain untuk operasi matematika seperti contoh di atas, operator ini juga dapat digunakan untuk menampung nilai keluaran dari suatu fungsi, seperti contoh di bawah ini. HelloWorld <- function( name ) { sprintf( "Hello world from %s ", name ) } SendHello = function( name ) { sprintf( "Send Hello to %s ", name ) }
Pada contoh di atas dapat dilihat operator tersebut juga dapat digunakan untuk assign fungsi ke suatu variable sebagai nama fungsi tersebut.
Bantuan Lingkungan R juga menyediakan bantuan atau manual penggunaan. Untuk mengakses halaman bantuan atau manual tersebut dapat menggunakan fungsi berikut ini. help.start()
Maka akan ditampilkan halaman berikut ini pada tab Help.
Gambar 17. Halaman utama bantuan/manual penggunaan.
23
Dari halaman di atas dapat dilihat terdapat 3 tipe bantuan yaitu: 1.
2.
3.
Manual Pada tipe bantuan ini terdiri atas: a. An Introduction R. b. Writing R Extensions. c. R Data Import/Export. d. The R Language Definition. e. R Installation and Administration. f. R Internals. Reference Pada tipe bantuan ini terdiri atas: a. Packages. b. Search Engine & Keywords. Miscellaneous material Pada bagian ini bantuan yang dapat digunakan adalah: a. Frequently Asked Questions. b. User Manuals.
Selain itu fungsi help() dapat digunakan untuk memberikan bantuan untuk mengetahui penggunaan suatu perintah. Berikut ini adalah contohnya: help(ls)
Fungsi tersebut akan menampilkan informasi tentang fungsi ls() dari deskripsi, sintaks penggunaan dan penjelasan argumen atau parameter masukan pada fungsi tersebut.
Gambar 18. Bantuan untuk perintah ls(). Fungsi lain adalah seperti berikut ini: help(help)
Dan informasi yang ditampilkan seperti pada gambar di bawah ini. 24
Gambar 19. Bantuan untuk fungsi help().
Working Directory Working directory merupakan direktori aktif yang digunakan untuk bekerja saat berada di lingkungan R. Saat berada pada direktori kerja (working directory) maka file-file pada direktori tersebut dapat langsung diakses hanya dengan memanggil nama filenya tanpa perlu menulis lengkap path absolutnya. Berikut ini adalah contoh untuk memuat source kode file *.R. source("C:/Users/faisal/Documents/Data/My Bahasa Pemrograman R/source/HelloWorld.R")
Books/Pemrograman-Pengenalan
Atau fungsi lain untuk memuat data dari file pada suatu direktori. genes = read.table("C:/Users/faisal/Documents/Data/My Books/PemrogramanPengenalan Bahasa Pemrograman R/source/gene_expression.txt")
Pada lingkungan R ada dua fungsi yang dapat digunakan terkait dengan penanganan working direktori. Fungsi pertama adalah untuk mengetahui path working directory yang sedang digunakan. getwd()
Sedangkan untuk menentukan working direktori yang digunakan digunakan fungsi berikut ini: setwd(“C:/Users/faisal/Documents/Data/My Books/Pemrograman-Pengenalan Bahasa Pemrograman R/source”)
25
Gambar 20. Hasil perintah setwd() dan getwd(). Selain dengan fungsi di atas, RStudio telah memberikan fasilitas untuk memilih direktori dan menjadikannya sebagai working directory. Langkah-langkah yang mesti dilakukan adalah dengan memilih icon pada lingkaran merah pada gambar.
Gambar 21. Tab file pada RStudio. Pada window Browse for Folder pilih direktori yang diinginkan kemudian klik tombol OK.
Gambar 22. Memilih direktori. Maka akan ditampilkan daftar file pada direktori tersebut seperti pada gamba di bawah ini.
Gambar 23. Perintah Set As Working Directory.
26
Kemudian pada tombol More pilih Set As Working Directory. Tetapi working directory yang dipilih tersebut hanya bertahan saat itu saja, jika nanti RStudio ditutup dan digunakan lagi maka working directory yang aktif adalah working directory default. Jika ingin memiliki working directory yang dapat digunakan kembali saat membuka ulang RStudio maka dapat dilakukan dengan cara membuat project dengan cara pilih menu File > New Project maka akan ditampilkan window seperti pada gambar di bawah ini.
Gambar 24. Window Create Project. Jika telah memiliki direktory kerja sebelumnya dapat dipilih Existing Directory kemudian pilih direktori yang diinginkan seperti pada window di gambar berikut ini.
Gambar 25. Memilih direktori. Setelah mengklik tombol Create Project maka dilihat tampilan berikut ini.
27
Gambar 26. Project baru. Nama project adalah sesuai dengan nama direktori yang diakses. Nanti jika RStudio ditutup dan dijalankan lagi dilain waktu maka secara default akan diaktifkan project yang terakhir digunakan. Atau dapat juga dengan memilih project yang diinginkan dari menu File > Open Project atau memilih dari daftar project pada menu File > Recent Projects.
Memanggil Fungsi Terdahulu Terkadang fungsi yang telah dituliskan sebelumnya ingin dijalankan lagi, maka daripada harus mengetik fungsi yang sama dari awal maka sebaiknya cukup panggil saja fungsi tersebut. Untuk mengakses fungsi-fungsi history tersebut dapat digunakan tombol panah atas atau panah bawah.
Mengelola Session Jika sedang bekerja dengan data atau value maka objek data atau variable itu akan ada pada session. Secara visual objek tersebut dapat dilihat pada tab Environmen di RStudio.
28
Gambar 27. Objek data dan value pada session. Jika data atau value tersebut sudah tidak digunakan lagi dan ingin dihapus pada session maka dapat digunakan fungsi berikut ini: rm(gene_expression)
Fungsi di atas untuk menghapus data gene_expression, sedangkan untuk menghapus value x digunakan fungsi berikut ini. rm(gene_expression)
Tetapi dapat juga menghapus kedua objek tersebut secara bersamaan dengan perintah ini. rm(gene_expression, x)
Sedangkan jika ingin menghapus seluruh objek yang ada bisa digunakan perintah berikut ini. rm(list=ls())
Memuat File Pada Bab 1 di bagian Hello World telah dapat dilihat penggunaan perintah source(). Fungsi ini berfungsi untuk memuat file yang berisi source code program yang ditulis dengan bahasa R. Sintaks dari fungsi ini adalah: source(“nama_file”)
Sebagai contoh source('~/Data/My Books/Pemrograman-Pengenalan Bahasa Pemrograman R/source/HelloWorld.R')
Cara yang lebih mudah adalah dengan memilihnya langsung dengan cara mengklik double pada file *.R yang diinginkan pada tab Files.
29
Gambar 28. Daftar file pada working directory. Maka akan ditampilkan window yang memuat file *.R yang dipilih seperti pada gambar di bawah ini.
Gambar 29. Source code HelloWorld.R. Klik tombol Source untuk memuat fungsi-fungsi yang terdapat di dalam file tersebut sehingga fungsi tersebut dapat dilihat pada tab Environtment.
Gambar 30. Daftar fungsi pada tab Environtment. Selanjutnya tinggal tuliskan nama fungsi yang diinginkan pada command prompt untuk menjalankan fungsi tersebut.
Menyimpan Output ke File Pada contoh di atas setiap perintah atau fungsi yang dijalankan menampilkan hasilnya di layar. Jika ada kebutuhan untuk menampilkan output untuk disimpan ke dalam file maka R memiliki fungsi yang bisa digunakan untuk kebutuhan tersebut. Berikut adalah langkah-langkah sebagai berikut di bawah ini. Pertama adalah mengeksekusi fungsi di bawah ini. sink("ouput.txt")
Perintah di atas menyatakan bahwa output dari fungsi-fungsi R yang akan dijalankan setelahnya akan disimpan pada file output.txt. Kemudian sebagai contoh dijalankan fungsi sebagai berikut: 30
sprintf("kalimat 1") sprintf("kalimat 2") sprintf("kalimat 3")
Dan terakhir ketikkan fungsi berikut ini. sink()
Setelah fungsi di atas dijalankan maka proses penulisan ke file output.txt akan berhenti. Dan ketika fungsi-fungsi lain dieksekusi maka output dari setiap fungsi tidak akan disimpan ke file output.txt lagi. Jika ingin melihat isi dari file output.txt dapat dilihat dengan memilihnya pada tab Files seperti yang terlihat pada gambar di bawah ini.
Gambar 31. File output.txt. Berikut ini adalah isi dari file output.txt. [1] "kalimat 1" [1] "kalimat 2" [1] "kalimat 3"
Daftar Fungsi Fungsi yang dapat digunakan untuk melihat fungsi-fungsi yang terdapat pada lingkungan R adalah sebagai berikut: builtins()
Hasilnya adalah seperti berikut ini. [1] "zapsmall" [4] "xtfrm.POSIXlt" [7] "xtfrm.factor" ... [1303] "!=" [1306] "!" [1309] "-"
"xzfile" "xtfrm.POSIXct" "xtfrm.difftime" "!.octmode" "-.POSIXt"
"xtfrm.Surv" "xtfrm.numeric_version" "xtfrm.default" "!.hexmode" "-.Date"
31
Package Pada bagian ini akan diterangkan fungsi-fungsi yang berguna untuk mengelola package pada lingkungan R. Package yang telah diinstall pada lingkungan R juga dikenal dengan istilah library.
Lokasi Library Untuk mengetahui lokasi penyimpanan library maka dapat digunakan perintah berikut ini. .libPaths()
Hasil dari fungsi di atas adalah sebagai berikut, output ini mungkin akan berbeda. [1] "C:/Users/faisal/Documents/R/win-library/3.2" "C:/Program Files/R/R3.2.3/library"
Daftar Library Untuk melihat daftar library yang telah terpasang pada lingkurangan R dapat menggunakan fungsi berikut ini. library()
Hasil dari fungsi tersebut akan dapat dilihat pada tab R packages available yang akan ditampilkan di atas area console. Karena pada contoh di atas terdapat dua lokasi penyimpanan library, maka daftar library juga ditampilkan berdasarkan kelompok lokasi tersebut.
Gambar 32. Daftar package atau library pada path pertama.
32
Gambar 33. Daftar package atau library pada path kedua.
Install Package Untuk menginstall package dapat dilakukan dengan dua cara yaitu dengan menggunakan fungsi yang sudah disediakan pada interface RGui atau RStudio. Yang kedua dengan cara mengetikkan fungsi install.packages() pada console dengan sintaks berikut ini. install.packages("Package Name")
Jika ternyata paket yang ingin digunakan terdapat pada GitHub maka dapat diguakan library devtools untuk menggunakan fungsi install_github(). Selain itu juga terdapat fungsi jika ingin menginstall paket dari lingkungan repositori yang lain seperti SVN dan lain-lain.
Setting Opsi Lingkungan Untuk mengetahui parameter-paremeter opsi yang digunakan pada lingkungan R di komputer pengguna dapat digunakan fungsi berikut ini. options()
Berikut ini adalah sebagian output dari fungsi ini. $add.smooth [1] TRUE … $CBoundsCheck [1] FALSE $check.bounds [1] FALSE $citation.bibtex.max [1] 1 $continue [1] "+ " … $prompt [1] "> " … $warn [1] 0
33
$warning.length [1] 1000 $width [1] 124 $windowsTimeouts [1] 100 500
Pada output di atas dapat dilihat parameter $prompt yang bernilai “> “. Hal tersebut sesuai dengan karakter yang terlihat pada gambar di bawah ini.
Gambar 34. Prompt. Jika ingin mengubah nilai parameter tersebut maka dapat digunakan perintah berikut ini. options(prompt = "darkside# ")
Hasilnya seperti terlihat pada gambar di bawah ini.
Gambar 35. Hasil penggantian parameter dengan fungsi option(). Dengan fungsi ini maka pengguna dapat mengubah nilai parameter sesuai dengan kebutuhan.
Keluar dari Lingkungan R Fungsi yang digunakan untuk keluar dari lingkungan R adalah seperti berikut ini: q()
Jika perintah ini diketik pada command prompt pada RGui atau RStudio maka secara otomatis tool tersebut juga akan ditutup.
34
3
Dasar-Dasar Pemrograman Variable
Seperti halnya pemrograman dengan PHP, variable pada R tidak perlu melakukan deklarasi tipe data untuk variable yang digunakan. Tipe data variable akan sesuai dengan data yang dimasukkan pada variable tersebut. Sebagai contoh dapat dilihat pada kode berikut ini.
Gambar 36. Penggunaan variable. Dari contoh di atas dapat dilihat digunakan “a” sebagai variable. Pertama variable “a” diberikan nilai angka, kemudian variable “a” diberikan nilai dengan tipe string dan terakhir variable “a” diberikan nilai boolean. Dari contoh di atas dapat dilihat bahwa variable pada lingkungan R tidak bersifat strong type, sehingga suatu variable dapat diisi dengan nilai dengan tipe data yang berbeda-beda. Untuk membuat atau mendeklarasikan variable pada lingkungan R dapat dilakukan dengan dua cara yaitu dengan menggunakan tanda = atau <- seperti contoh berikut ini. a = 1 a <- 1
Keduanya mempunyai efek yang sama.
Tipe Data Walaupun variable tidak harus dideklarasikan tipe datanya sebelum digunakan, tetapi lingkungan R tetap mengenal tipe data. Pada lingkungan R tipe data digolongkan menjadi: 1. 2. 3.
Skalar. Vector. Matrix. 35
4. 5. 6.
Data Frame. List. Dan lain-lain.
Skalar Contoh tipe skalar sudah sering digunakan pada contoh-contoh sebelumnya, yaitu: 1. 2. 3.
Number, secara default digunakan double. Character, selain single character juga dapat menangani string. Logical, yaitu bernilai TRUE atau FALSE.
Vector Untuk membuat vector digunakan bantuan fungsi c(). Vector dapat berisi tipe data skalar seperti number, character atau logical. Berikut ini adalah contoh mendeklasikan variable sebagai vector. vec_number <- c(1,2,-5.13,6,-2,4) vec_char = c("mohammad", "reza", "faisal") vec_bool = c(TRUE, FALSE, TRUE, TRUE)
Hasil dari kode di atas dapat dilihat pada gambar di bawah ini.
Gambar 37. Variable vector. Pada gambar di atas dapat dilihat cara untuk melihat seluruh nilai dari variable yang dipilih. Sebagai contoh untuk melihat nilai-nilai pada vector vec_number. > vec_number [1] 1.00 2.00 -5.13
6.00 -2.00
4.00
Jika ingin menampilkan atau mengakses elemen dari vec_number dapat digunakan cara sebagai berikut.
36
Gambar 38. Cara mengakses elemen vector vec_number. Dari gambar di atas dapat dilihat bahwa index dari variable vector berisi fungsi c() yang didalamnya berisi urutan angka elemen yang ingin diakses. Pada gambar di atas terdapat kode vec_number[c(0)] yang menghasilkan output numeric(0), hal ini menandakan bahwa index tidak dimulai dari 0 tetapi dimulai dari 1. Contoh lain bisa dilihat pada gambar di bawah ini.
Gambar 39. Hasil akses elemen vector vec_char. Pada gambar di atas juga dapat dilihat cara mengakses lebih dari satu elemen vector sekaligus. Jika ingin mengubah nilai suatu elemen pada vector dapat dilakukan dengan cara berikut ini.
vec_char[c(1)] = “muhammad”
Maka hasilnya bisa dilihat pada gambar di bawah ini.
37
Gambar 40. Memodifikasi nilai pada elemen vector.
Factor Factor dapat dibentuk dari vector. Jika ada kebutuhan untuk mengkategorikan nilai-nilai yang dimiliki oleh suatu variable maka factor dapat memberikan kemudahan. Sebagai contoh misalnya dimiliki nilai ujian akhir mahasiswa pada suatu kelas yang disimpan pada vector berikut. nilai_uas_v = c("A", "A", "C", "B", "A", "E", "E", "E", "A", "C", "D", "C" ,"D", "A" ,"C")
Maka untuk mengkonversi vector tersebut menjadi factor digunakan fungsi factor() seperti contoh di bawah ini. nilai_uas_f = factor(nilai_uas_v)
Berikut adalah hasil dari perintah di atas dan pengenalan fungsi summary().
Gambar 41. Hasil penggunaan fungsi factor() dan summary(). Dari gambar di atas dapat dilihat ketika variable nilai_uas_f dipanggil maka selain menampilkan isi dari variable tersebut juga menampilkan keterangan Levels yang mengkategorikan isi dari variable. Secara otomatis dilakuan pengelompokan atau pengkategorian berdasarkan nilai. Kemudia jika digunakan fungsi summary() maka akan ditampilkan jumlah dari setiap kategori/kelompok. Pada kasus di atas secara otomatis dapat diketahui jumlah mahasiswa yang mendapatkan nilai A adalah 5 orang, B adalah 1 orang, C adalah 4 orang, D adalah 2 orang dan E adalah 3 orang. Untuk mengubah nilai pada factor harus sesuai dengan nilai yang telah dikategorikan sesuai nilai yang terlihat pada Levels. Sebagai contoh pada gambar di atas nilai Levels : A B C D E, artinya tidak dapat mengubah nilai elemen selain nilai tersebut. 38
Pada gambar di bawah ini diperlihatkan cara mengganti nilai elemen pada factor.
Gambar 42. Mengubah nilai elemen pada factor.
Matrix Untuk membuat matrix dapat mengikuti sintaks seperti berikut ini. var_matrix<- matrix(data, nrow=r, ncol=c, byrow=FALSE, dimnames=list(char_ vector_rownames, char_vector_colnames))
Keterangan: 1. 2. 3. 4. 5.
data: adalah isi dari matrix. Nilai dapat diisi dari vector. nrow: jumlah baris. ncol: jumlah kolom. byrow: jika nilainya FALSE maka matrix diisi berdasarkan kolom, sebaliknya akan diisi berdasarkan row. dimnames: digunakan untuk menentukan nama kolom dan baris.
Dalam membuat matrix harus diperhatikan bahwa: 1. 2.
Seluruh kolom pada matrix harus berisi tipe data yang sama (numeric, char, boolean). Seluruh kolom harus memiliki panjang yang sama.
Berikut ini adalah contoh membuat matrix. Pada contoh di bawah ini akan dibuat dua buah matrix sederhana tetapi dengan menggunakan nilai parameter byrow yang berbeda. Secara default nilai parameter byrow adalah FALSE.
39
Gambar 43. Contoh pembuatan matrix sederhana.
Dari contoh di atas nilai yang diberikan pada matrix adalah angka 1 sampai 20 yang cukup ditulis dengan cara 1:20. Pada contoh di atas dibuat dua buah matrix yaitu matrix y yang pengisian nilainya berdasarkan kolom dan matrix x yang pengisiannya nilainya berdasarkan baris. Matrix y diisi berdasarkan baris karena mengisikan nilai pada paramenter byrow. Contoh pembuatan matrix yang lain dapat dilihat pada contoh di bawah ini. data = c(1,26,24,68) nama_baris = c("R1", "R2") nama_kolom = c("C1", "C2") z = matrix(data, nrow=2, ncol=2, byrow=TRUE, dimnames=list(nama_baris, nama_kolom))
Baris pertama adalah membuat variable data yang menampung data dalam bentuk vector. Baris kedua adalah membuat variable nama_baris yang akan menjadi nama baris sedangkan pada baris ketiga adalah membuat variable nama_kolom. Selanjutnya adalah membuat matrix z. Hasil dari perintah ini akan dibentuk matrix seperti pada gambar di bawah ini.
40
Gambar 44. Output matrix z.
Selanjutnya adalah cara untuk mengakses matrix. dari contoh di atas dapat dilihat untuk menampilkan isi seluruh matrix cukup dengan memanggil nama variable matrix yang diinginkan yaitu x atau x atau z. Jika ingin mengakses seluruh baris kedua pada matrix z maka dapat digunakan perintah berikut ini. z[2,] z["R2",]
Sedangkan jika ingin mengakses seluruh kolom pertama pada matrix z maka digunakan perintah berikut ini. z[,1] z[,"C1"]
Sedangkan jika ingin mengakses nilai elemen pada elemen baris ke-2 dan kolom ke-2 digunakan perintah berikut ini. z[2,2] z["R2","C2"]
Hasil dari ketiga perintah ini dapat dilihat pada gambar di atas. Selain itu dapat juga mengakses matrix dengan keluaran berupa matrix seperti contoh di bawah ini. x[2:4,1:3]
Maksud dari perintah itu adalah mengakses elemen matrix baris 2 sampai dengan 4 dan kolom 1 sampai dengan 3, sehingga akan didapatkan keluaran berupa matrix seperti pada gambar di bawah ini.
41
Gambar 45. Mengakses beberapa elemen matrix. Sedangkan jika ingin memodifikasi nilai elemen pada matrix dapat dilakukan dengan cara seperti contoh berikut ini. x[1,1] = 20 x[1,] = 20
Baris pertama bertujuan untuk memberikan nilai baru pada elemen matrix baris 1 dan kolom 1. Sedangkan kode pada baris kedua bertujuan untuk mengubah nilai seluruh elemen pada baris pertama. Sehingga dapat dilihat hasilnya seperti pada gambar di bawah ini.
Gambar 46. Mengubah nilai elemen matrix.
42
Array Array, tipe data ini, mempunyai karakteristik seperti matrix bedanya adalah dimensi yang dimiliki array dapat lebih dari 2, seperti diketahui bahwa matrix hanya dapat memiliki dimensi N x N. Array memungkinkan untuk memiliki dimensi: 1. 2. 3.
N x N x N. N x N x N x N. Dan seterusnya.
Berikut ini adalah contoh membuat variable bertipe array. number_arr = array(1:27, dim=c(3,3,3))
Dan berikut adalah isi dari variable number_arr.
Gambar 47. Array berdimesi 3x3x3. Untuk mengakses variable array berdimensi 3x3x3 ini dapat dilakukan dengan cara berikut ini, yang akan menghasilkan keluaran yaitu 9. number_arr [3,3,1]
Cara lain yang lebih rumit untuk membuat array dapat dilihat dari contoh di bawah ini tiga_d_array = array( 1:24, dim = c(4, 3, 2), dimnames = list( c("satu", "dua", "tiga", "empat"), c("siji", "loro", "telu"), c("hiji", "dua") ) )
Contoh di atas adalah membuat array dengan memberikan nama untuk kolom dan baris dimensinya.
43
Gambar 48. Array tiga_d_array.
Data Frame Frame lebih general jika dibandingkan dengan matrix. Frame dapat memiliki tipe data skalar yang berbeda, tetapi jumlah elemen seluruh kolom tetap harus sama. Bagi pengguna yang telah memiliki pengalaman menggunakan dataset pada SAS atau SPSS akan familiar dengan data seperti ini. Berikut ini adalah sintaks yang dapat digunakan. data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, stringsAsFactors = default.stringsAsFactors())
Dan di bawah ini adalah contoh penggunaan fungsi ini. a = c(1,2,3,4) b = c("green", "white", "red", "blue") c = c(TRUE,TRUE,TRUE,FALSE) data_frame = data.frame(a,b,c, stringsAsFactors = FALSE) names(data_frame) = c("ID","Color","Passed")
Baris pertama sampai dengan ketiga bertujuan untuk membuat variable a,b dan c yang berisi vector dengan tipe data skalar yang berbeda. Sedangkan baris keempat adalah langkah untuk membuat variable dengan nama data_frame sebagai data frame dengan isi vector a, b dan c. terakhir adalah memberikan nama kolom, kolom pertama akan memiliki nama ID, kolom kedua bernama Color dan kolom ketiga memiliki nama Passed. Berikut ini adalah isi dari data frame data_frame.
44
Gambar 49. Data pada data_frame. Jika pada tab Environment dipilih data_frame dengan cara mengklik double maka akan ditampilkan data_frame seperti pada gambar di bawah ini.
Gambar 50. Tampilan data_frame secara visual pada RStudio. Dari gambar di atas dapat dilihat fungsi names() bertujuan untuk memberikan nama untuk setiap kolom pada data frame. Selanjutnya adalah akan dicontohkan bagaimana mengakses elemen pada data frame. Jika ingin mengakses elemen baris ke 4 dan kolom pertama maka bisa dilakukan dengan dua cara yaitu: data_frame[4,1] data_frame[4,”ID”]
Sedangkan jika ingin mengakses seluruh nilai elemen kolom kedua dapat dilakukan dengan kedua cara berikut ini. data_frame[,2] data_frame[,”Color”]
Sedangkan untuk mengubah nilai suatu elemen, misal elemen baris ke-1 dan kolom ke-1, maka dapat dilakuan dengan cara seperti berikut. data_frame[1,1] = 5 data_frame[1,”ID”] = 5
45
List Fungsi list() dapat digunakan untuk membuat variable yang di dalamanya berisi banyak objek dengan tipe data yang beragam. Sebagai contoh di dalam sebuat variable yang dibentuk dari fungsi list() dapat berisi atas tipe data skalar, vector, matrix dan lain-lain. Berikut adalah contoh dari variable yang dibentuk dari fungsi list(). mahasiswa <- list(name="Adi", mynumbers=a, mymatrix=y, umur=21)
Sebagaimana yang telah dibahas pada bagian sebelumnya, pembahasan tentang data frame, telah dibuat vector a. Dan pada pembahasan bagian tentang matrix telah dibuat matrix y. dari contoh kode di atas dapat diketahui bahwa list() dapat digunakan untuk menampung beragam tipe data. Dan pada gambar di bawah ini dapat dilihat isi dari variable mahasiswa.
Gambar 51. Output variable bentukan fungsi list(). Sedangkah cara untuk mengakses isi dari data yang disimpan di dalam list dapat digunakan dengan sintaks seperti berikut ini. nama_objek[[index]]
Jika ingin mengakses nilai pertama pada variable mahasiswa maka digunakan kode seperti berikut. mahasiswa[[1]]
Dan berikut adalah contoh lain mengakses variable list beserta hasilnya.
46
Gambar 52. Cara mengakses list dan outputnya.
Fungsi Pendukung Pada pembahasan sebelumnya telah diberikan contoh penggunaan fungsi typeof() yang dapat digunakan untuk mengetahui tipe data dari suatu variable.
dim() Sedangkan fungsi dim() berfungsi untuk memeriksa dimensi dari suatu variable yang tipenya bukan skalar seperti matrix, data frame dan lain-lain. Sintaks dari fungsi ini adalah sebagai berikut. dim(objek_yang_akan_diperiksa)
Dan hasilnya dapat dilihat pada gambar di bawah ini.
Gambar 53. Hasil fungsi dim().
47
Dari gambar di atas dapat dilihat variable x adalah matrix dengan dimensi 5x4 dan dengan perintah dim(x) dapat dilihat output 5 4. Begitu juga untuk perintah dim(data_frame) yang berfungsi untuk mengetahui dimensi variable data_frame.
class() Fungsi class() bertujuan untuk memeriksa tipe data pembentuk objek yang diperiksa. Sintaks dari fungsi ini adalah sebagai berikut. class(objek_yang_akan_diperiksa)
Dan hasil dari fungsi ini dapat dilihat pada gambar di bawah ini.
Gambar 54. Hasil dari fungsi class().
Pada gambar dapat dilihat bahwa x merupakan matrix dan data_frame adalah data frame.
length() fungsi untuk mendapatkan informasi panjang dari vector, list, factor dan objek lainnya. Sintaks dari fungsi ini adalah sebagai berikut. length(objek)
Sebagai contoh bisa dilihat sebagai berikut
Gambar 55. Output fungsi length().
names() Fungsi ini berfungsi untuk mendapatkan nama yang dimiliki oleh objek. Misal jika data frame memiliki nama untuk kolom-kolomnya maka dengan fungsi ini akan ditampilkan namanama tersebut. Berikut adalah sintaks dari fungsi ini. names(objek)
Sebagai contoh dapat dilihat pada kode di bawah ini. 48
names(data_frame)
Dan berikut ini adalah hasil dari kode di atas.
Gambar 56. Output fungsi names(). Dapat dilihat objek data_frame memiliki kolom dengan nama a, b dan c. Dan ketika digunakan fungsi names() maka ditampilkan output sesuai dengan nama dari kolom-kolom tersebut.
edit() Fungsi ini dapat digunakan untuk menyalin suatu objek ke objek baru kemudian mengedit objek baru tersebut secara visual. . Sintaks dari fungsi ini adalah sebagai berikut. objek_baru = edit(objek)
Sebagai contoh dari penggunaan fungsi ini adalah sebagai berikut. data_frame_baru = edit(data_frame)
Setelah baris kode di atas ditulis maka akan ditampilkan seperti pada gambar di bawah ini.
Gambar 57. Window Data Editor.
49
Window tersebut berfungsi untuk mengedit objek data_frame dan hasilnya akan disimpan pada objek data_frame_baru. Dengan window data editor ini dimungkinkan untuk menambah kolom dan menambah data.
Gambar 58. Menambah kolom dengan nama d. Dan berikut adalah gambar setelah kolom dibuat dan ditambahkan data pada kolom d tersebut.
Gambar 59. Menambahkan data pada kolom d. Dan berikut adalah hasil ketika objek data_frame_baru dipanggil.
Gambar 60. Data pada objek data_frame_baru.
fix() fungsi fix() ini berfungsi untuk mengedit suatu objek dengan menggunakan window Data Editor seperti yang sudah dapat dilihat pada pembahasan di atas. Fungsi ini tidak memungkinkan untuk menambah kolom, tetapi hanya digunakan untuk mengedit atau menambah data saja.
50
Gambar 61. Mengedit data pada objek dengan fungsi fix().
Percabangan Pada bagian ini akan diberikan penjelasan tentang percabangan pada bahasa R.
Operator Untuk melakukan percabangan pada bahasa R perlu digunakan operator pembanding dan operator logika. Operator ini merupakan operator umum yang dijumpai pada bahasa pemrograman lain. Berikut ini adalah daftar operator pembanding: Tanda == != > >= < <=
Fungsi Sama dengan Tidak sama dengan Lebih besar Lebih besar atau sama dengan Lebih kecil Lebih kecil atau sama dengan
Sedangkan operator logika dapat dilihat pada tabel di bawah ini. Tanda Fungsi & and | or ! negasi
Statement if if adalah statement yang umum digunakan pada percabangan. Berikut ini adalah sintaks dari statement ini. if(kondisi) { ... }
51
Jika “kondisi” bernilai benar maka “fungsi” akan dijalankan, jika “kondisi” salah maka “fungsi” tidak akan dijalankan. Sebagai contoh: if(5 > 4){sprintf("5 lebih besar daripada 4")}
Karena kondisi 5 > 4 adalah benar maka fungsi sprintf di dalam tanda { } dieksekusi.
Sintaks penggunaan statement ini yang lebih rumit dapat dilihat di bawah ini. if(kondisi) { ... } else { ... }
Atau sintaks berikut ini. if(kondisi 1) { ... } else if(kondisi 2) { ... } else { ... }
Untuk mencoba sintaks di atas maka dibuat fungsi sederhana yang disimpan pada file HitungNilai.R dengan kode di bawah ini. HitungNilai.R HitungNilai <- function(nilai){ if(nilai > 100 | nilai < 0) { sprintf("Nilai harus 0-100") } else { if(nilai >= 80){ sprintf("A") } else if (nilai >= 70){ sprintf("B") } else if (nilai >= 60){ sprintf("C") } else if (nilai >= 50) { sprintf("D") } else { sprintf("E") } } }
Hasilnya dapat dilihat pada gambar di bawah ini.
52
Gambar 62. Hasil fungsi HitungNilai().
Pada contoh kode HitungNilai.R di atas telah digunakan operator logika dan operator pembanding.
Statement ifelse Statement ini merupakan percabangan yang merupakan bentuk ringkas dari sintaks if-else di bawah ini. if(kondisi) { ... } else { ... }
Dengan statement ifelse maka sintaksnya menjadi seperti berikut. if(kondisi, dijalankan_jika_benar, dijalankan_jika_salah)
Contoh penggunaan perintah ini adalah sebagai berikut. ifelse(TRUE, sprintf("benar"), sprintf("salah")) ifelse(FALSE, sprintf("benar"), sprintf("salah"))
Dan hasilnya bisa dilihat pada gambar di bawah ini.
53
Gambar 63. Contoh penggunaan ifelse.
Statement switch Sintaks untuk statement switch adalah sebagai berikut. switch (statement, list)
Parameter statement dapat berupa tipe data numerik, string atau karakter. Sedangkan parameter list berisi nilai-nilai yang akan ditampilkan sesuai dengan nilai yang diberikan pada parameter statement. Untuk parameter statement berupa numerik dapat dilihat contohnya di bawah ini. switch(2,"merah","kuning","biru")
Pada contoh di atas, nilai untuk parameter statement adalah 2. Sedangkan parameter list berisi nilai-nilai sebagai berikut: 1. 2. 3.
merah. kuning. biru.
Karena diberikan nilai 2 sebagai nilai parameter maka output dari contoh di atas adalah “kuning”. Contoh berikutnya adalah jika tipe data parameter statement adalah karakter. switch("B","B" = "Benar","S" = "Salah")
Output dari contoh di atas adalah “Benar”. Sedangkan contoh yang lain dapat dilihat di bawah ini. switch("panjang", "warna"="merah", "bentuk"="persegi", "panjang"=5)
Output dari contoh di atas adalah 5.
Pengulangan Pada bagian ini akan dijelaskan penggunaan statement for dan while untuk melakukan pengulangan.
54
Statement for Berikut ini adalah sintaks dari statement for. for(variable in sequence) { ... }
Jika dilihat dari sintaks di atas maka sintaks tersebut lebih mirip dengan statement foreach yang ada pada bahasa pemrograman lain seperti C#. Berikut adalah contoh penggunaan statement ini. for(i in 1:5) {print(i)}
Keluaran dari kode di atas adalah sebagai berikut.
Gambar 64. Output statement for. Dari kode di atas dilakukan pengulangan 1:5 (1 sampai 5) dan nilai itu akan disimpan pada variable i setiap langkah pengulangan dilakukan.
Contoh lain adalah menggunakan pengulanan untuk membaca isi dari vector yang dibuat dengan cara di bawah ini. data = 1:10 for(i in data) {print(data[i])}
Hasilnya dapat dilihat pada gambar di bawah ini.
55
Gambar 65. Pengulangan vector dengan for().
Statement while Cara lain untuk melakukan pengulangan adalah dengan menggunakan statement while. Sintaks dari statement ini adalah sebagai berikut. inisialisasi nilai variable while (kondisi) { ... mengubah nilai variable }
Contoh penggunaan statement ini adalah seperti dicontohkan pada kode di bawah ini. i = 1; while(i <= 5){ print(i); i = i+1; }
Hasil dari kode di atas dapat dilihat pada gambar di bawah ini.
Gambar 66. Output statement while. Berikut ini adalah contoh penggunaan pengulangan while() untuk mengakses data pada vector. 56
data_mahasiswa = c("mohammad", "reza", "faisal", "budi", "iwan", "wati") i=1 while(i <= 6){ print(data_mahasiswa[i]) i = i+1 }
Dan berikut adalah hasil dari kode di atas.
Gambar 67. Pengulanan while() untuk mengakses data vector.
Statement repeat Sintaks untuk statement repeat adalah sebagai berikut. repeat { ... }
Berbeda dengan bahasa pemrogram seperti Pascal, statement repeat pada R tidak memiliki kondisi. Untuk itu perlu dibuat kondisi di dalam badan tanda { }. Berikut ini adalah contoh dari penggunaan statement repeat. i = 1 repeat{ print(i) if(i==5) {break()} i = i + 1 }
Dan hasilnya dapat dilihat pada gambar di bawah ini.
57
Gambar 68. Output pengulangan dengan repeat.
Function Membuat Fungsi Selain menggunakan fungsi yang telah disediakan pada lingkuran R, pengguna dimungkinkan untuk membuat fungsi sendiri. Sintaks yang digunakan untuk membuat fungsi dapat dilihat di bawah ini. Pada bahasa pemrograman terdapat dua jenis fungsi yaitu fungsi yang tidak mengembalikan nilai dan fungsi yang mengembalikan nilai. Untuk fungsi yang tidak mengembalikan nilai maka digunakan sintaks seperti berikut ini. NamaFungsi <- function(arg1,arg2,... ){ ... }
Atau NamaFungsi = function(arg1,arg2,... ){ ... }
Sedangkan fungsi yang mengembalikan nilai digunakan sintaks seperti berikut ini. NamaFungsi <- function(arg1,arg2,... ){ ... return(object) }
Atau NamaFungsi = function(arg1,arg2,... ){ ...
58
return(object) }
Untuk membuat fungsi sebaiknya disimpan pada file dengan extension *.R. Cara penanganan file *.R untuk memuat fungsi ke dalam session dapat dilihat pada Bab 2 bagian pembahasan Memuat File. Sedangkan untuk membuat file *.R dapat dilakukan dengan memilih File > New File > R Script dan kemudian simpan dengan nama file yang diinginkan dan diikuti dengan extension .R. Berikut ini adalah contoh kedua tipe fungsi tersebut dan bagaimana cara untuk menggunakannya. Bab3Latihan.R # Fungsi tanpa mengembalikan keluaran HelloRepeat = function(jumlah) { data = 1:jumlah for(i in data) { print(data[i]) } } # Fungsi yang mengembalikan keluaran Tambah = function(bilangan1, bilangan2) { hasil = bilangan1 + bilangan2; return(hasil); } HelloRepeat(6) hasil_jumlah = Tambah(5,6) hasil_jumlah
Untuk fungsi yang mengembalikan keluaran maka fungsi tersebut dapat digunakan dengan dua cara, yaitu dengan cara memanggil langsung atau dapat pula ditampung terlebih dahulu dengan cara seperti contoh di atas, dimana keluaran fungsi Tambah() ditampung pada variable hasil_jumlah.
Menjalankan Fungsi pada RStudio RStudio memiliki fitur untuk menjalankan file *.R yaitu dengan mengklik tombol Run seperti pada gambar di bawah ini.
59
Gambar 69. Eksekusi script *.R pada RStudio. Hal yang perlu diperhatikan, jika dilakukan pengubahan atau penambahan pada file dan ingin mengeksekusinya pada command prompt sebaiknya tekan tombol Source untuk memuat ulang script yang baru tersebut ke session. Hal lain yang perlu diperhatikan dalam menggunakan tombol Run adalah berfungsi untuk menjalankan baris yang dimana cursor aktif pada file tersebut. Sebagai contoh jika cursor berada pada baris ke-15 maka yang dijalankan hanya baris itu saja yaitu fungsi HelloRepeat(5).
Komentar Komentar adalah baris yang tidak dianggap dijalankan sebagai kode program atau fungsi. Komentar sering digunakan untuk memberikan keterangan terhadap apa yang ditulis pada program. Selain itu komentar juga dapat digunakan untuk “menon-aktifkan” suatu baris agar tidak dieksekusi. Untuk membuat komentar cukup gunakan karakter # pada posisi awal baris, seperti yang terlihat pada contoh di bawah ini. Bab3Latihan.R # Fungsi tanpa mengembalikan keluaran HelloRepeat = function(jumlah) { data = 1:jumlah for(i in data) { print(data[i])
60
} } # Fungsi yang mengembalikan keluaran Tambah = function(bilangan1, bilangan2) { hasil = bilangan1 + bilangan2; return(hasil); } HelloRepeat(6) #hasil_jumlah = Tambah(5,6) #hasil_jumlah
Pada dua baris terakhir dapat dilihat fungsi komentar agar kedua baris tersebut tidak dijalankan.
Eksekusi Script R Jika ada kebutuhan untuk mengeksekusi fungsi atau urutan fungsi-fungsi yang telah disimpan pada file script R maka hal tersebut dapat dilakukan pada lingkungan R dengan menggunakan RScript.exe. Sintaks perintah yang digunakan adalah sebagai berikut: RScript.exe nama_file.R
Sebagai contoh seperti perintah di bawah ini. RScript.exe Bab3Latihan.R
Dan hasilnya dapat dilihat pada gambar di bawah ini.
Gambar 70. Menjalankan script R dengan RScript.exe. Dari hasil percobaan yang dilakukan pada contoh script Bab3Latihan.R, ada beberapat hal yang perlu diperhatikan dalam membuat script yang akan dijalankan dengan RScript.exe yaitu: 61
1.
2.
Pada contoh Bab3Latihan.R terdapat dua baris kode yang menampilkan output yaitu pada baris ke 15 dan 18. Jika menggunakan RScript.exe maka hanya “baris kode yang menampilkan output” pertama saja yang akan ditampilkan pada layar. Sebaiknya script R yang ingin dijalankan dengan cukup mengeluarkan output yang disimpan ke layar. Untuk menyimpan output ke layar dapat digunakan fungsi sink() yang telah dibahas pada Bab 2. Selain sink() juga terdapat fungsi lain yang bisa digunakan untuk menyimpan hasil program ke file seperti pdf(), png(), jpeg(), bmp() dan postscript(). Fungsi-fungsi tersebut akan dibahas pada pada pembahasan pembuatan grafik dengan R.
Referensi http://manuals.bioinformatics.ucr.edu/home/programming-in-r http://www.statmethods.net/input/datatypes.html https://en.wikibooks.org/wiki/R_Programming/Data_types http://www.stat.berkeley.edu/~s133/factors.html http://www.tutorialspoint.com/r/
62
4
Pemrograman Berbasis Obyek
Setelah belajar dasar-dasar pemrograman R selajutnya akan dikenalkan pemrograman berbasis obyek atau Object Oriented Programming (OOP) dengan menggunakan R. Hal ini perlu diperkenalkan agar pembaca dapat mengerti ketika bertemu contoh-contoh kode program yang ditulis dengan R yang menggunakan konsep OOP ini, sebagai contoh adalah jika contoh kode program pada bidang Bioinformatics. Lingkungan R mendukung dua sistem untuk OOP yaitu S3 dan yang lebih baru adalah S4. Pada sistem S4 telah mendukung multiple inheritance, multiple dispach dan introspection.
Class Untuk membuat class pada lingkungan R digunakan fungsi setClass(). Seperti pada fungsi pada umumnya, didalamnya dapat berisi parameter-parameter. Berikut adalah contoh penggunaan fungsi tersebut. y = matrix(1:50, 10, 5) setClass(Class="ProsesMatrix", representation=representation(a="ANY"), prototype=prototype(a=y[1:2,]), validity=function(object) { if(class(object@a)!="matrix") { return(paste("nilai yang digunakan harus matrix, data yg anda gunakan adalah", class(object@a))) } else { return(TRUE) } } )
Keterangan parameter-parameter yang dimiliki oleh fungsi setClass(): 1. 2. 3. 4. 5. 6.
Class: nama class. representation: slot yang harus dimiliki oleh class baru atau class turunannya. prototype: sebuah obyek menyediakan data default untuk slot. contains: class-class induk. validity, access, version: control argument. where: lingkungan untuk menggunakan, menyimpan atau menghapus definisi sebagai meta data.
Untuk membuat inisialisasi method yang akan dipanggil saat class diinstasiasi dapat digunakan dengan lain seperti berikut ini. setMethod("initialize", "ProsesMatrix", function(.Object, a) { .Object@a <- a/a .Object })
63
Obyek Untuk membuat objek dari class yang telah dibuat digunakan fungsi new(). Berikut ini adalah contoh untuk membuat objek dari class ProsesMatrix yang telah dibuat pada bagian sebelumnya. prosesMatrixObj = new("ProsesMatrix", a=y)
Jika objek prosesMatrixObj dipanggil akan dapat dilihat output seperti berikut. > prosesMatrixObj An object of class "ProsesMatrix" Slot "a": [,1] [,2] [,3] [,4] [,5] [1,] 1 11 21 31 41 [2,] 2 12 22 32 42 [3,] 3 13 23 33 43 [4,] 4 14 24 34 44 [5,] 5 15 25 35 45 [6,] 6 16 26 36 46 [7,] 7 17 27 37 47 [8,] 8 18 28 38 48 [9,] 9 19 29 39 49 [10,] 10 20 30 40 50
Berikut ini akan dicontohkan jika class diberikan nilai dengan tipe bukan matrix. Pada contoh di bawah ini nilai yang diberikan bertipe data frame. > prosesIris = new("ProsesMatrix", a=iris) Error in validObject(.Object) : invalid class “ProsesMatrix” object: nilai yang digunakan harus matrix, data yg anda gunakan adalah data.frame
Inheritance Inheritance atau pewarisan adalah konsep pemrograman dimana sebuah class dapat menurunkan sifat-sifat (biasanya berupa pewarisan property dan method) yang dimilikinya kepada class lain. Pada lingkungan R, untuk mewarisi suatu class induk dapat dilakukan dengan menggunakan pengisian parameter contain pada fungsi setClass(). Misal dibuat dua buah class yaitu ClassInduk1 dan ClassInduk2 seperti berikut. setClass("ClassInduk1", representation(a = "character", b = "character")) setClass("ClassInduk2", representation(c = "numeric", d = "numeric"))
Jika ingin membuat class yang mewarisi sifat-sifat dari ClassInduk1 dan ClassInduk2 maka dapat dibuat class dengan cara seperti berikut ini. setClass("ClassAnak", contains=c("ClassInduk1", "ClassInduk2"))
Untuk melihat sifat-sifat ClassInduk1 dan ClassInduk2 pada ClassAnak maka dapat dibuat objek dari ClassAnak sebagai berikut. > new("ClassAnak", a=letters[1:4], b=letters[1:4], c=1:4, d=4:1) An object of class "ClassAnak"
64
Slot "a": [1] "a" "b" "c" "d" Slot "b": [1] "a" "b" "c" "d" Slot "c": [1] 1 2 3 4 Slot "d": [1] 4 3 2 1
Dan jika dilihat obyek yang dibuat dari class ClassInduk1 maka akan dapat dilihat output seperti berikut. > getClass("ClassInduk1") Class "ClassInduk1" [in ".GlobalEnv"] Slots: Name: a b Class: character character Known Subclasses: "ClassAnak"
Sedangkan output dari obyek yang dibuat dari class ClassInduk2 adalah sebagai berikut. > getClass("ClassInduk2") Class "ClassInduk2" [in ".GlobalEnv"] Slots: Name: c d Class: numeric numeric Known Subclasses: "ClassAnak"
Pada contoh kode di atas diperkenalkan fungsi untuk memeriksa class, yaitu getClass(). Selain fungsi itu juga dapat digunakan fungsi lain untuk memeriksa class yaitu: 1. 2. 3.
getSlots(). slotNames(). extends().
Method & Fungsi Generic Untuk membuat method atau fungsi generic pada lingkungan R digunakan fungsi: 1. 2.
setMethod() setGeneric().
Untuk membuat fungsi generic dapat dilakukan dengan dua cara. Yang pertama adalah dengan mengubah fungsi yang sudah ada menjadi fungsi generic dengan cara seperti berikut ini. fungsiBiasa = function(object) 0 fungsiGeneric = setGeneric("fungsiBiasa")
65
Cara kedua adalah membuat fungsi generic sendiri dengan cara seperti berikut, misal dimiliki class seperti berikut. setClass("Shape") setClass("Polygon", representation(sides = "integer"), contains = "Shape")
Maka untuk membuat method untuk class tersebut dapat dilakukan dengan cara seperti berikut. setMethod("sides", signature(object = "Polygon"), function(object) { object@sides })
Jika diperiksa dengan fungsi showMethods() seperti berikut di bawah ini, maka akan dapat dilihat obyek yang menggunakan method ini adalah obyek dari class Polygon. > showMethods("sides") Function: sides (package .GlobalEnv) object="ANY" object="Polygon"
Fungsi-fungsi yang dapat digunakan untuk memeriksa method adalah sebagai berikut: 1. 2. 3. 4.
showMethods(). findMethods(). getMethod(). existsMethod().
66
5
Dasar-Dasar Pengelolaan Data Pada bab ini akan dibahas dan dicontohkan cara untuk bekerja dengan data dalam proses import dan export data. Hal ini dikarenakan biasanya telah dimiliki data dengan format tertentu seperti format plain text, CSV, Excel atau format keluaran aplikasi SPSS atau SAS, yang mana file data tersebut ingin diolah di lingkungan R. Data tersebut akan ditampung ke dalam tipe data yang telah dibahas pada Bab 3, yang mana tipe data tersebut harus dipilih sesuai dengan kebutuhan. Selain itu mungkin ada kebutuhan dimana data hasil proses dari lingkuran R akan digunakan kembali atau akan digunakan oleh aplikasi lain sehingga perlu dilakukan proses export.
Import Data Pada lingkungan R terdapat fungsi-fungsi yang dapat digunakan untuk melakukan proses import data. Untuk sebuah format file maka akan digunakan sebuah fungsi yang spesifik. Data yang diimport akan disimpan dalam objek dengan tipe data yaitu data frame.
Text File Data yang disimpan pada file plain text biasanya dipisahkan oleh karakter sebagai separator. Selain itu kadang digunakan tabulasi (tombol tab) sebagai pemisah pada data. Karakter separator yang umum digunakan adalah adalah koma (,) sehingga text file jenis ini sering disebut sebagai file CSV (comma separated value). Fungsi yang digunakan untuk keperluan ini adalah read.table(). Berikut adalah sintaks fungsi ini. read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
Selain fungsi tersebut juga terdapat fungsi-fungsi lain yang dapat digunakan yaitu: read.csv(file, header = TRUE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...) read.csv2(file, header = TRUE, sep = ";", quote = "\"", dec = ",", fill = TRUE, comment.char = "", ...)
Kedua fungsi tersebut dapat digunakan untuk membara file dengan format csv. 67
Fungsi lain yang dapat digunakan adalah read.delim() dan read.delim2() dengan sintaks seperti berikut: read.delim(file, header = TRUE, sep = "\t", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...) read.delim2(file, header = TRUE, sep = "\t", quote = "\"", dec = ",", fill = TRUE, comment.char = "", ...)
Berikut adalah contoh-contoh penggunaan fungsi-fungsi tersebut. Untuk menggunakan fungsi di atas maka terlebih dahulu dilakukan pemeriksaan data yang dimiliki. Sebagai contoh dimiliki data seperti berikut ini. Bab4DataText01.txt YAL033W YAL034C YAL035C YAL035W
-0.38 -0.54 1000 -0.35
1000 1.04 1000 -0.91
-0.23 0.05 1000 -0.6
-0.17 -0.31 1000 -0.32
-0.31 -0.27 1000 -0.22
-0.16 -0.27 1000 0.17
0.07 0.19 1000 -0.15
0.4 -0.38 1000 0.2
0 0 1000 0.13
0.26 0.3 1000 -0.13
Pada contoh data di atas dapat dilihat setiap kolom data hanya dipisahkan oleh tabulasi (tombol tab). Untuk mengimport data seperti itu dapat digunakan kode di bawah ini. bab4_data_text = read.table("Bab4DataText01.txt") bab4_data_text
Jika objek bab4_data_text dipanggil maka akan dapat dilihat data yang sesuai dengan isi file Bab4Data.txt seperti pada gambar di bawah ini.
Gambar 71. Isi data pada objek bab4_data_text. Untuk membuktikan apakah objek yang menampung data adalah data frame, maka dapat dilihat dengan menggunakan perintah class(bab4_data_text) seperti pada gambar di atas. Contoh lain jika dimiliki data seperti berikut ini. Bab4DataText02.txt Gen YAL033W YAL034C YAL035C YAL035W
T1 -0.38 -0.54 1000 -0.35
T2 1000 1.04 1000 -0.91
T3 -0.23 0.05 1000 -0.6
T4 -0.17 -0.31 1000 -0.32
T5 -0.31 -0.27 1000 -0.22
T6 -0.16 -0.27 1000 0.17
T7 0.07 0.19 1000 -0.15
T8 0.4 -0.38 1000 0.2
T9 0 0 1000 0.13
T10 0.26 0.3 1000 -0.13
Jika data Bab4DataText02.txt diimport dengan kode yang sama persis dengan contoh di atas maka akan didapatkan isi objek seperti berikut.
Gambar 72. Isi data objek bab4_data_text hasil import dari file Bab4DataText02.txt.
68
Dapat dilihat pada baris pertama yang berisi informasi yang seharusnya menjadi header dari data, sedangkan data dimulai dari baris kedua. Berikut ini adalah kode yang dapat digunakan. bab4_data_text = read.table("Bab4DataText02.txt", header = TRUE)
Dengan kode di atas maka objek bab4_data_text akan seperti berikut ini.
Gambar 73. Header data pada objek bab4_data_text. Dengan baris kode yang menggunakan opsi header=TRUE membuat baris pertama pada data di file Bab4DataText02.txt menjadi nama kolom sedangkan baris kedua sampai baris terakhir menjadi data. Contoh data yang lain adalah seperti contoh di bawah ini. Item-item pada data di bawah ini dipisahkan oleh tanda koma (,). Bab4DataText03.txt Gen,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 YAL033W,-0.38,1000,-0.23,-0.17,-0.31,-0.16,0.07,0.4,0,0.26 YAL034C,-0.54,1.04,0.05,-0.31,-0.27,-0.27,0.19,-0.38,0,0.3 YAL035C,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000 YAL035W,-0.35,-0.91,-0.6,-0.32,-0.22,0.17,-0.15,0.2,0.13,-0.13
Untuk mengimport data di atas digunakan kode seperti berikut. Pada kode di bawah ini digunakan opsi sep=”,”. Opsi sep memiliki arti sebagai separator. bab4_data_text = read.table("Bab4DataText03.txt", header = TRUE, sep = ",")
Selain itu juga dapat digunakan fungsi read.csv() yang lebih spesifik bertujuan untuk menangani data CSV (comma separated value) seperti di atas. Berikut adalah contoh kode penggunaan kedua fungsi tersebut. bab4_data_text = read.csv("Bab4DataText03.txt")
Sedangkan jika data yang dimiliki dipisahkan oleh tanda titik koma (;) seperti contoh data berikut ini. Maka data digunakan fungsi read.csv2(). Bab4DataText04.txt Gen;T1;T2;T3;T4;T5;T6;T7;T8;T9;T10 YAL033W;-0.38;1000;-0.23;-0.17;-0.31;-0.16;0.07;0.4;0;0.26 YAL034C;-0.54;1.04;0.05;-0.31;-0.27;-0.27;0.19;-0.38;0;0.3 YAL035C;1000;1000;1000;1000;1000;1000;1000;1000;1000;1000 YAL035W;-0.35;-0.91;-0.6;-0.32;-0.22;0.17;-0.15;0.2;0.13;-0.13
Berikut adalah contoh kode penggunaan fungsi read.csv2(). bab4_data_text = read.csv2("Bab4DataText04.txt")
Hasil dari kedua fungsi read.csv() dan read.csv2() adalah seperti pada gambar di bawah ini.
69
Gambar 74. Output fungsi read.csv() dan read.csv2(). Fungsi yang lain adalah read.delim() yang dapat digunakan untuk mengimport data dengan karakteristik seperti berikut. Bab4DataText05.txt t1 t2 r1 1 0 r2 1 2 r3 0 0 r4 0 0 r5 0 2 r6 2 2 r7 2 2 r8 0 2 r9 1 0 r10 1 0 r11 1 0 r12 1 2 r13 2 0
t3 1 2 0 1 1 0 0 1 1 2 0 0 0
t4 0 1 2 1 1 1 1 0 2 1 0 0 1
t5 0 2 1 2 1 1 1 1 0 2 1 0 0
t6 1 1 1 0 0 1 1 1 1 2 2 1 2
t7 0 2 0 0 0 0 0 2 0 1 1 2 1
t8 2 1 1 0 0 0 1 0 1 0 2 1 0
Item-item pada data pada file Bab4DataText05.txt dipisahkan oleh tanda \t yang sama artinya dengan tab. Biasanya data seperti ini merupakan keluaran dari suatu aplikasi dimana cara untuk mengkonversi aksi tekan tombol tab dengan karakter \t pada kode program di aplikasi tersebut. Berikut adalah contoh kode penggunaan fungsi read.delim() dan read.delim2(). bab4_data_text = read.delim("Bab4DataText05.txt") bab4_data_text = read.delim2("Bab4DataText05.txt")
Kedua fungsi tersebut menghasilkan keluaran yang sama, walaupun sebenarnya antara kedua fungsi tersebut memiliki perbedaan nilai default opsi dec yaitu opsi yang berisi nilai default tanda yang digunakan sebagai pemisah bilangan desimal. Untuk lebih jelasnya bisa dilihat kembali sintaks fungsi read.delim() dan read.delim2() di atas.
Excel Untuk mengimport file Excel maka terlebih dahulu harus memuat paket xlsx. Untuk menambahkan paket ini ke lingkungan R dapat dilakukan dengan cara memilih menu Tools
70
> Install Packages. Kemudian pada window Install Packages tulis nama paket xlsx seperti pada gambar di bawah ini.
Gambar 75. Window Install Packages. Untuk menginstall paket pada lingkungan R harus dipastikan komputer terhubung ke internet. Langkah selanjutnya secara otomatis paket yang diinginkan akan diunduh.
Gambar 76. Proses pengunduhan paket xlsx. Jika proses pengunduhan dan installasi berhasil maka dapat dilihat pesan seperti pada gambar di bawah ini.
71
Gambar 77. Proses pengunduhan dan installasi paket telah berhasil. Pada gambar dapat dilihat telah diinstall dua paket, yaitu: 1. 2.
xlsxjars. xlsx.
Fungsi yang digunakan untuk mengimport data dari file Excel adalah read.xlsx(). Untuk menggunakan fungsi ini terlebih dahulu paket ini harus dimuat dengan fungsi library(), seperti dicontohkan pada kode di bawah ini. library(xlsx)
Dan hasilnya akan terlihat seperti gambar di bawah ini.
Gambar 78. Memuat paket xlsx dengan menggunakan fungsi library(). Sebagai informasi, jika ingin membatalkan pemuatan paket maka dapat digunakan fungsi unloadNamespace(), sebagai contoh bisa dilihat kode berikut ini. unloadNamespace(xlsx)
Setelah itu maka fungsi read.xlsx() dan read.xlsx2() sudah dapat digunakan. Sintaks dari kedua fungsi ini adalah sebagai berikut. read.xlsx(file, sheetIndex, sheetName=NULL, rowIndex=NULL, startRow=NULL, endRow=NULL, colIndex=NULL, as.data.frame=TRUE, header=TRUE, colClasses=NA, keepFormulas=FALSE, encoding="unknown", ...) read.xlsx2(file, sheetIndex, sheetName=NULL, startRow=1, colIndex=NULL, endRow=NULL, as.data.frame=TRUE, header=TRUE, colClasses="character", ...)
72
Berikut ini adalah data yang akan dimport dengan menggunakan fungsi terserbut.
Gambar 79. Data dari file Excel – Bab4DataExcel.xlsx. File Bab4DataExcel.xlsx di atas terdiri atas 2 sheet yaitu: 1. 2.
Sheet dengan label Hasil 1 yang terdiri atas 13 record. Sheet dengan label Hasil 2 yang terdiri atas 13 record.
Kedua sheet tersebut terdiri atas 11 kolom dan tidak memiliki header. Untuk mengimport data dari sheet 1 (Hasil 1) maka digunakan perintah berikut. bab4_data_excel = read.xlsx("Bab4DataExcel.xlsx", header = FALSE , 1)
Sedangkan jika ingin mengimport data dari sheet 2 (Hasil 2) maka digunakan perintah berikut. bab4_data_excel = read.xlsx("Bab4DataExcel.xlsx", header = FALSE , 2)
Dari contoh di atas maka dapat dilihat sintaks yang digunakan cukup seperti berikut ini. read.xlsx("nama_file", header = FALSE , nomor_sheet)
73
Hasil dari perintah di atas dapat dilihat pada gambar di bawah ini.
Gambar 80. Hasil import data dari file Excel. Sedangkan jika file Excel memiliki header seperti pada perintah yang digunakan adalah sebagai berikut. bab4_data_excel = read.xlsx("Bab4DataExcel02.xlsx", 1) bab4_data_excel bab4_data_excel = read.xlsx("Bab4DataExcel02.xlsx", 2) bab4_data_excel
74
Berikut adalah contoh data yang digunakan untuk kode di atas.
Gambar 81. Data Excel dengan header – Bab4DataExcel.xlsx. Dan pada gambar di bawah ini dapat dilihat isi dari objek bab4_data_excel yang menampung data import dari file Bab4DataExcel.xlsx.
Gambar 82. Output objek bab4_data_excel yang menampung data dari file Excel.
75
Sebagai informasi paket xlsx ni juga dapat digunakan untuk membuat dan mengedit file Excel. Cara untuk membuat dan mengedit file Excel akan dibahas pada bagian Export Data.
Fungsi Built-in Import Data Selain fungsi-fungsi yang telah dicontohkan di atas, lingkungan R memiliki fungsi lain untuk import data. Fungsi-fungsi itu adalah: 1. 2. 3. 4. 5.
read.dcf(), berfungsi untuk membaca file format Debian Control File. read.DIF(), berfungsi untuk membaca file DIF (Data Interchange Format). read.fotran(), berfungsi untuk membaca file data fixed-format Fortran. read.ftable(), berfungsi untuk membaca format flat contigency table. read.fwf(), berfungsi untuk membaca table dengan format fwf (fixed width formatted) yang akan ditampung ke dalam objek data frame.
Format Data Populer Selain format file text dan file Excel yang telah dicontohkan di atas, pada lingkungan R juga memungkinkan untuk mengimport data dari aplikasi populer lainnya seperti: 1. 2. 3. 4. 5.
SPSS. SAS. Stata. Systat. Dan lain-lain.
SPSS Untuk import data dari file SPSS terlebih dahulu perlu dilakukan file SPSS ke format transport. get file='c:\data_spss.sav'. export outfile='c:\data_spss.por'.
Kemudian gunakan paket Hmisc untuk mengimport data tersebut dengan kode seperti berikut. library(Hmisc) bab4_data_spss = spss.get("data_spss.por", use.value.labels=TRUE)
SAS Untuk import data dari file SAS terlebih dahulu perlu dilakukan file SAS ke format transport. Berikut adalah perintah yang dapat digunakan untuk keperluan tersebut. libname out xport 'data_sas.xpt'; data out.mydata; set sasuser.mydata; run;
76
Kemudian gunakan paket Hmisc untuk mengimport data tersebut dengan kode seperti berikut. library(Hmisc) bab4_data_sas = sasxport.get("data_sas.xpt")
Stata Untuk mengimport data Stata digunakan paket foreign. Dan fungsi yang digunakan untuk import adalah seperti contoh di bawah ini. library(foreign) bab4_data_stata = read.dta("data_stata.dta")
systat Untuk mengimport data systat digunakan paket foreign. Dan fungsi yang digunakan untuk import adalah seperti contoh di bawah ini. library(foreign) bab4_data_systat = read.systat("data_systat.dta")
Tool Import Data Jika terbiasa dengan tool visual untuk melakukan proses import data maka paket Amelia dapat menjawab kebutuhan itu. Caranya adalah dengan mengetikan kode berikut pada command prompt yang bertujuan untuk menginstall paket Amelia. install.packages(“Amelia”)
Setelah proses installasi berhasil maka gunakan kode di bawah ini untuk menampilkan tool Amelia secara stand alone. library(Amelia) AmeliaView()
77
Maka akan ditampilkan antarmuka tool seperti berikut ini.
Gambar 83. Antarmuka tool Amelia. Pada gambar di atas dapat dilihat terdapat tombol untuk import data dengan format CSV, STATA dan SPSS.
Melihat Data Pada bagian ini akan diberikan contoh-contoh penggunaan fungsi-fungsi untuk melihat data.
ls() fungsi ini berguna untuk melihat daftar objek yang aktif pada workspace. Berikut adalah contoh output dari perintah ini.
Gambar 84. Daftar objek yang aktif pada workspace. Jika menggunakan RStudio, daftar objek tersebut juga dapat dilihat pada tab Environment pada bagian Data, seperti yang dapat dilihat pada gambar di bawah ini.
78
Gambar 85. Daftar objek pada tab Environment pada RStudio.
name() fungsi ini berguna untuk melihat variable yang dimiliki suatu objek. Sintaks dari fungsi ini adalah sebagai berikut. name(objek)
Berikut adalah contoh penggunaan fungsi ini dan hasilnya.
Gambar 86. Output penggunaan fungsi names().
str() Fungsi ini untuk menampilkan daftar struktur dari suatu objek. Sintaks dari fungsi ini adalah sebagai berikut. str(objek)
79
Dan pada gambar di bawah ini dapat dilihat contoh output dari fungsi ini.
Gambar 87. Output penggunaan fungsi str().
head() Fungsi ini dapat digunakan untuk menampilkan sejumlah data pertama yang dimiliki suatu objek. Berikut adalah sintaks dari fungsi ini. head(objek, jumlah_data)
Berikut ini adalah contoh output dari fungsi ini.
Gambar 88. Output fungsi head(). Dari contoh di atas dapat dilihat jika nilai jumlah_data adalah 4 maka akan ditampilkan 4 data pertama. Sedangkan jika nilai jumlah_data adalah 7 maka akan ditampilkan 7 data pertama.
tail() Fungsi ini mempunyai kegunaan yang berkebalikan jika dibandingkan dengan fungsi head(). Fungsi ini berguna untuk menampilkan sejumlah terakhir data. Berikut adalah sintaks dari fungsi ini. tail(objek, jumlah_data)
80
Berikut adalah contoh keluaran dari fungsi ini.
Gambar 89. Output fungsi tail(). Dari contoh di atas dapat dilihat jika jumlah_data adalah 4 maka akan ditampilkan 4 data terakhir, sedangkan jika nilai jumlah_data adalah 7 maka akan ditampilkan 7 data terakhir.
Export Data Setelah melakukan perhitungan atau pengolahan data pada lingkungan R, maka hasil perhitungan disimpan sementara pada suatu variable atau objek pada memory. Jika ingin menyimpan data pada variable atau objek tersebut secara permanen maka data tersebut bisa diexport ke file. Data tersebut dapat digunakan kembali pada lingkungan R atau pada lingkungan lain seperti SPSS, SAS, Stata atau Excel. Untuk kebutuhan itu maka dapat digunakan fungsi-fungsi berikut ini.
Teks dengan pemisah tab Untuk menyimpan data ke dalam file teks dengan pemisah tab dapat digunakan fungsi write.table() dengan contoh penggunaan seperti berikut ini. write.table(mtcars, "mtcars.txt", sep="\t")
Excel Sedangkan untuk mengekspor data untuk disimpan pada file dengan format Excel digunakan fungsi write.xlsx() dari paket xlsx. Berikut adalah contoh penggunaan fungsi tersebut. library(xlsx) write.xlsx(mtcars, "mtcars.xlsx")
81
SPSS Sedangkan untuk menyimpan data pada objek ke dalam format SPSS, SAS dan Strata dapat digunakan fungsi write.foreign() dari paket foreign. Berikut adalah contoh kode yang dapat digunakan. Untuk mengekspor data ke format SPSS digunakan kode berikut. write.foreign(mtcars, "mtcars.txt", "mtcars.sps",
package="SPSS")
Untuk mengeksport data ke format SAS digunakan kode berikut. write.foreign(mtcars, "mtcars.txt", "mtcars.sas",
package="SAS")
Sedangkan untuk mengekspor data ke format Stata digunakan kode berikut ini. write.dta(mtcars, "mtcars.dta")
Referensi http://www.statmethods.net/input/importingdata.html http://www.statmethods.net/input/contents.html http://www.statmethods.net/input/exportingdata.html https://cran.r-project.org/doc/contrib/usingR.pdf
82
6
Dasar-Dasar Pembuatan Grafik Dasar Membuat Grafik Berikut ini adalah fungsi-fungsi umum atau fungsi dasar yang digunakan untuk membuat grafik.
plot() Sintaks yang digunakan untuk plot data adalah seperti berikut ini: plot(x, y)
Sedangkan x dan y adalah variable yang berisi data titik pada plot. Sebagai contoh jika digunakan contoh data seperti berikut ini. year = c(1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979) snow.cover = c(6.5, 12.0, 14.9, 10.0, 10.7, 7.9, 21.9, 12.5, 15.5, 9.2) plot(year, snow.cover)
Maka hasilnya dapat dilihat pada tab plot.
Gambar 90. Gambar yang dihasilkan oleh fungsi plot().
title() Untuk memberikan annotasi pada grafik hasil fungsi plot maka dapat dapat digunakan fungsi title() untuk memberikan judul pada grafik tersebut dengan sintaks seperti di bawah ini. title(“title utama”, sub = “sub title”)
83
Maka jika digunakan baris kode di bawah ini. title(“Grafik Volume Salju”, sub = “Data BMKG Jepang”)
Maka hasilnya dapat dilihat pada gambar di bawah ini.
Gambar 91. Memberikan judul pada grafik dengan fungsi title().
text() Contoh selanjutnya adalah menggunakan data usingR.RData yang dapat diuduh pada link berikut ini http://maths-people.anu.edu.au/~johnm/r/dsets/. Simpan file usingR.RData kemudian load data pada file tersebut dengan perintah di bawah ini.
attach("usingR.RData")
Dan hasilnya dapat dilihat seperti pada gambar di bawah ini.
Gambar 92. Memuat data dari file usingR.RData. Dari gambar di atas dapat dilihat terdapat data seperti: 84
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
ais. anesthetic. austpop. Car93.cummary. dewpoint. dolphins. elasticband. florida. hills. huron. islandcities. kiwishade. leafshape. milk. moths. oddbooks. orings. possum. primates. rainforest. seedrates. tinting.
Untuk melihat isi data di atas cukup dengan mengetik nama variable tersebut pada command prompt di R Studio, seperti contoh pada gambar di atas. Berikut ini akan dicontohkan penggunaan fungsi plot() dan title() yang lebih lengkap. Langkah pertama adalah menulis perintah berikut ini untuk memuat data primates. attach(primates)
Kemudian membuat plot antara Bodywt dan Brainwt dengan kode berikut. plot(Bodywt, Brainwt)
Maka akan didapatkan grafik seperti berikut.
85
Gambar 93. Grafik data primates. Kemudian akan digunakan kode di bawah ini untuk membuat anotasi pada grafik berupa title. title("Primata", sub="Data WWF Indonesia")
Selanjutnya memberikan dan pemberian text pada titik-titik pada data dengan kedua baris berikut ini. row.names(primates) monkey","Chimp")
<-
c("Potar
monkey","Gorilla","Human",
"Rhesus
text(x=Bodywt, y=Brainwt, labels=row.names(primates), pos=4)
Dan hasilnya dapat dilihat pada gambar di bawah ini.
86
Gambar 94. Memberikan title dan text pada titik-titik. Pada contoh di atas fungsi plot() yang digunakan masih standar yaitu hanya menggunakan dua parameter saja yaitu variable data untuk sumbu x dan y. Berikut ini adalah contoh penggunaan fungsi plot() dengan penggunaan parameter lainnya. plot(x=Bodywt, y=Brainwt, pch=16, xlab="Body weight (kg)", ylab="Brain weight (g)", xlim=c(0,280), ylim=c(0,1350))
Dan hasilnya dapat dilihat pada gambar di bawah ini.
Gambar 95. Setting grafik dengan menggunakan parameter tambahan pada fungsi plot(). Berikut ini adalah keterangan dari parameter yang digunakan pada fungsi plot() di atas, yaitu: 1. 2. 3. 4.
pch=16, membuat titik yang semula lingkaran putih menjadi lingkaran hitam. xlab, parameter yang digunakan untuk memberikan label pada sumbu x. ylab, parameter yang digunakan untuk memberikan label pada sumbu y. xlim, panjang maksimal sumbu x. 87
5.
ylim, panjang maksimal sumbu y.
parameter yang lain adalah pos=integer, yang berfungsi untuk menentukan posisi label pada titik. Pada gambar di atas secara default digunakan pos=4, sehingga posisi label berada di sebelah kanan titik. Jika digunakan pos=1 maka label akan berada di bawah titik, pos=2 maka label berada di sebelah kiri titik dan pos=3 maka label akan berada di atas titik.
dev.list() fungsi ini berfungsi untuk melihat daftar grafik yang telah dibuat.
dev.off() Fungsi ini berfungsi untuk menghentikan akses ke perangkat grafik.
Histogram Histogram biasanya digunakan digunakan untuk memberikan visualisasi distribusi data. Berikut ini akan diberikan contoh untuk membuat grafik histogram dengan menggunakan fungsi hist(). Misalnya dimiliki data pasien pada suatu rumah sakit yang disimpan pada file Data4Pasien.txt (file dapat dilihat pada project). Untuk itu terlebih dahulu memuat isi file tersebut ke dalam variable data_pasien dengan kode perintah di bawah ini. data_pasien = read.table("Bab4DataPasien.txt", header = TRUE)
Pada gambar di bawah ini dapat dilihat sebagaian isi dari data tersebut.
Gambar 96. Memuat isi file Bab4DataPasien.txt ke data_pasien. Dari data di atas dapat dilihat data tersebut memiliki beberapa atribut yaitu: 1. 2. 3. 4. 5. 6. 7.
AGE. HEIGHT. WEIGHT. CHOL. SMOKE. BLOOD. MORT.
88
Sehingga jika ingin membuat grafik histogram untuk melihat distribusi data berdasarkan umum dapat digunakan sintaks berikut ini. hist(nama_variable$nama_atribut)
Sehingga jika ingin membuat histogram dari atribut AGE yang dimiliki oleh data data_pasien, maka digunakan kode di bawah ini. hist(data_pasien$AGE)
Dan hasilnya dapat dilihat pada gambar di bawah ini.
Gambar 97. Histogram data_pasien$AGE. Berikut ini adalah contoh fungsi hist() yang menggunakan parameter-parameter pelengkap, seperti parameter pelengkap untuk memberikan title dan label pada sumbu x dan y. hist(data_pasien$AGE, main = "Grafik Pasien Berdasarkan Umur", xlab = "Umur", ylab = "Jumlah Pasien")
Dan gambar berikut adalah hasil dari kode di atas.
89
Gambar 98. Histogram dengan title dan label.
Density Grafik density dapat digunakan untuk melihat distribusi dari atribut data secara lebih efektif jika dibandingkan dengan grafik histogram. Sintaks yang dapat digunakan untuk membuat grafik density adalah sebagai berikut: plot(density(data))
Sehingga jika ingin membuat grafik density dari atribut AGE pada data_pasien maka digunakan kode berikut ini. plot(density(data_pasien$AGE))
Dan pada gambar berikut ini hasil dari kode tersebut.
Gambar 99. Grafik density data_pasien$AGE.
90
Dot Plot Untuk membuat plot titik maka digunakan fungsi dotchart(). Berikut ini adalah sintaks sederhana untuk memulai menggunakan fungsi ini. dotchart(data, labels, cex, main, xlab)
Keterangan: 1. 2. 3. 4. 5.
data, data yang akan digunakan. label, label dari setiap titik yang digunakan. cex, ukuran karakter yang digunakan. Penyesuaian ukuran karakter berguna agar tulisan yang ditampilkan pada chart tidak saling tumpang tindih. main, title utama chart. xlab, title untuk busur x.
Sebagai contoh digunakan data mobil dari mtcars, untuk memuat data dari mtcars dapat digunakan fungsi sebagai berikut. attach(mtcars)
Untuk melihat data dapat digunakan fungsi berikut. tail(mtcars, 10)
Berikut adalah 10 record dari 200 record pada mtcars yang ditampilkan.
Gambar 100. Data pada mtcars. Selanjutnya digunakan baris berikut ini untuk membuat chart dengan fungsi dotchart(). dotchart(mtcars$mpg, labels = row.names(mtcars), "Penggunaan Minyak per Mil", xlab = "Mil/Galon")
cex
=
.5,
main
=
Dan hasilnya dapat dilihat pada gambar di bawah ini.
91
Gambar 101. Chart dengan fungsi dotchart().
Bar Plot Untuk membuat chart berbentuk bar maka dapat digunakan fungsi barplot(). sederhana untuk menggunakan fungsi ini adalah sabagai berikut:
Sintaks
barplot(data, main=”title chart”, xlab=”label untuk busur x”)
Parameter data adalah variable yang bertipe vector atau matrix. Berikut adalah contoh kode untuk membuat chart bar sederhana. barplot(table(mtcars$gear), main="Distribusi Mobil", xlab="Jumlah Gears")
Hasil dari kode di atas dapat dilihat pada gambar di bawah ini.
92
Gambar 102. Chart bar distribusi mobil. Pada contoh kode di atas digunakan bantuan fungsi table() untuk menghitung jumlah mobil sesuai dengan kelompok jumlah gear yang dimiliki. Sebagai contoh pada gambar di atas dapat dilihat mobil yang memiliki jumlah gear 3 adalah lebih dari 12, sedangkan mobil yang memiliki jumlah gear 5 adalah sekitar 4. Jika ingin menampilkan char bar secara horizontal maka dapat digunakan parameter horiz dengan nilai TRUE, seperti contoh kode seperti berikut ini. barplot(table(mtcars$gear), main="Distribusi Mobil", xlab="Jumlah Gear", horiz = TRUE)
Maka dapat dilihat hasilnya seperti berikut ini.
Gambar 103. Chart bar ditampilkan secara horizontal.
Jika ingin mengubah label untuk masing-masing bar maka bisa digunakan parameter names.arg. Parameter ini dapat diisi oleh variable vector atau list. Berikut adalah contoh kode yang dapat digunakan. barplot(table(mtcars$gear), main="Distribusi Mobil", xlab="Jumlah Gear", horiz = TRUE, names.arg=c("3 Gears", "4 Gears", "5 Gears"), cex.names = 0.8)
93
Dan berikut adalah gambar chart hasil dari kode di atas.
Gambar 104. Chart bar horizontal dengan label. Dengan chart bar juga dapat menampilkan data lebih dari satu, sebagai contoh menampilkan data jumlah gear dan data vs maka dapat digunakan kode seperti berikut ini. barplot(table(mtcars$vs, mtcars$gear), main="Distribusi mobil berdasarkan Gear dan VS", xlab="Jumlah Gear", names.arg=c("3 Gears", "4 Gears", "5 Gears"), cex.names = 0.8, legend = rownames(table(mtcars$vs, mtcars$gear)))
Dan chartnya bisa dilihat pada gambar di bawah ini. Chart seperti pada gambar di bawah ini dikenal sebagai chart stack bar.
Gambar 105. Chart stack bar.
Tipe chart bar yang lain dapat dibuat dengan melakukan plot data group dengan menambahkan parameter beside dengan nilai adalah TRUE. Berikut adalah contoh kode yang digunakan. barplot(table(mtcars$vs, mtcars$gear), main="Distribusi mobil berdasarkan Gear dan VS", xlab="Jumlah Gear", names.arg=c("3 Gears", "4 Gears", "5 Gears"), cex.names = 0.8, legend = rownames(table(mtcars$vs, mtcars$gear)), beside = TRUE)
94
Dan berikut adalah chart bar group.
Gambar 106. Chart bar group.
Line Plot Untuk membuat plot berbentuk garis dapat digunakan fungsi lines(x, y, type=) dimana x dan y adalah data numerik bertipe data vector yang digunakan sebagai data titik-titik yang akan dihubungkan menjadi garis. Sedangkan parameter type dapat berisi nilai berikut ini: 1. 2. 3. 4. 5. 6.
7.
8. 9.
p, titik. l, garis. o, titik dan garis. b, titik dan garis tetapi ada sedikit ruang antara setiap titik dan garis. c, garis putus-putus dimana ruang pemutusnya adalah lokasi pertemuan setiap nilainilai x dan y. s, hubungan antara titik pertama dan berikutnya dengan cara menarik garis horisontal terlebih dahulu kemudian garis vertikal ke garis kedua sehingga menghasilkan garis seperti tangga. S, hubungan antara titik pertama dan berikutnya dengan cara menarik garis vertikal terlebih dahulu kemudian garis horisontal ke garis kedua sehingga menghasilkan garis seperti tangga. h: garis vertikal seperti histogram. n: tidak menghasilkan titik atau garis.
Fungsi lines() tidak dapat berdiri sendiri untuk menghasilkan gambar chart seperti fungsifungsi di atas. Untuk itu diperlukan fungsi plot() untuk menggambar chart. Berikut ini adalah contoh kode yang akan menghasilkan hasil fungsi line dengan nilai parameter type yang berbeda-beda. x = c(1:5) y = x par(pch=22, col="red") par(mfrow=c(2,4)) opts = c("p","l","o","b","c","s","S","h") for(i in 1:length(opts)){
95
heading = paste("type=",opts[i]) plot(x, y, type="n", main=heading) lines(x, y, type=opts[i]) }
Dan berikut adalah hasil dari kode program di atas.
Gambar 107. Chart line dengan berbagai nilai parameter type. Jika ingin memberikan titik pada setiap pertemuan x dan y maka bisa menghilangkan penggunaan parameter type = “n” pada fungsi plot() seperti pada kode di bawah ini. x = c(1:5) y = x par(pch=22, col="red") par(mfrow=c(2,4)) opts = c("p","l","o","b","c","s","S","h") for(i in 1:length(opts)){ heading = paste("type=",opts[i]) plot(x, y, main=heading) lines(x, y, type=opts[i]) }
Sehingga akan dihasilkan chart seperti berikut.
96
Gambar 108. Chart line tanpa menggunakan parameter type=”n” pada fungsi plot().
Pie Plot Pada R, fitur untuk membuat chart pie adalah terbatas. Hal ini dikarenakan ada pendapat yang menyatakan bahwa length lebih akurat dibandingkan volume. Oleh karena itu disarankan untuk menggunakan plot bar dan dot dibandingkan pie. Fungsi yang digunakan untuk mengambarkan chart pie adalah pie() dengan sintaks: pie(x, labels=)
Dan berikut adalah contoh penggunaannya. pie_data <- c(10, 12,4, 16, 8) pie_label = c("Kalimantan", "Sumatera", "Jawa", "Sulawesi", "Papua") pie(pie_data, labels = pie_label, main="Provinsi")
Dan berikut adalah gambar chart pie dari kode di atas.
97
Gambar 109. Chart pie.
Box Plot Box plot adalah salah satu cara dalam statistik deskriptif untuk menggambarkan secara grafik dari data numeris melalui lima ukuran yaitu: 1. 2. 3. 4. 5.
Nilai minimum atau Nilai observasi terkecil. Kuartil terendah atau kuartil pertama (Q1) yang memotong 25 % dari data terendah. Median (Q2) atau nilai pertengahan. Kuartil tertinggi atau kuartil ketiga (Q3) yang memotong 25 % dari data tertinggi. Nilai observasi terbesar.
Selain itu dalam boxplot juga ditunjukkan nilai outlier dari observasi. Fungsi yang digunakan untuk membuat plot ini adalah boxplot() dengan sintaks sebagai berikut: boxplot(x,data= …)
Parameter x adalah formula atau rumus sedangkan parameter data dapat berisi variable dengan tipe data frame. Berikut ini adalah contoh penggunaanya fungsi boxplot(). boxplot(mpg~cyl,data=mtcars, Silinder", ylab="mil/galon")
main="Data
Jarak
Tempuh",
xlab="Jumlah
Dari kode di atas dapat dilihat formula atau rumus x berisi seperti berikut: mpg~cyl dan parameter data diisi oleh mtcars. Formula mpg~cyl menandakan bahwa data numerik mpg akan dikelompokkan ke dalam group cyl atau jumlah silinder. Berikut ini adalah data mpg-cyl jika disimpan dalam variable bertipe table.
98
Gambar 110. Data jarak tempuh. Dari data di atas dapat dilihat pada baris pertama yang memberikan informasi bahwa 2 buah mobil dengan jumlah mobil dengan silinder 8 mengkonsumsi 10.4 mil/galon. Sehingga hasil dari kode di atas dapat dilihat pada gambar di bawah ini.
Gambar 111. Chart boxplot data jarak tempuh. Berikut adalah keterangan dari box pada gambar di atas.
99
Gambar 112. Keterangan box pada boxplot. Dengan melihat keterangan pada gambar 112 dan hasil plot pada gambar 111 maka sebagai contoh group mobil dengan jumlah silider 4 akan didapat informasi berikut ini: 1. 2. 3. 4. 5.
Min, nilai minimum seperti ditunjuk adalah di atas nilai 20, jika dilihat pada data pada gambar 108 maka nilainya adalah 21.4. Q1, pada chart nilai Q1 adalah sekitar 23 atau 24. Media atau Q2, pada chart nilainya adalah sekitar 26. Q3, pada chart nilai Q3 adalah sekitar 30 lebih. Max, nilai maksimum yang ditunjukkan pada chart adalah sekitar 33 atau 34.
Sedangkan pada contoh group mobil dengan silinder 8 dapat dilihat terdapat outlier yang memberikan informasi bahwa ada data yang berada pada area berikut: 1. 2.
Q3 + (1.5 x IQR) < outlier ≤ Q3 + (3 x IQR) Q1 - (1.5 x IQR) > outlier ≥ Q1 - (3 x IQR)
Selain itu juga ada istilah nilai ekstrim jika pada area Q3 + (3 x IQR) atau lebih kecil dari Q1 – (3 x IQR).
Scatter Plot Untuk membuat plot jenis ini bisa menggunakan fungsi plot() dengan sintaks seperti di bawah ini: plot(x, y)
Dan beriku ini adalah contoh kode penggunaan fungsi plot(). attach(mtcars) plot(wt, mpg, main="Scatterplot", xlab="Berat Mobil", ylab="mil/galon")
Dan berikut adalah hasilnya.
100
Gambar 113. Contoh hasil plot scatter. Selain menggunakan fungsi plot() juga bisa digunakan fungsi-fungsi lain dari library pada paket tambahan diluar fungsi default dari R, seperti library: 1. 2. 3.
Fungsi scatterplot3d() pada library scatterplot3d untuk membuat plot 3d. Paket hexbin untuk membuat high density scatter plot. Fungsi scatterplot() pada library car.
Export Gambar Selain mengekspor data yang disimpan pada objek, juga dimungkinkan untuk mengekspor gambar chart hasil plot untuk disimpan dalam file. Format file yang bisa digunakan adalah: 1. 2. 3. 4. 5. 6.
PDF menggunakan fungsi pdf(“nama_file.pdf”). WMF, windows metafile menggunakan fungsi win.metafile(“nama_file.wmf”). PNG, menggunakan fungsi png(“nama_file.png”). JPEG, menggunakan fungsi jpeg(“nama_file.jpg”). BMP, menggunakan fungsi bmp(“nama_file.bmp”). Postscript, menggunakan fungsi postscript(“nama_file.ps”).
Berikut ini adalah beberapa contoh kode yang digunakan untuk mengekspor chart hasil plot ke dalam file dengan format di atas. pdf("kumpulan_chart.pdf") barplot(table(mtcars$gear), main="Distribusi Mobil", xlab="Jumlah Gears") dev.off()
Maka outputnya adalah file 1 halaman pdf yang berisi 1 gambar chart bar. Jika ingin dalam 1 file pdf tersebut memiliki lebih dari 1 gambar chat maka bisa dibuat kode seperti berikut. pdf("kumpulan_chart.pdf") barplot(table(mtcars$gear), main="Distribusi Mobil", xlab="Jumlah Gears") boxplot(mpg~cyl,data=mtcars, main="Data Jarak Tempuh", xlab="Jumlah Silinder", ylab="mil/galon")
101
plot(wt, mpg, main="Scatterplot", xlab="Berat Mobil", ylab="mil/galon") dev.off()
Jika digunakan 5 baris di atas maka akan dihasilkan 1 file pdf dengan nama kumpulan_chart.pdf dengan halaman sebanyak 3 halaman, dimana setiap halaman akan berisi sebuah gambar chart. Sebagai contoh dapat dilihat pada gambar halaman PDF berikut ini. Pada lingkaran merah di gambar di bawah ini dapat dilihat jumlah halaman.
Gambar 114. Halaman pertama file kumpulan_chart.pdf. Pada gambar selanjutnya dapat dilihat chart yang lain pada halaman kedua dan ketiga.
102
Gambar 115. Halaman kedua file kumpulan_chart.pdf.
Gambar 116. Halaman ketiga file kumpulan_chart.pdf. Hal ini tidak berlaku jika diekspor ke file gambar seperti PNG, JPG, BMP dan lainnya karena pada file gambar tidak mengenal halaman seperti file bertipe dokumen seperti PDF. Jika cara seperti contoh di atas dilakukan maka yang disimpan adalah gambar cari perintah plot terakhir. Dari contoh di atas maka penggunaan fungsi 1 sampai 6 di atas membuat fungsi plot yang digunakan tidak akan langsung ditampilkan di layar komputer pada tab plot seperti contohcontoh yang telah diberikan pada bagian Plot Data.
103
Pada baris terakakhir pada setiap contoh di atas terdapat fungsi dev.off(). Fungsi tersebut telah dibahas pada bagian Plot Data. Jika fungsi tersebut belum dipanggil maka file pdf atau gambar tidak akan bisa dibuka karena dianggap file tersebut masih diakses untuk ditulisi.
Referensi http://www.statmethods.net/graphs/ https://www.datacamp.com/community/tutorials/make-histogram-basic-r https://www.researchgate.net/publication/278023412_Membuat_BoxPlot_dengan_Program_Minitab_dan_SPSS
104
7
Dasar-Dasar Statistik
Pada bab ini dibahas mengenai fungsi-fungsi dasar pada lingkungan R yang umum digunakan untuk pengolahan statistik.
Mean, Median & Modus Ketiga istilah ini adalah istilah-istilah yang umum ditemui pada statistik. Ketiga
Mean Mean atau rerata adalah rata-rata nilai dari data yang didapat dengan cara menjumlahkan seluruh nilai dibagi jumlah item pada data. Mean berfungsi memberi informasi mengenai nilai tengahan dari sebaran data-data yang ada, namun ini tidak cukup untuk dijadikan acuan karena dalam kasus tertentu, data yang stabil dan data yang memiliki jarak yang lebar, dapat saja memiliki nilai rata-rata yang sama. Contoh: Data dengan nilai-nilai 4,4,4,4 memiliki nilai rata-rata yang sama dengan data 1,3,5,7. Sebagai contoh jika dimiliki data pada lingkungan R sebagai berikut: data = c(1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9)
Maka untuk mendapatkan mean atau rerata dapat digunakan fungsi mean() berikut ini: > mean(data) [1] 5.083333
Sehingga didapatkan nilai rerata adalah 5,083333.
Median Median adalah nilai yang berada pada posisi di tengah barisan item data yang telah diurut dari nilai terkecil sampai terbesar. Median berfungsi menentukan nilai data yang berada di tengah populasi. Nilai tengah ini dipakai untuk mengetahui range antara data terkecil-median dan data terbesar-median. Sedangkan untuk mendapatkan median atau nilai tengah digunakan fungsi median() seperti contoh berikut ini: > median(data) [1] 4.5
Sehingga di dapat nilai median adalah 4.5.
105
Modus Modus atau mode adalah nilai yang sering muncul pada data. Ini dapat memberi gambaran mengenai konsistensi data. Semakin besar frekuensi modus dibandingkan jumlah total data, semakin konsisten data yang ada. Selanjutnya adalah modus atau nilai yang sering muncul pada data. Jika melihat isi item data pada contoh di atas maka kita dapat melihat nilai yang sering muncul adalah 4 sebanyak 3 kali kemunculan. Fungsi untuk mencari modus tidak disediakan secara default di lingkuran R sehingga untuk mendapatkan nilai tersebut dapat dilakukan dengan beberapa cara alternatif yaitu: 1. 2.
Membuat fungsi sendiri. Menginstall paket.
Cara pertama adalah dengan membuat kode program sederhana untuk mendapatkan fungsionalitas mencari modus. Berikut ini adalah kode fungsi modus(). modus <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] }
Dan berikut adalah penggunaan fungsi modus() ini: > modus(data) [1] 4
Cara kedua adalah dengan menginstall paket modeest dengan cara berikut ini. install.packages("modeest")
Setelah proses installasi berhasil maka dapat digunakan fungsi mlv() dengan cara berikut ini untuk mencari modus pada data. > mlv(data, method = "mfv") Mode (most likely value): 4 Bickel's modal skewness: 0.25 Call: mlv.default(x = data, method = "mfv")
Pada output fungsi mlv() di atas dapat dilihat nilai Mode (most likely value) : 4.
Hubungan Antara Mean, Median & Modus Ketiga nilai ini sering disebut sebagai measure of central tendency sebab kecenderungan dari nilai-nilai tersebut memusat pada bagian tengah suatu perangkat data. Pada analisis data biasanya fokus perhatian tidak terletak pada keseluruhan data, tetapi terletak hanya dimana data tersebut memusat. Oleh karena itulah nilai-nilai rata-rata, median dan modus sering digunakan untuk mewakili seperangkat data dalam analisis statistik. Hubungan antara ketiga nilai tersebut dapat memberikan informasi tentang distribusi data. Secara sederhana ada tiga kemungkinan hubungan yang terjadi yaitu: 1.
Jika mean, median dan modus bernilai sama, maka kurva distribusi frekuensi akan berbentuk simetris. 106
2. 3.
Jika mean lebih kecil daripada median dan modus, maka kurva distribusi akan lebih besar ke kanan. Jika mean lebih besar daripada median dan modus, maka kurva distribusi akan lebih besar ke kiri.
Untuk memvisualkan pernyataan di atas maka dibuat fungsi untuk membuat plot distribusi data dan plot nilai mean, median dan modus. DistribusiChart.R modus <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } distribusi <- function(x) { hist(data, col = "peachpuff", border = "black", prob = TRUE) lines(density(data), lwd = 2, col = "chocolate3") abline(v = mean(data), col = "royalblue", lwd = 2) abline(v = median(data), col = "green", lwd = 2) abline(v = modus(data), col = "red", lwd = 2) }
Untuk memvisualkan kemungkinan hubungan pada pernyataan pertama maka digunakan data sebagai berikut. data = c(1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 7)
Dengan menggunakan fungsi distribusi() di atas maka akan dapat dilihat gambar seperti berikut.
Gambar 117. Distribusi data ketika nilai mean, median dan modus adalah sama. Selanjutnya akan digunakan data berikut ini untuk memvisualkan pernyataan kedua di atas. data = c(1, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7)
Jika data tersebut dimasukkan ke dalam fungsi distribusi() maka akan didapatkan chart seperti berikut ini. Garis biru menyatakan nilai mean, garis hijau adalah nilai untuk median sedangkan garis merah merupakan nilai modus. 107
Gambar 118. Distribusi data jika mean lebih kecil daripada median dan modus. Dan untuk memvisualkan pernyataan terakhir atau yang ketiga digunakan data seperti berikut ini. data = c(1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 5,6)
Dengan menggunakan fungsi distribus() maka akan dihasilkan chart seperti berikut ini.
Gambar 119. Distribusi data jika mean lebih besar daripada median dan modus.
108
Linear Regression Pendahuluan Analisis regresi adalah perangkat statistik yang telah luas digunakan untuk membangun model hubungan antara dua variable. Salah satu variabel ini disebut variabel prediktor yang nilainya didapatkan melalui percobaan. Variabel lain disebut variabel respon yang nilainya berasal dari variabel prediktor. Linear regression dapat dapat ditulis dengan rumus matematika sederhana, yaitu: y = ax + b
Keterangan: 1. 2. 3.
y adalah variable respon. x adalah variable prediktor. a dan b adalah konstanta atau kofisien.
Salah satu contoh kasus yang dapat diselesaikan dengan linear regression adalah prediksi berat badan seseorang ketika diketahui tinggi badannya. Secara sederhana cara kerja linear regression dapat dijelaskan dengan gambar di bawah ini.
Gambar 120. Plot linear regression tinggi dan berat. Keterangan: 1.
2.
3.
Titik-titik biru adalah data-data hasil pengamatan hubungan tinggi dan berat badan. Sebagai contoh untuk titik biru pertama dapat diketahui tinggi badan adalah 128 cm dengan berat badan adalah 47 kg. Kemudian garis hitam adalah persamaan yang paling dapat mewakili hubungan relasi seluruh titik-titik biru. Persamaan tersebut dapat ditentukan dengan linear regression. Sedangkan titik merah merupakan hasil prediksi data baru dari orang yang memiliki tinggi 170 cm. Dengan menarik garis dari titik 170,0 sampai menyentuh garis hitam,
109
kemudian menarik garis ke arah sumbu y maka dapat diketahui informasi dari orang yang memiliki tinggi 170 cm adalah memiliki berat kira-kira 76 kg.
Implementasi Untuk melakukan linear regression pada lingkuran R maka perlu dilakukan langkah-langkah sederhana di bawah ini. 1. 2. 3. 4. 5.
Temukan data nyata hasil pengamatan dari tinggi dan berat badan. Buat model hubungan antar tinggi dan berat badan dengan menggunakan fungsi lm() pada lingkungan R. Setelah mendapatkan koefisien dari model yang telah dibuat kemudian dapat dibuat persamaan matematikanya. Dapatkan rangkuman (summary) dari model untuk mengetahui rata-rata error pada proses prediksi, atau sering disebut sebagai residual. Gunakan fungsi predict() untuk memprediksi berat badan dari data yang baru.
Implementasi langkah-langkah di atas pada lingkungan R dijelaskan di bawah ini. Data nyata hasil pengamatan untuk tinggi dan berat dapat dilihat pada kode di bawah ini. tinggi = c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131) berat = c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
Variable tinggi adalah variable prediktor sedangkan variable berat adalah variable respon. Selanjutnya akan dibuat model dari data tersebut dengan menggunakan fungsi lm(). Fungsi lm() mempunyai sintaks seperti berikut: lm(formula, data)
Dalam penggunaannya untuk membuat model hubungan antara tinggi dan berat badan dapat dilakukan dengan cara seperti berikut ini. relasi = lm(berat ~ tinggi)
Setelah model dibuat maka dapat diketahui koefisien dari model dengan menggunakan memanggil variable relasi. > relasi Call: lm(formula = berat ~ tinggi) Coefficients: (Intercept) -38.4551
tinggi 0.6746
Dengan didapatkannya koefisien tersebut maka dapat dibuat persamaan sebagai berikut: berat = 0.6746tinggi - 38.4551
Atau y = 0.6746x - 38.4551
110
Sedangkan untuk mengetahui rangkuman (summary) dari model dapat digunakan fungsi summary() atau summary.lm(), berikut ini digunakan fungsi summary.lm(). > summary.lm(relasi) Call: lm(formula = berat ~ tinggi) Residuals: Min 1Q -6.3002 -1.6629
Median 0.0412
3Q 1.8944
Max 3.9775
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -38.45509 8.04901 -4.778 0.00139 ** tinggi 0.67461 0.05191 12.997 1.16e-06 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 3.253 on 8 degrees of freedom Multiple R-squared: 0.9548, Adjusted R-squared: 0.9491 F-statistic: 168.9 on 1 and 8 DF, p-value: 1.164e-06
Setelah model dibuat maka dapat dipergunakan untuk melakukan prediksi dengan fungsi predict(). Sebagai contoh jika ingin mengetahui berat seseorang yang memiliki tinggi 170, maka proses prediksi dapat dilakukan dengan cara di bawah ini. data_baru = data.frame(tinggi = 170) prediksi_data_baru = predict(relasi,data_baru)
Hasil prediksi berat orang dengan tinggi 170 dapat dilihat dengan memanggil variable prediksi_data_baru. Di bawah ini diketahui beratnya adalah 76.22869. > prediksi_data_baru 1 76.22869
Visualisasi Untuk membuat visualisasi model dan prediksi yang dibuat di atas maka dibuat kode berikut ini. plot(tinggi,berat,col = "blue",main = "Regresi Tinggi & Berat",cex = 1.3,pch = 16,xlab = "Tinggi(cm)",ylab = "Berat(kg)") abline(lm(berat~tinggi)) points(170, prediksi_data_baru, col = "red", cex = 1.3, pch = 16)
Baris pertama dari kode di atas akan melakukan plot data tinggi dan berat. Hasil dari kode bares pertama adalah seperti gambar di bawah ini.
111
Gambar 121. Plot data tinggi dan berat. Sedangkan baris kedua bertujuan untuk menggambar garis linear hasil dari model yang dibuat dari fungsi lm(). Garis tersebut mempunyai persamaan y = 0.6746x - 38.4551.
Gambar 122. Garis model linear regression. Baris terakhir berfungsi untuk menunjukkan titik memprediksi data baru, dimana diketahui tinggi seseorang adalah 170 cm. Dari gambar dapat dilihat titik merah yang berada pada garis model linear regression.
112
Gambar 123. Prediksi data baru tinggi 170 cm. Sedangkan pada gambar di bawah ini adalah prediksi data baru untuk tinggi 185 cm yang hasilnya bisa dilihat pada titik warna hijau.
Gambar 124. Prediksi data baru tinggi 185 cm.
Multiple Regression Pendahuluan Multiple regression merupakan pengembangan dari linear regression. Pada multiple regression dimungkinkan untuk dimiliki lebih dari satu variable prediktor dan sebuah variable respon. y = a + b1x1 + b2x2 +...bnxn
113
Keterangan: 1. 2. 3.
y adalah variable respon. a, b1, b2 … bn adalah kofisien. x1, x2, x3 … adalah variable prediktor.
Implementasi Implementasi multiple regression pada lingkungan R dapat dilakukan dengan menggunakan fungsi lm() dengan sintaks berikut ini: lm(y ~ x1+x2+x3...,data)
Sebagai contoh akan digunakan dataset dari mtcars yang telah tersedia pada lingkungan R. Pada contoh ini akan cari hubungan antara konsumsi bahan bakar per mil (mpg) dengan perpindahan silinder (disp), horse power (hp) dan berat mobil (wt). Artinya pada kasus ini mpg menjadi variable respon sedangkan yang menjadi variable prediktor adalah disp, hp dan wt. Langkah pertama yang harus dilakukan adakah menyiapkan data dari variable-variable tersebut dengan cara seperti berikut ini. data_mobil <- mtcars[,c("mpg","disp","hp","wt")]
Setelah data telah disiapkan, langkah selanjutnya adalah membuat model hubungan antara variable-variable tersebut dengan menggunakan fungsi lm() seperti di bawah ini. relasi_mobil <- lm(mpg~disp+hp+wt, data = data_mobil)
Untuk melihat hasil di atas dapat dilakukan dengan memanggil objek relasi_mobil seperti contoh di bawah ini. > relasi_mobil Call: lm(formula = mpg ~ disp + hp + wt, data = data_mobil) Coefficients: (Intercept) 37.105505
disp -0.000937
hp -0.031157
wt -3.800891
Dari output di atas maka dapat diketahui persamaan hubungan antar variable-variable sebagai berikut: y = 37.15+(-0.000937)*x1+(-0.0311)*x2+(-3.8008)*x3
Atau y = 37.15+(-0.000937)*disp + (-0.0311)*hp + (-3.8008)*wt
Dengan persamaan tersebut jika telah diketahui nilai variable disp, hp dan wt yang baru maka dapat diprediksi nilai mpg.
114
Misal dimiliki nilai baru dengan nilai disp = 221, hp = 102 dan wt = 2.91 maka dapat ditulis deklarasi data baru pada lingkungan R dengan cara seperti berikut. data_mobil_baru =
data.frame(disp = 221, hp = 102, wt=2.91)
Kemudian untuk melakukan prediksi dapat dilakukan dengan menggunakan fungsi predict() seperti contoh berikut ini. > predict(relasi_mobil, data_mobil_baru) 1 22.65987
Dari hasil di atas dapat diketahui bahwa prediksi nilai mpg adalah 22.65987.
Logistic Regression Pendahuluan Logistic regression adalah model regresi dimana variable respon memiliki nilai kategori seperti true dan false, atau 0 dan 1. Dari definisi tersebut dapat dilihat perbedaannya dengan dua model linear di atas. Persamaan dan perbedaan mendasar dari model ini dengan dua model sebelumnya adalah: 1.
2.
Persamaan: nilai variable prediktor dapat bernilai angka dengan rentang yang bebas. Sebagai contoh 5, -13, 22.3, 100 dan lain-lain. Jumlah variable prediktor dapat berjumlah satu seperti linear regression atau berjumlah lebih dari satu variable seperti multiple regression. Tetapi dalam implementasinya lebih banyak menggunakan jumlah varible predictor lebih dari satu. Perbedaan: nilai variable respon pada model regression ini hanya dapat bernilai 1 atau 0. Sedangkan nilai variable respon pada dua model regression sebelumnya dapat bernilai angka dengan rentang yang bebas.
Berikut ini adalah contoh data yang dapat diproses dengan model logistic regression. Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant Porsche 914-2 Lotus Europa Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E
am cyl 1 6 1 6 1 4 0 6 0 8 0 6 1 4 1 4 1 8 1 6 1 8 1 4
hp 110 110 93 110 175 105 91 113 264 175 335 109
wt 2.620 2.875 2.320 3.215 3.440 3.460 2.140 1.513 3.170 2.770 3.570 2.780
Dari contoh data di atas yang menjadi variable prediktor adalah cyl, hp dan wt. Sedangkan variable respon adalah am, yang bernilai 0 jika transmisi yang digunakan adalah automatic atau 1 jika transmisi yang digunakan adalah manual. Contoh-contoh dunia nyata yang bisa dikerjakan dengan model ini adalah: 1.
Pengaruh tingkat pendidikan, lapangan kerja yg dimasuki, pendapatan, pengeluaran, jumlah anggota rumah tangga terhadap status kemiskinan (miskin/tidak miskin). 115
2.
Pengaruh pendapatan keluarga, banyaknya anggota keluarga, jenis rumah, usia kepala keluarga terhadap kepemilikan rumah (punya rumah/tidak punya rumah).
Implementasi Untuk membuat model logistic regression pada lingkungan R digunakan fungsi glm(). Data yang digunakan adalah dataset mtcars. Untuk mendapatkan data yang sesuai dengan model ini maka dilakukan pemilahan data dengan cara seperti berikut ini. data_logistic <- mtcars[,c("am","cyl","hp","wt")]
Selanjutnya dilakukan membuatan model dengan perintah glm() dengan contoh seperti berikut ini. relasi_logistic = glm(formula = am ~ cyl + hp + wt, data = data_logistic, family = binomial)
Dan untuk melihat rangkuman hasil model di atas dapat dilakukan dengan cara memanggil objek relasi_logistic. > relasi_logistic Call: glm(formula = am ~ cyl + hp + wt, family = binomial, data = data_logistic) Coefficients: (Intercept) 19.70288
cyl 0.48760
hp 0.03259
Degrees of Freedom: 31 Total (i.e. Null); Null Deviance: 43.23 Residual Deviance: 9.841 AIC: 17.84
wt -9.14947 28 Residual
Untuk mendapatkan informasi yang lebih lengkap dapat menggunakan fungsi summary() atau summary.glm() maka akan didapatkan output seperti berikut ini. > summary(relasi_logistic) Call: glm(formula = am ~ cyl + hp + wt, family = binomial, data = data_logistic) Deviance Residuals: Min 1Q Median -2.17272 -0.14907 -0.01464
3Q 0.14116
Max 1.27641
Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 19.70288 8.11637 2.428 0.0152 * cyl 0.48760 1.07162 0.455 0.6491 hp 0.03259 0.01886 1.728 0.0840 . wt -9.14947 4.15332 -2.203 0.0276 * --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 43.2297 Residual deviance: 9.8415 AIC: 17.841
on 31 on 28
degrees of freedom degrees of freedom
Number of Fisher Scoring iterations: 8
116
Selanjutnya jika ada data baru, untuk mendapatkan prediksi nilai am dari kasus di atas maka dilakukan langkah-langkah berikut. Jika dimiliki data baru seperti berikut. data_logistic_baru = data.frame(cyl=8, hp=210, wt=3.5)
Kemudian gunakan fungsi predict() atau predict.glm(). penggunaan salah satu fungsi tersebut.
Berikut ini adalah contoh
> predict(relasi_logistic, data_logistic_baru, type="response") 1 0.171472
Dari nilai tersebut diketahui kemungkinan data_logistic_baru cocok dengan penggunaan transmisi manual adalah 17%, artinya data baru ini lebih cocok menggunakan transmisi automatic atau nilai am = 1. Untuk mendapatkan nilai am adalah 0 atau 1, maka dapat dibuat fungsi dengan kode pemrograman seperti berikut ini. predict_am <- function(var_relasi_logistic, var_data_logicstic) { persentase_am = predict.glm(var_relasi_logistic, var_data_logicstic, type = "response") if(persentase_am < 0.5) { sprintf("am = 1") } else { sprintf("am = 0") } }
Dan berikut cara penggunaan fungsi predict_am() tersebut. > predict_am(relasi_logistic, data_logistic_baru) [1] "am = 1"
Normal Distribution Pendahuluan Pada bagian Mean, Median & Modus telah dijelaskan tentang hubungan antara mean, median dan modus. Pada bagian tersebut terdapat penjelasan tentang keadaan dimana nilai mean, median dan modus memiliki nilai yang sama sehingga dihasilkan grafik density yang simetris seperti pada gambar di bawah ini.
117
Gambar 125. Kurva density ketika nilai mean, median dan modus adalah sama. Pada bagian ini akan dibahas tentang normal distribution (distribusi normal). Beberapa ciri distribusi normal adalah saat nilai mean, median dan modus sama dan nilainya adalah nol (0). Sehingga kurva distribusi normal terlihat seperti bel yang simetris.
Gambar 126. Kurva distribusi normal.
Jika nilai δ (deviasi standar) bernilai 1 maka dapat disebut sebagai standard normal distribution. Luas daerah di bawah kurva adalah 1 dimana ½ di sisi kanan dan ½ di sisi kiri. Luas di bawah kurva normal adalah satu atau 100%. Sedangkan jika diketahui interval berikut: 1. 2. 3.
µ ± 1σ maka jumlah yang diliputi di bawah kurva adalah ∼ 68% dari distribusi. µ ± 2σ maka jumlah yang diliputi di bawah kurva adalah ∼ 95% dari distribusi. µ ± 3σ maka jumlah yang diliputi di bawah kurva adalah ∼ 100% dari distribusi. 118
Gambar 127. Luar di bawah kurva sesuai panjang deviasi standar.
Implementasi Pada lingkunan R terdapat empat fungsi yang dapat digunakan untuk menghasilkan distribusi normal, yaitu: 1. 2. 3. 4.
dnorm(x, mean, sd). pnorm(x, mean, sd). qnorm(x, mean, sd). rnorm(x, mean, sd).
Keterangan: 1. 2. 3. 4. 5.
x adalah bilangan dalam tipe data vector. p adalah vector dari probabilitas. n adalah bilangan hasil observasi. mean adalah nilai rata-rata dari data dengan nilai defaultnya adalah 0. sd adalah deviasi standar dengan nilai default adalah 1.
dnorm() Pada bagian ini akan dicontohkan penggunaan fungsi dnorm() dan visualisasinya. Fungsi ini memperlihatkan nilai distribusi probabilitas pada setiap titik untuk nilai mean dan deviasi standar yang diberikan. Berikut ini adalah contoh data yang digunakan. x = seq(-10, 10, by = .1)
Kemudian menentukan nilai y dengan menggunakan fungsi dnorm() seperti berikut. y = dnorm(x, mean = 2.5, sd = 0.5)
Untuk melihat bagaimana bentuk grafik hasil plot data tersebut dapat digunakan fungsi plot(). plot(x,y)
119
Sehingga didapatkan grafik sebagai berikut.
Gambar 128. Grafik plot dengan menggunakan fungsi dnorm(). Jika menggunakan nilai mean adalah 0 maka dapat digunakan fungsi dnorm() seperti berikut ini. y = dnorm(x, mean = 0, sd = 0.5)
Dan berikut adalah hasil dari grafik dari plot data terserbut.
Gambar 129. Grafik plot fungsi dnorm() dengan nilai mean = 0.
120
pnorm() Fungsi ini memberikan informasi probabilitas dari distribusi normal bilangan acak kemudian dilakukan evaluasi pada nilai x untuk melihat apakah probabilitas nilai y akan mendapatkan nilai lebih kecil atau sama dengan x. Data yang digunakan adalah sebagai berikut. x = seq(-10,10,by = .2)
Sedangkan untuk data pada sumbu y didapat dengan menggunakan fungsi pnorm(). y = pnorm(x, mean = 2.5, sd = 2)
Setelah itu digunakan fungsi plot(x,y) untuk mendapatkan grafik seperti pada gambar di bawah ini.
Gambar 130. Grafik plot dengan menggunakan fungsi pnorm().
qnorm() Fungsi ini mengambil nilai probabilitas dan memberikan bilangan yang nilai komultaif sesuai dengan nilai probabilitas. Berikut ini adalah kode yang menggunakan fungsi qnorm(). x = seq(0, 1, by = 0.02) y = qnorm(x, mean = 2, sd = 1) plot(x,y)
Dan berikut ini adalah grafik plot dari fungsi qnorm().
121
Gambar 131. Grafik plot dengan fungsi qnorm().
rnorm() Fungsi ini digunakan untuk menghasilkan bilangan acak yang terdistribusi normal. Berikut ini adalah kode yang menggunakan fungsi rnorm(). y = rnorm(50) hist(y, main = "Distribusi Normal")
Sehingga didapatkan grafik plot berikut ini.
Gambar 132. Grafik histogram dengan data dari hasil fungsi rnorm().
122
Contoh Kasus Pada bagian ini akan diberikan beberapa contoh kasus yang akan diselesaikan dengan fungsifungsi yang telah diberikan di atas.
Peluang Umur Aki Kasus pertama adalah jika suatu jenis aki mencapai umur rata-rata 3 tahun dengan simpangan baku 0,5 tahun. Bila umur aki itu menyebar normal, maka untuk menghitung peluang bahwa sebuah aki tertentu akan mencapai umur kurang dari 2,3 tahun dapat dilakukan dengan menggunakan fungsi pnorm() seperti berikut ini. > pnorm(2.3, 3, 0.5) [1] 0.08075666
Dari hasil di atas didapatkan peluang 0.08075666.
Peluang Umur Lampu Suatu perusahaan alat listrik memproduksi bola lampu yang umurnya berdistribusi normal dengan rata-rata 800 jam dan simpangan bku 40 jam. Untuk mengetahui peluang sebuah bola lampu dapat menyala antara 778 dan 834 jam maka dapat dilakuan dengan cara berikut ini. > pnorm(834, 800, 40) - pnorm(778, 800, 40) [1] 0.5111778
Maka peluang bola lampu yang dapat menyala antara 778 dan 834 jam adalah 0. 5111778.
Nilai Ujian jika diketahui nilai rata-rata pada suatu ujian adalah 74 dengan simpangan baku adalah 7. Dan diketahui 12% diantara peserta ujian mendapat nilai A maka dapat ditentukan kemungkinan nilai A terkecil dan nilai B tertinggi dengan cara berikut ini. > qnorm(0.12, 74, 7, lower.tail = FALSE) [1] 82.22491
Jadi nilai A terkecil bagi A adalah 83 dan nilai tertinggi bagi B adalah 82. Kasus yang lain yang masih berhubungan dengan perhitungan nilai adalah sebagai berikut. Diketahui rata-rata dari 300 mahasiswa mengikuti sebaran normal dengai nilai rata-rata adalah 2,1 dan deviasi standar adalah 0,8. Untuk menentukan jumlah mahasiswa yang mencapai nilai antara 2,5 dan 3,5 inklusif bilai nilai dihitung sampai persepuluhan terdekat dapat dilakukan dengan cara berikut ini. > pnorm(3.5, 2.1, 0.8) - pnorm(2.5, 2.1, 0.8) [1] 0.2684784
Sehingga didapat peluang sebesar 26,84% atau sekitar 80 mahasiswa di antara 300 mahasiswa tersebut.
123
Binomial Distribution Pendahuluan Distribusi binomial merupakan model yang berurusan dengan pencarian probabilitas sukses tidaknya suatu kejadian yang memiliki dua keluaran yang mungkin. Sebagai contoh adalah probabilitas melempar uang koin yang mempunyai dua kemungkinan keluaran.
Gambar 133. dua kemungkinan keluaran saat melempar uang koin. Definisi lain dari binomial distribution adalah distribusi probabilitas diskret jumlah keberhasilan dalam n percobaan ya/tidak yang saling bebas, dimana setiap hasil percobaan memiliki probabilitas p. Dari paparan di atas maka dapat diketahui ciri-ciri dari percobaan binomial seperti di bawah ini: 1. 2. 3. 4.
Setiap percobaan dibedakan menjadi 2 jenis kejadian yang keduanya saling lepas. Hasil dari percobaan tersebut hanya 2 macam, yaitu berhasil dan gagal, iya dan tidak, angka atau gambar (untuk kasus pelemparan koin). Peluang kejadian berhasil adalah p dan peluang kejadian gagal adalah q = 1-p. Masing-masing percobaan bersifat saling bebas, artinya hasil percobaan pertama tidak memengaruhi hasil percobaan berikutnya.
Implementasi Pada lingkungan R terdapat 4 fungsi yang dapat digunakan untuk menghasilkan binomial distribution yaitu: 1. 2. 3. 4.
dbinom(x, size, prob) pbinom(x, size, prob) qbinom(p, size, prob) rbinom(n, size, prob)
Keterangan: 1. 2. 3. 4. 5.
x adalah data tipe vector yang berisi angka. p adalah data tipe vector yang berisi nilai probabilitas. n adalah nilai jumlah observasi. size adalah nilai jumlah percobaan yang dilakukan. prob adalah probalitas keberhasilan dari setiap kemungkinan.
dbinom() Fungsi ini untuk menentukan probabilitas kerapatan distribusi (probability density distribution) untuk setiap titik. Sebagai contoh jika dimiliki data titik tersebut sebagai berikut. 124
x = seq(0,50,by = 1)
Maka probality density distribution untuk setiap titik yang ada di x adalah sebagai berikut. y = dbinom(x,50,0.5)
Untuk melihat grafik dari plot titik-titik x dan y maka dieksekusi fungsi berikut ini. plot(x,y)
Sehingga didapat gambar sebagai berikut.
Gambar 134. Grafik plot dengan menggunakan fungsi dbinom().
pbinom() Fungsi ini berguna untuk kumulatif probabilitas dari sebuah kejadian. Sebagai contoh jika ingin diketahui kemungkinan mendapatkan sisi gambar pada koin sebanyak 26 kali atau kurang dari 51 pelemparan koin maka dapat digunakan fungsi pbinom() seperti berikut: > x = pbinom(26,51,0.5) > x [1] 0.610116
Dan didapatkan probabilitas yaitu 0.610116 atau sekitar 61%.
qbinom() Fungsi ini berguna untuk memberikan jumlah nilai yang akan keluar jika diketahui nilai probabilitasnya. Sebagai contoh jika diketahui probabilitas 0,25 atau 25% keluarnya sisi gambar pada 51 kali pelemparan koin, maka dengan fungsi qbinom() di bawah ini akan dapat diketahui jumlah berapa kali sisi gambar akan keluar.
125
> x = qbinom(0.25,51,1/2) > x [1] 23
Contoh lain jika adalah sebagai berikut. > x = qbinom(0.61,51,1/2) > x [1] 26
rbinom() Fungsi ini berguna untuk menghasilkan angka dari nilai acak jika diketahui probabilitas dari sejumlah contoh atau sample. Sebagai contoh jika diketahui probalitas 0.4 dari 150 sample maka untuk mendapatkan 8 nilai random digunakan fungsi rbinom() seperti berikut ini. > x = rbinom(8,150,.4) > x [1] 53 62 42 73 58 57 54 55
Untuk memperlihatkan keluarannya adalah bilangan acak, maka dapat diulang eksekusi fungsi tersebut seperti di bawah ini. > x = rbinom(8,150,.4) > x [1] 50 60 60 61 58 62 67 60
Dari kedua eksekusi di atas dapat dilihat dengan fungsi yang sama tetapi menghasilkan keluaran bilangan acak yang berbeda.
Poisson Regression Pendahuluan Poisson distribution adalah distribusi probabilitas diskret yang menyatakan peluang jumlah peristiwa yang terjadi pada periode waktu tertentu apabila rata-rata kejadian tersebut diketahui dan dalam waktu yang saling bebas sejak kejadian terakhir. Atau secara sederhana dapat dijelaskan sebagai proses untuk menghitung jumlah suatu kejadian diskrit pada selang waktu yang kontinyu. Sedangkan Poisson regression seperti regresi yang telah dibahas sebelumnya melibatkan dua variable yaitu variable respon dan variable prediktor. Pada model regresi ini melibatkan variable respon dalam bentuk jumlah, sebagai contoh adalah jumlah dari angka kelahiran atau jumlah kemenangan pada sebuah seri pertandingan sepakbola. Secara rumus matematika maka Poisson regression dapat dituliskan sebagai berikut ini: log(y) = a + b1x1 + b2x2 + bnxn.....
Keterangan: 1.
y adalah variable respon. 126
2. 3.
a dan b adalah nilai koefisien. x adalah variable prediktor.
Implementasi Pada lingkungan R, untuk melakukan perhitungan Poisson regression digunakan fungsi glm() sama seperti untuk melakukan perhitungan Logistic Regression. Sintaks umum dari fungsi glm() adalah sebagai berikut: glm(formula,data,family)
Keterangan: 1. 2. 3.
formula adalah simbol untuk merepresentasikan hubungan antara variable. data adalah data set yang berisi nilai untuk diproses. family adalah model yang digunakan, karena proses yang akan dilakukan adalah Poisson regression maka nilai dari parameter ini adalah ‘poisson’.
Sintaks di atas akan mempunyai format seperti berikut ini. glm(counts~var1+var2+var3, data, family=poisson)
Sebagai contoh akan digunakan data dari dataset warpbreak yang berupakan data jumlah kerusakan benang pada proses penenunan. > head(warpbreaks) breaks wool tension 1 26 A L 2 30 A L 3 54 A L 4 25 A L 5 70 A L 6 52 A L ... 49 17 B H 50 13 B H 51 15 B H 52 15 B H 53 16 B H 54 28 B H
Keterangan: 1. 2. 3.
Kolom breaks adalah jumlah kerusakan. Kolom wool berisi nilai tipe benang wool yang digunakan, kolom ini berisi nilai A atau B. Kolom tension berisi nilai level ketegangan benang, kolom ini berisi nilai L (low), M (medium) atau H (high).
Selanjutnya adalah membuat model dengan menggunakan fungsi glm() seperti berikut ini. model_poission = glm(formula = breaks ~ wool+tension, data = warpbreaks, family = poisson)
Dan untuk melihat rangkuman informasi dari model yang telah dibuat pada objek model_poission maka dapat digunakan fungsi summary() berikut ini.
127
> summary(model_poission) Call: glm(formula = breaks ~ wool + tension, family = poisson, data = warpbreaks) Deviance Residuals: Min 1Q Median -3.6871 -1.6503 -0.4269
3Q 1.1902
Max 4.2616
Coefficients: Estimate Std. Error z value (Intercept) 3.69196 0.04541 81.302 woolB -0.20599 0.05157 -3.994 tensionM -0.32132 0.06027 -5.332 tensionH -0.51849 0.06396 -8.107 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01
Pr(>|z|) < 2e-16 6.49e-05 9.73e-08 5.21e-16
*** *** *** ***
‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1) Null deviance: 297.37 Residual deviance: 210.39 AIC: 493.06
on 53 on 50
degrees of freedom degrees of freedom
Number of Fisher Scoring iterations: 4
Selanjutnya jika diketahui data baru sebagai berikut: data_poisson_baru = expand.grid(wool=c("A","B"), tension=c("L","M","H"))
Berikut ini adalah isi dari data_poisson_baru tersebut. > data_poisson_baru wool tension 1 A L 2 B L 3 A M 4 B M 5 A H 6 B H
Kemudian dilakukan cara berikut ini untuk memprediksi baris yang ada pada data tersebut. > cbind(data_poisson_baru, predicted=predict(model_poission, newdata=data_poisson_baru, type="response")) 1 2 3 4 5 6
wool tension predicted A L 40.12354 B L 32.65424 A M 29.09722 B M 23.68056 A H 23.89035 B H 19.44298
128
Analysis of Covariance Pendahuluan Analysis of covariance atau analisis kovarian (anakova) merupakan gabungan antara uji komparatif dan korelasional. Jadi selain menguji perbadingan sekaligus menghubungkannya, hal ini berbeda dengan ANOVA (analysis of variance) yang hanya menguji perbandingan saja. Sebagai contoh melakukan perbandingan variable tergantung atau variable respon Y dengan variable bebas atau variable prediktor X1 sekaligus menghubungkan variable Y dengan dengan variable bebas lainnya X2. Variable X2 yang digunakan untuk memprediksi ini dinamakan dengan kovarian. Secara teknis analysis of covariance adalah gabungan teknik anova dan regresi dimana: 1. 2.
Anova adalah teknik yang digunakan untuk menguji perbandingan variable respon Y ditinjau dari variable bebas X1. Regresi adalah teknik untuk memprediksi variable respon Y melalui variable bebas X2.
Untuk mengetahui apakah suatu data dapat dianalisis dengan analysis of covariance dengan mengetahui karakteristik variablenya, yaitu: 1. 2. 3.
Variable respon Y : kontinum. Variable bebas X1 : kategorikal. Variable bebas X2 : kontinum.
Dimana penjelasannya adalah: 1.
2.
Kontinum merupakan variable yang memiliki nilai kuantitatif yang bergerak dalam kontinum dari rendah ke tinggi (interval atau rasio). Contohnya adalah hasil pengukuran melalui skala psikologi seperti harga diri, motivasi belajar, IQ, atau hasil tes matematika. Kategorikal merupakan variable hasil pengkodean terhadap kategori (nominal), contohnya adalah jenis kelamin, kelas atau bidang pekerjaan.
Dari paparan di atas maka analysis of covariance dilakukan jika terdapat variable response berbentuk kontinum dan harus ada dua variable berbas berbentuk kategorikal dan kontinum.
Implementasi Implementasi analysis of covariance pada lingkungan R dapat dilakukan dengan menggunakan fungsi aov() dilanjutkan dengan penggunaan anova(). Sebagai contoh akan digunakan data mtcars dengan atribut mpg, hp dan am dimana mpg merupakan variable respon dan hp menjadi variable bebas prediktor (kontinum) dan am merupakan variable bebas kategorikal. Sehingga dipersiapkan data dengan cara sebagai berikut. data_ancova = mtcars[,c("am","mpg","hp")]
Dan akan didapatkan data sebagai berikut. > head(data_ancova) am mpg hp Mazda RX4 1 21.0 110 Mazda RX4 Wag 1 21.0 110
129
Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant
1 0 0 0
22.8 93 21.4 110 18.7 175 18.1 105
Kemudian dibuat model regresi dengan interaksi antara variable kategorikal dan variable prediktor dengan cara seperti berikut. Pada formula dapat dilihat interaksi antar kedua variable tersebut dilambangkan dengan penggunaan operator *. hasil1 <- aov(mpg~hp*am,data = data_ancova)
Dan berikut adalah hasil dari model regresi di atas. > summary(hasil1) Df Sum Sq Mean Sq F value Pr(>F) hp 1 678.4 678.4 77.391 1.50e-09 *** am 1 202.2 202.2 23.072 4.75e-05 *** hp:am 1 0.0 0.0 0.001 0.981 Residuals 28 245.4 8.8 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Dari hasil di atas dapat dilihat bahwa hp (horse power) dan am (transmission type) memberikan pengaruh yang signifikan terhadap nilai mp (mile per galon) jika dilihat nilai p untuk keduanya adalah dibawah 0.05. Tetapi interaksi antara kedua variable (hp:am) tersebut tidak signifikan jika dilihat nilai p yang lebih dari 0.05. Selanjutnya dibuat model tanpa interaksi antara variable kategorikal dan variable prediktor dengan cara seperti berikut ini. Pada formula dapat dilihat digunakan operator + untuk menandakan tidak ada interaksi antar kedua variable. hasil2 <- aov(mpg~hp+am,data = data_ancova)
Dan berikut adalah hasil dari model di atas. > summary(hasil2) Df Sum Sq Mean Sq F value Pr(>F) hp 1 678.4 678.4 80.15 7.63e-10 *** am 1 202.2 202.2 23.89 3.46e-05 *** Residuals 29 245.4 8.5 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pada hasil di atas dapat dilihat varible hp dan am mempunyai efek yang signifikan terhadap mp jika dilihat dari nilai p yang kurang dari 0.05. Langkah selanjutnya adalah membandingkan kedua model tersebut dengan menggunakan fungsi anova() dengan cara sebagai berikut. > anova(hasil1, hasil2) Analysis of Variance Table Model 1: Model 2: Res.Df 1 28 2 29
mpg ~ hp * am mpg ~ hp + am RSS Df Sum of Sq F Pr(>F) 245.43 245.44 -1 -0.0052515 6e-04 0.9806
130
Dengan melihat nilai p di atas 0.05 maka dapat disimpulkan interaksi antara variable hp dan am tidak signifikan, jadi variable mp akan tergantung pada hp di kedua transmission mode baik yang bernilai auto atau manual.
Time Series Analysis Pendahuluan Time series atau deret waktu adalah deretan titik-titik data yang setiap titiknya terkait dengan waktu. Sebagai contoh adalah catatan harga saham yang mempunyai nilai berbeda-beda terhadap waktu. Contoh yang lain adalah nilai curah pada suatu daerah setiap bulan per tahun.
Implementasi Pada lingkungan R terdapat fitur yang dapat dimanfaatkan untuk mengolah data deret waktu, salah satunya adalah objek tipe data time-series yang dapat dimanfaatkan untuk menyimpan data deret waktu selain menggunakan objek dengan tipe data vector atau data frame. Objek time-series akan menyimpan data output dari fungsi ts(). Berikut ini adalah sintaks penggunaan fungsi ts() dan objek time-series. nama_objek =
ts(data, start, end, frequency)
Keterangan: 1. 2. 3. 4.
data adalah variable dengan tipe data vector dan matrix yang berisi data seperti nilai curah hujan atau nilai saham. start adalah waktu awal observasi. end adalah waktu akhir observasi. frequency adalah jumlah observasi per unit waktu.
Untuk lebih mengerti sintaks dan keterangan di atas maka di bawah ini diberikan contoh kasus pengolahan data curah hujan per bulan selama tahun 2015. curah_hujan = c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2, 985,882.8,1071)
Dari data di atas dapat dilihat nilai di dalam objek curah_hujan hanya berisi nilai curah hujan saja dan belum diketahui waktu obrservasi dari setiap nilai. Selanjutnya digunakan fungsi ts() untuk membentuk objek yang berisi data deret waktu dengan cara seperti berikut. curah_hujan_timeseries = ts(curah_hujan,start = c(2015,1),frequency = 12)
Dan berikut adalah isi data dari objek curah_hujan_timeseries.
Gambar 135. Data curah_hujan_timeseries.
131
Setelah objek deret waktu dibuat maka dengan mudah diproses, sebagai contoh untuk melakukan plot data dapat dilakukan dengan fungsi plot() atau plot.ts() cara berikut ini. plot.ts(curah_hujan_timeseries)
Dan akan didapat grafik seperti berikut ini.
Gambar 136. Plot curah hujan. Pada prakteknya tujuan melakukan analisa deret waktu adalah untuk membahas proyeksi masa depan dari suatu variable didasarkan pada data masa lalu dan sekarang.
Contoh Kasus Pada bagian ini akan dibahas beberapa contoh kasus pemprosesan data deret waktu.
Dekomposisi Data Kelahiran Berikut ini akan digunakan data kelahiran di kota New York dari Januari 1946 sampai dengan Desember 1959 yang dapat diunduh di http://robjhyndman.com/tsdldata/data/nybirths.dat. Untuk membaca data tersebut langsung dari alamat di atas dapat dilakukan dengan cara berikut ini. kelahiran = scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
Agar data deret waktu tersusun berdasarkan bulan dan tahun maka dengan telah diketahuinya setahun adalah 12 bulan dan data observasi dimulai dari bulan 1 tahun 1946 maka data deret waktu dapat dibentuk dengan fungsi ts() dengan cara seperti di bawah ini. kelahiran_timeseries = ts(kelahiran, frequency=12, start=c(1946,1))
Dan akan didapatkan keluaran seperti gambar berikut ini.
132
Gambar 137. Data deret waktu kelahiran di kota New York. Dan akan dihasilkan grafik plot seperti berikut. plot.ts(kelahiran_timeseries)
Gambar 138. Plot kelahiran di kota New York.
Selanjutnya akan dilakukan dekomposisi data kelahiran di atas. Dekomposisi deret waktu adalah memecah data deret waktu menjadi beberapa pola dan mengidentifikasi masingmasing komponen secara terpisah. Pemisahan atau pemecahan ini dilakukan untuk membantu meningkatkan ketepatan peramalan dan membantu pemahaman atas perilaku deret data secara baik. Dekomposisi deret waktu ini dilandasi oleh asumsi bahwa data yang ada merupakan gabungan dari beberapa komponen, yang tergantung dari jenis datanya yaitu: 1.
2.
Non-seasonal data Pada data deret waktu non-seasonal terdiri atas komponen berikut: - Komponen trend. - Komponen irregular. Seasonal data Pada data deret waktu seasonal terdiri atas komponen berikut: 133
-
Komponen trend. Komponen seasonal. Komponen irregular.
Sebagai contoh untuk kasus data kelahiran di kota New York dapat didekomposisi dengan menggunakan bantuan fungsi decompose() menjadi komponen-komponennya. kelahiran_timeseries_komponen = decompose(kelahiran_timeseries)
Jika objek kelahiran_timeseries_komponen dipanggil maka dapat dilihat beberapa komponen seperti seasonal, trend dan lain-lain. Jika ingin menampilkan komponen seasonal saja maka dapat dilakuan dengan cara berikut ini. kelahiran_timeseries_komponen$seasonal
Berikut ini adalah data komponen seasonal, dari data di bawah ini dapat diketahui nilai tertinggi adalah setiap bulan Juli yang menunjukkan bahwa puncak kelahiran di bulan tersebut.
Gambar 139. Data komponen seasonal pada deret waktu kelahiran di kota New York. Atau jika ingin menampilkan komponen trend dapat dilakuan dengan cara berikut ini. kelahiran_timeseries_komponen$trend
Dan akan dapat dilihat data seperti berikut.
Gambar 140. Data komponen trend pada deret waktu kelahiran di kota New York. Sedangkan untuk menghasilkan grafik plot dari komponen trend, seasonal dan irregular dapat dilakukan dengan menggunakan fungsi plot().
134
Gambar 141. Plot komponen-komponen data deret waktu. Dari grafik dapat dilihat trend angka kelahiran yang cenderung meningkat.
Prediksi CO2 dengan Exponential Smoothing Pada lingkungan R telah tersedia dataset konsentrasi CO2 per bulan yang merupakan hasil observasi dari tahun 1959 sampai dengan 1997. Data ini telah dalam bentuk deret waktu sehingga tidak perlu diproses dengan fungsi ts(). Sebelum menentukan metode apa yang akan digunakan untuk melakukan prediksi atau forecasting maka terlebih dahulu dapat dilihat pola data ini dengan melihat grafik plot berikut.
135
Gambar 142. Grafik plot CO2. Dari grafik tersebut dapat dilihat bahwa data mengandung pola trend dan seasonal dengan variasi relatif konstan. Sehingga dapat digunakan metode exponential smooting dengan menggunakan fungsi HoltWinters(). Langkah pertama adalah membuat model dengan fungsi HoltWinters() dengan cara seperti berikut. model_co2 = HoltWinters(co2)
Hasil dari model_co2 dapat dilihat sebagai berikut. > model_co2 Holt-Winters component.
exponential
smoothing
with
trend
and
additive
seasonal
Call: HoltWinters(x = co2) Smoothing parameters: alpha: 0.5126484 beta : 0.009497669 gamma: 0.4728868 Coefficients: [,1] a 364.7616237 b 0.1247438 s1 0.2215275 s2 0.9552801 s3 1.5984744 s4 2.8758029 s5 3.2820088 s6 2.4406990 s7 0.8969433 s8 -1.3796428 s9 -3.4112376 s10 -3.2570163 s11 -1.9134850 s12 -0.5844250
136
Dari informasi di atas dapat diketahui bahwa nilai parameter smooting yang optimal adalah: 1. 2. 3.
alpha = 0.5126484. beta = 0.009497669. gamma = 0.4728868.
Pada output di atas juga dapat dilihat nilai-nilai koefisien a,b dan 12 koefisien seasonal yaitu s1 sampai s12. Selanjutnya jika ingin melakukan prediksi 2 tahun ke depan maka dapat dilakukan dengan menggunakan fungsi predict() seperti contoh berikut ini. prediksi_co2 = predict(model_co2, 24, prediction.interval = TRUE)
Dan berikut adalah data hasil prediksi tersebut. > prediksi_co2 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1998 1998 1998 1998 1998 1998 1998 1998 1998 1998 1998 1998 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999
fit 365.1079 365.9664 366.7343 368.1364 368.6674 367.9508 366.5318 364.3799 362.4731 362.7520 364.2203 365.6741 366.6048 367.4633 368.2313 369.6333 370.1643 369.4477 368.0287 365.8769 363.9700 364.2490 365.7172 367.1710
upr 365.7105 366.6449 367.4823 368.9490 369.5410 368.8824 367.5189 365.4206 363.5656 363.8948 365.4121 366.9138 367.9353 368.8383 369.6500 371.0954 371.6690 370.9946 369.6173 367.5068 365.6409 365.9604 367.4690 368.9628
lwr 364.5053 365.2879 365.9864 367.3238 367.7937 367.0192 365.5446 363.3392 361.3806 361.6093 363.0285 364.4345 365.2744 366.0884 366.8125 368.1713 368.6596 367.9008 366.4401 364.2469 362.2991 362.5375 363.9655 365.3793
Jika ingin membuat plot data awal dengan hasil prediksi ini maka dapat dilakukan dengan fungsi plot() seperti contoh berikut ini. plot(model_co2, prediksi_co2)
137
Gambar 143. Plot data CO2 dan data hasil prediksi. Sedangkan jika ingin melihat informasi nilai-nilai komponen level, trend, seasonal pada data CO2 maka dapat dilakukan dengan fungsi plot() dan fitted() seperti contoh berikut ini. plot(fitted(model_co2))
Dan dihasilkan seperti gambar di bawah ini.
Gambar 144. Plot nilai-nilai komponen pada data CO2.
138
Prediksi Penumpang Pesawat Data deret waktu yang juga telah tersedia di lingkungan R adalah data catatan jumlah penumpang pesawat dari tahun 1949 sampai dengan tahun 1960 yang disimpan pada objek AirPassengers. Berikut adalah data pada objek tersebut. > AirPassengers Jan Feb Mar 1949 112 118 132 1950 115 126 141 1951 145 150 178 1952 171 180 193 1953 196 196 236 1954 204 188 235 1955 242 233 267 1956 284 277 317 1957 315 301 356 1958 340 318 362 1959 360 342 406 1960 417 391 419
Apr 129 135 163 181 235 227 269 313 348 348 396 461
May 121 125 172 183 229 234 270 318 355 363 420 472
Jun 135 149 178 218 243 264 315 374 422 435 472 535
Jul 148 170 199 230 264 302 364 413 465 491 548 622
Aug 148 170 199 242 272 293 347 405 467 505 559 606
Sep 136 158 184 209 237 259 312 355 404 404 463 508
Oct 119 133 162 191 211 229 274 306 347 359 407 461
Nov 104 114 146 172 180 203 237 271 305 310 362 390
Dec 118 140 166 194 201 229 278 306 336 337 405 432
Dan berikut ini adalah grafik plot dari data tersebut.
Gambar 145. Grafik plot data AirPassengers. Dari data terlihat mengandung pola tren dan seasonal dengan variasi yang cenderung meningkat sehingga salah satu model yang sesuai untuk prediksi pada data ini adalah dengan menggunakan HoltWinters multiplikatif. Berikut adalah cara untuk membuat model HoltWinters multiplikatif. model_penumpang = HoltWinters(AirPassengers, seasonal="mult")
139
Sehingga didapat nilai model sebagai berikut. > model_penumpang Holt-Winters exponential smoothing with trend and multiplicative seasonal component. Call: HoltWinters(x = AirPassengers, seasonal = "mult") Smoothing parameters: alpha: 0.2755925 beta : 0.03269295 gamma: 0.8707292 Coefficients: [,1] a 469.3232206 b 3.0215391 s1 0.9464611 s2 0.8829239 s3 0.9717369 s4 1.0304825 s5 1.0476884 s6 1.1805272 s7 1.3590778 s8 1.3331706 s9 1.1083381 s10 0.9868813 s11 0.8361333 s12 0.9209877
Untuk memprediksi jumlah penumpang 12 bulan ke depan bisa dilakukan dengan fungsi predict() seperti berikut ini. prediksi_penumpang <‐ predict(model_penumpang, 12, prediction.interval = TRUE)
Dan berikut ini adalah data hasil prediksi tersebut. > prediksi_penumpang fit upr Jan 1961 447.0559 466.8057 Feb 1961 419.7123 440.2920 Mar 1961 464.8671 486.7712 Apr 1961 496.0839 519.3350 May 1961 507.5326 531.9278 Jun 1961 575.4509 602.1935 Jul 1961 666.5923 696.5558 Aug 1961 657.9137 688.6454 Sep 1961 550.3088 578.9777 Oct 1961 492.9853 520.9553 Nov 1961 420.2073 446.9458 Dec 1961 465.6345 487.9686
lwr 427.3061 399.1326 442.9630 472.8329 483.1375 548.7083 636.6288 627.1821 521.6398 465.0153 393.4688 443.3004
Selanjutnya adalah membuat plot gabungan antara data aktual dan data prediksi dengan cara seperti berikut. plot(model_penumpang,prediksi_penumpang)
140
Gambar 146. Grafik plot data aktual dan prediksi penumpang pesawat. Dan untuk melihat grafik masing-masing komponen dapat dilakukan dengan fungsi plot() berikut ini. plot(fitted(model_penumpang))
Dan gambar berikut adalah grafik plot dari kode di atas.
Gambar 147. Plot grafik komponen-komponen pada model_penumpang.
141
Nonlinear Least Square Pendahuluan Ketika melakukan modeling data kasus nyata untuk analisis regresi sangat jarang didapati persamaan dari model tersebut adalah persamaan linear yang memberikan grafik linear. Sering kali persamaan untuk model kasus nyata melibatkan fungsi matematika dengan derajat yang lebih tinggi seperti eksponen 3 atau fungsi sinus. Pada kasus seperti itu didapati plot dari model adalah lebih berbentuk kurva dibandingkan garis. Tujuan dari regresi linear atau non-linear adalah menyesuaikan nilai dari parameterparameter model untuk mencari garis atau kurva yang paling dekat dengan data. Pada menentuan nilai-nilai tersebut akan dapat memperkirakan variable respon dengan akurasi yang baik. Metode nonlinear least square atau metode kuadrat terkecil dalam kasus nonlinear untuk menduga parameter model dengan cara meminimumkan jumlah kuadrat sisaan. Pendugaan parameter ini dilakukan secara iteratif karena tidak ada solusi persamaan normal secara analitik.
Implementasi Pada lingkunan R terdapat fungsi nls() untuk menguji nonlinear least square. Sintaks fungsi ini adalah sebagai berikut: nls(formula, data, start)
Keterangan: 1. 2. 3.
formula adalah formula nonlinear yang berisi variable dan parameter. data adalah data yang digunakan untuk mengevaluasi variable pada formula. start adalah list atau vektor yang berisi estimasi awal.
Sebagai contoh jika diketahui persamaan sebagai berikut: a = b1*x^2+b2
Jika dimiliki nilai x dan y seperti berikut ini. nilai_x = c(1.6,2.1,2,2.23,3.71,3.25,3.4,3.86,1.19,2.21) nilai_y = c(5.19,7.43,6.94,8.11,18.75,14.88,16.06,19.12,3.21,7.58)
Dan plot dari data tersebut adalah sebagai berikut: plot(nilai_x, nilai_y)
142
Gambar 148. Plot data x dan y. Jika diasumsikan untuk fit dengan model diberikan nilai koefisien untuk b1 adalah 1 dan b2 adalah 3 maka ditulis fungsi nls() seperti berikut: model = nls(nilai_y ~ b1*nilai_x^2+b2,start = list(b1 = 1,b2 = 3))
Dan misal dimiliki data baru untuk nilai x dan y sebagai berikut: data_baru = data.frame(nilai_x = seq(min(nilai_x),max(nilai_x),len = 100))
Kemudian dapat digambar plot baru dengan data baru tersebut. lines(data_baru$nilai_x,predict(model,newdata = data_baru))
Sehingga didapat gambar seperti berikut ini.
143
Gambar 149. Plot dengan data baru. Selanjutnya dapat dijalankan perintah berikut ini. > sum(resid(model)^2) [1] 1.081935
Dan perintah berikut. > confint(model) Waiting for profiling to be done... 2.5% 97.5% b1 1.137708 1.253135 b2 1.497364 2.496484
Dari kedua output di atas maka dapat disimpulkan bahwa nilai b1 lebih mendekati 1, sedangkan b2 lebih mendekati 2 bukan 3.
Referensi http://www.tutorialspoint.com/r/ http://www.theanalysisfactor.com/resources/by-topic/r/ http://www.rumusstatistik.com/2013/08/hubungan-rata-rata-median-dan-modus.html http://math.arizona.edu/~ghystad/chapter3.pdf http://www.stat.ucla.edu/~nchristo/introeconometrics/introecon_normal_dist.pdf http://www.slideshare.net/hidayatulfitri/penerapan-distribusi-normal http://stats.stackexchange.com/questions/59250/how-to-interpret-the-output-of-thesummary-method-for-an-lm-object-in-r http://www.ssc.wisc.edu/sscc/pubs/RFR/RFR_RegressionGLM_Sol.html 144
http://science.nature.nps.gov/im/datamgmt/statistics/r/formulas/ http://ww2.coastal.edu/kingw/statistics/R-tutorials/formulae.html https://docs.tibco.com/pub/enterprise-runtime-forR/1.5.0_may_2013/TERR_1.5.0_LanguageRef/stats/predict.glm.html http://widhiarso.staff.ugm.ac.id/files/Analisis%20Kovarian%20Untuk%20Eksperimen.pdf https://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/
145
8
Glosarium
Standard Deviation Deviasi standar atau simpangan baku berfungsi untuk melihat apakah data yang dimiliki bagus atau tidak. Jika deviasi standar bernilai kecil maka data dapat dikatakan bagus karena data yang dimiliki tidak terlalu tersebar. Jika simpangan baku kecil maka data masih berada di batas kuartil atas dan kuartil bawah. Sedangkan jika simpangan baku sangat besar maka data yang dimiliki menyimpang cukup jauh dari kuartil atas dan kuartil bawah. Pada gambar di atas dapat dilihat kurva berwarna biru memiliki nilai deviasi standar yang kecil dibandingkan dengan kurva berwarna merah dan coklat, sehingga sebarannya terlihat lebih bagus karena banyak data yang berada pada nilai rata-rata. Sebagai contoh jika diketahui kelas A memiliki rata-rata nilai ujian adalah 70 sedangkan kelas B memiliki rata-rata nilai ujian adalah 80. Walau nilai rata-rata kelas B lebih tinggi tetapi belum tentu data kelas B lebih baik daripada kelas A, karena harus dilihat terlebih dahulu deviasi standar dari masing-masing kelas. Jika nilai deviasi standar kelas A adalah 1,4 maka dapat disimpulkan hampir semua murid pada kelas A memiliki nilai 70. Sedangkan jika nilai deviasi standar kelas B adalah 20 maka banyak yang mendapatkan nilai di bawah 60 walaupun mungkin banyak juga yang dapat nilai 100.
Standard Error Standard error (std. error) adalah nilai untuk mengukur seberapa tepat nilai mean (rerata) yang diperoleh. Semakin kecil nilai ini maka semakin dekat dengan nilai mean. Jadi jika diketahui nilai mean adalah 11 dan nilai standard errror adalah 3 maka rentang data dengan nilai mean adalan 11±3.
p Value p Value dapat diartikan sebagai besarnya peluang melakukan kesalahan apabila memutuskan untuk menolak H0 atau menganggap pernyataan H0 salah. Jika p Value atau nilai p kecil maka resiko melakukan kesalahan juga kecil.
146
9
Penutup Ebook ini dibuat untuk menjawab keingintahuan penulis akan R dan statistik, dan ketika keingintahuan itu sudah terjawab maka salah satu caranya agar jawaban itu tidak hilang adalah dengan menulisnya. Selain sebagai catatan pribadi juga dapat dimanfaatkan orang lain yang mempunyai pertanyaan yang serupa seperti saya sebelumnya.
Masih banyak pertanyaan-pertanyaan lain yang belum terjawab, jadi masih banyak hal-hal bidang statistik dan R yang masih belum masuk ke dalam ebook ini. Semoga pertanyaanpertanyaan tersebut dapat dijawab pada ebook selanjutnya yang akan fokus pada pertanyaan tentang Machine Learning di lingkungan R. Akhir kata, semoga ebook ini dapat bermanfaat. Jika ada kesalahan pada isi buku ini, silakan kirimkan saran dan kritiknya via email reza.faisal (at) gmail.com. Terima kasih.
147