Kata Pengantar Buku ini adalah buku tutorial dan sekaligus menjadi buku panduan bagi Anda yang ingin belajar statitistika (seri dasar). Buku ini ditujukan bagi semua kalangan, baik akademisi (staf pengajar/dosen), peneliti tingkat awal, atau mahasiswa. Buku ini ditulis untuk memberikan solusi bagi para penggunanya terhadap suatu alat statistika yang handal namun dapat diperoleh secara bebas, mulai dari source code softwarenya, paket-paket penunjangnya, hingga panduan yang melekat pada software pada saat install. R adalah perangkat lunak statistika yang handal, karena dikembangkan oleh ahli-ahli statistika yang bekerjasam dengan pakar komputer dari seluruh dunia, yang secara sukarela mengembangkan dan menyumbangkan formula, rumus statistika bagi setiap orang yang ingin menggunakannya. Kehandalan R disebabkan oleh pengembangan berbasiskan pada prinsip dasar bahasa S, yang telah berhasil membuat alat statistik (komersil) lainnya yakni S-PLUS. Bagi anda yang terbiasa atau mengenal S-PLUS, akan mengerti kehandalan R ini. R sangatlah efisien dan mudah diperoleh karena di publikasikan untuk masyarakat umum dengan dasar lisensi GNU General Public, yang artinya boleh didistrisbusikan dengan bebas. Untuk mempermudah dalam memahami panduan menggunakan R, buku ini dibagi menjadi tiga bagian utama, yakni Bagian 1 membahas dasar-dasar aplikai R, mulai cara mendapatkan program berikut source code-nya, instalasi dan karakteristik, serta fitur-fiturnya. Pada bagian 1 ini bertujuan untuk mengetahui bagaimana cara menggunakan R dengan baik yang berkatian dengan bagian selanjutnya. Bagian 2 membahas konsep analisis statistika berikut praktik untuk menggunakan alat fitur-fitur dalam R untuk mengolah data dan melakukan analisis statistika, mulai statistik deskriptif, grafik (histogram, scatter plot, Q-Q plot, Boxplot, dll), fungsi distribusi, regresi serta uji statitika dasar. Bagian 3 membahas studi kasus yang berisikan contoh-contoh penggunaan R yang yang dibagi menjadi dua, yaitu contoh kasus dasar dan contoh kasus lanjut. Bagian 4 adalah tambahan penunjang penggunaan, yaitu interface (antar muka) RCommander yang membantu dalam menggunakan R berbasis interface yang user friendly dan diakhiri dengan penutup. Dengan mempelajari setiap bab kami harapkan anda dapat mengetahui dan menggunakan R sebagai alat statistika dalam membantu kerja/tugas anda sehari-hari. Bagi anda yang sudah mengetahui R sebelumnya ataupun S-PLUS, anda bisa langsung menuju bagian 2 atau bagian 3. Sedangkan untuk bagian 4, mengenai RCommander (Rcmdr) akan diterangkan secara singkat namun disertai dengan screenshot cara instalasi, penggunaan dan studi kasus menggunakan Rcmdr. Untuk bahasan lebih rinci mengenai Rcmdr dibahas lebih lanjut dalam satu buku khusus.
Ucapan Terima Kasih Alhamdulillah, dengan telah terbitnya buku ini, penulis ingin mengucapkan terima kasih kepada pihak-pihak yang telah membantu terwujudnya buku ini. Kepada pimpinan Depdiknas dan BPKLN, pimpinan Universitas Gunadarma (Prof. Suryadi H.S., dan Drs. Agus Sumin, MM), PR IV Universitas Gunadarma (Dr. Didin Mukodim), Istri dan kakak tercinta (Nuke Farida, SSas), Anak dan Keponakan tersayang, Rekan pembuat modul R Laboratorium Sistem Informasi atas pinjaman modulnya. Dan semua pihak yang tidak dapat kami sebutkan satu per satu atas bantuan, kerjasama dan doanya. Untuk kemajuan dan perbaikan buku ini, kami membuka selebar-lebarnya bagi masukkan, kritik dan saran para pembaca, agar buku ini lebih mudah dipahami dan semakin berguna. Demikianlah, semoga di masa yang akan datang akan lebih baik, dan sedang dipersiapkan buku seri lanjutan dari Pemrograman R ini sebagai kelanjutan sumbangsih kecil kami bagi kemajuan pendidikan di tanah air. Terima Kasih Wassalam
Jakarta-Depok, 2007-2008
Penulis
DAFTAR ISI BAGIAN I: DASAR-DASAR R Bab I - Pendahuluan Sejarah & Perkembangan Open Source Open Source untuk Analisis Statistik
1-4 2-3 3-4
Bab II - Software R dan Fitur-fiturnya II.1 Sejarah & Pengembangan R II.2. R dan program statistik II.2.1 Kelebihan dan Fitur-fitur R II.2.2 R, Riset dan Akademis
5-9 5 6 6 7-9
Bab III - Memulai R III.1 Mendapatkan Program (source) R III.2 Instalasi III.2.1 Instalasi di Sistem Operasi Windows III.2.2 Melakukan Uninstall R dari Sistem Operasi Windows III.2.3 Instalasi di Sistem Operasi lain (Linux, Macintosh, Unix, dan lain lain) III.2.4 Menu-menu dalam R III.2.5. Library dan fungsi dasar dalam instalasi R.2.1
10 - 21 10 10 10 - 14 15 15 15 - 20 20 - 21
Bab IV - Fitur dasar R IV.1. Bilangan dan Vektor IV.2 Objek dan Atribut IV.3 Faktor terurut dan tidak terurut IV.4 Matriks dan Array IV.4.1 Array IV.4.2 Index Matriks IV.4.3 Fungsi array() IV.4.4 Outer product dari dua array IV.4.5 Array transpose IV.4.6 Fasilitas matrik IV.4.7 Membentuk matrik partisi IV.4.8 Tabel frekuensi suatu dari faktor IV.5. List dan Frame data IV.6 Membaca data suatu file Soal Latihan Bab IV
22 - 47 22 - 27 27 28 - 29 29 29 30 - 31 31 31 - 32 33 33 - 35 35 - 36 36 37 - 39 39 - 46 46 - 47
BAGIAN 2: R & ANALISIS STATISTIKA Bab V - R untuk Pengolahan dan Analisis Data V.1 Statistika Deskriptif V.1.1 Mean V.1.2 Median V.1.3 Nilai minimum dan maksimum V. 2 Grafik V.2.1 Histogram V.2.2 Q-Q plot V.2.3 Boxplot V.2.4 Grafik Trellis V.3 Fungsi Distribusi V.3.1 Jenis fungsi distribusi dalam R V.3.2 Fungsi Probabilitas Densitas (Probability Density Function (PDF)) V.3.3 Fungsi Densitas Kumulatif (Cumulative Density Function (CDF)) V.4 Regresi & ANOVA (Analysis of Variance) V.4.1 ANOVA satu arah (One Way ANOVA) V.4.2 ANOVA dua arah (Two Way ANOVA) V. 5 Analisis (Uji) Statistika t
47 - 95 47 47 - 48 48 48 48 -52 53 - 57 57 - 58 59 - 61 62 - 65 65 - 66 66 66 - 71 71 71 - 73 74 - 76 77 - 80 80 - 81
V.6 R dan Statistika Lanjut V.6.1 Pencocokon Distribusi (Fitting Distribution) V.6.1.1 Pemilihan Model V.6.1.2 Taksiran parameter V.6.1.3 Uji Goodness of Fit V.6.1.4 Uji kenormalan Uji Jarque Berra, Uji Shapiro-francia, Uji Pearson’s Chi-Square, uji Liliefors, dan lain lain. Soal Latihan Bab V
81 81 81 - 84 84 - 88 88 - 90 90 - 93
93 - 95
BAGIAN 3: CONTOH & STUDI KASUS Bab VI - Contoh & Studi Kasus dengan R
96 - 107
A. A.1. A.2. A.3. A.4. A.5.
Contoh kasus dasar Mean, variansi dan standar deviasi Data univariat Bar chart (diagram batang) Pie chart Membuat data kategorik dari data numerik
96 - 102 96 - 97 97 98 - 99 100 - 101 101 - 102
B. B.1.
Contoh kasus lanjut Distribusi binomial
102 - 106 102
B.2. Matrik dan aljabar linear B.3. Bekerja dengan data kategori bivariate B.4. Data Bivariate: data kategorik vs data numerik Soal Latihan Bab VI
102 - 103 104 - 105 105 - 106 106 - 107
BAGIAN 4: TAMBAHAN R – COMMANDER, TANYA JAWAB & PENUTUP
Tambahan 1 - R-Commander
108 - 118
A. B.
108 - 114 115 - 118
Instalasi & Menu dalam Rcmdr Contoh kasus menggunakan Rcmdr
Tambahan 2 - Tanya Jawab seputar R untuk (sistem operasi) Windows Penutup Daftar Pustaka Riwayat Penulis
119 - 135 136 137 - 139 140
DAFTAR GAMBAR/GRAFIK
Gambar 2.1 Gambar 2.2 Gambar 2.3 Gambar 2.4 Gambar 2.5 Gambar 2.6 Gambar 3.1 Gambar 3.2 Gambar 3.3 Gambar 3.4 Gambar 3.5 Gambar 3.6 Gambar 3.7 Gambar 3.8 Gambar 3.9 Gambar 3.10 Gambar 3.11 Gambar 3.12 Gambar 3.13 Gambar 3.14 Gambar 3.15 Gambar 3.16 Gambar 3.17 Gambar 3.18 Gambar 4.1 Gambar 4.2 Gambar 4.3 Gambar 4.4 Gambar 4.5 Gambar 4.5 Gambar 5.1 Gambar 5.2 Gambar 5.3 Gambar 5.4 Gambar 5.5 Gambar 5.6 Gambar 5.7 Gambar 5.8 Gambar 5.9 Gambar 5.10 Gambar 5.11 Gambar 5.12 Gambar 5.13 Gambar 5.14
Grafik multidimensi hasil perhitungan R Grafik kontur dan topografi hasil perhitungan R Grafik scatter plot hasil perhitungan R Contoh grafik hasil plotting R Contoh grafik histogram R Contoh grafik pie chart R Langkah 1 instalasi Langkah 2 instalasi Langkah 3 Instalasi Langkah 4 Instalasi Langkah 5 Instalasi Langkah 6 Instalasi Langkah 7 Instalasi Langkah 8 Instalasi Kotak dialog, konfirmasi un-instalasi Posisi program R pada Start menu Desktop Tampilan muka program R Menu utama R Menu File R Menu Edit R Menu Misc (miscellaneous) R Menu Packages R Menu Windows R Menu Help R Plot densitas tinggi untuk frekuensi kemunculan matriks Dataset default dalam R Daftar dataset dalam R Editor data AirPassenger Spredsheet editor data Menu Data editor pada menu utama Scatter plot data variabel Petal Simbol dan kode dalam R Simbol, Kode dan Warna dalam R Grafik scatterplot data Iris Grafik histogram data eruptions Grafik histogram data eruption berdasarkan lebar bin 0.2 Grafik histogram data eruptions dengan bw = 0.1 Grafik histogram data eruption dengan data aktual Plot 1 ecdf data eruption Plot 2 ecdf data eruption Plot 3 ecdf data eruption Plot Q-Q Normal Plot 2 Q-Q Normal Boxplot data eruption
hal 7 7 8 8 9 9 11 11 12 12 13 13 14 14 15 16 16 17 17 18 18 19 19 20 32 42 43 44 45 46 50 51 52 52 54 55 55 56 56 57 57 58 58 59
Gambar 5.15 Gambar 5.16 Gambar 5.17 Gambar 5.18 Gambar 5.19 Gambar 5.20 Gambar 5.21 Gambar 5.22 Gambar 5.23 Gambar 5.24 Gambar 5.25 Gambar 5.26 Gambar 5.27 Gambar 5.28 Gambar 5.29 Gambar 5.30 Gambar 5.31 Gambar 6.1 Gambar 6.2 Gambar 6.3 Gambar 6.4 Gambar 6.5 Gambar 6.6 Gambar 6.7
Boxplot data eruption dengan nama titel Contoh grafik plot Plot densitas triller (a) tanpa dan (b) dengan pengkondisian faktor Scatter plot triller (a) tanpa dan (b) dengan pengkondisian faktor Grafik plot Trellis trivariate Plot binomial data mahasiswa Plot variabel sample1 dan sample 2 Histogram koefisien korelasi Grafik 3D untuk pdf normal bivariat Boxplot sebaran IPK mahasiswa berdasarkan sosio ekonomi Plot kolom matrik Matplot daya rekat (adhesi) vs aplikasi Histogram distribusi Poisson Kurva distribusi Normal Kurva distribusi Gamma Kurva distribusi Weibull Kurva dan histogram pdf Normal Barplot 1 data sabun Barplot 2 data sabun Barplot 3 data sabun Piechart 1 Piechart 2 Piechart 3 Boxplot slide by slide
60 61 62 63 65 68 69 70 70 75 79 80 82 83 83 84 90 98 99 99 100 100 101
Tambahan 1: R - Commander
Gambar 1 Gambar 2 Gambar 3 Gambar 4 Gambar 5 Gambar 6 Gambar 7 Gambar 8 Gambar 9 Gambar 10 Gambar 11 Gambar 12 Gambar 13 Gambar 14 Gambar 15 Gambar 16 Gambar 17 Gambar 18 Gambar 19
Instalasi Rcmdr dengan koneksi Internet Loading paket R commander (Rcmdr) Tiga sub window dalam Rcmdr Menu File Menu Data Menu Statistics Menu Graphs Menu Models Menu Distributions Menu Tools Menu Help Tampilan Active data set Rincian data yang dipilih Menu Statistics Matriks Korelasi Pearson Output Statistics Matriks Korelasi Pearson untuk data(women) Menu Graphs untuk scatterplot Scatterplot dengan kriteria yang ditentukan Menu (Fungsi) Distribution untuk fungsi probabilitas Normal Nilai probabiltas Normal data(women)
109 110 110 112 112 112 113 113 113 114 114 114 115 116 116 116 117 117 117
DAFTAR TABEL hal 3-4
Tabel 1.1
Daftar spesifikasi dan alamat software freeware / Open Source
Tabel 3.1
Paket dalam perangkat lunak R
Tabel 4.1
Operator Aritmatik dalam R
23
Tabel 5.1
Jenis plot dalam R
60
Tabel 5.2
Jenis plot untuk satu variable
63
Tabel 5.3
Jenis plot untuk dua variable
64
Tabel 5.4
Jenis plot untuk tiga variable
65
Tabel 5.5
Jenis plot untuk lebih dari tiga variable
65
Tabel 5.6
Jenis fungsi distribusi dalam R
66
Tabel 6.1
Data pelajar (perokok vs waktu belajar)
20 - 21
104
BAB
I Pendahuluan
Buku ini dibuat sebagai suatu pengantar dalam mempelajari statistika yang dihantarkan pula dengan suatu perangkat lunak alternatif pengolahan dan analisis statistik, yaitu R (biasa di sebut R) yang merupakan perangkat lunak open source. Diharapkan perangkat lunak ini menjadi acuan/referensi bagi mahasiswa, dosen, peneliti untuk dapat digunakan sebagai alat bantu dalam melakukan pekerjaannya. Penyajian dalam buku ini diawali dengan pengoperasian aplikasi R yang dijelaskan pula secara bersamaan teori dasar statistik yang terkait. Dari banyaknya pilihan perangkat lunak pengolahan dan analisis data yang tersedia sekarang kebanyakan adalah perangkat lunak propriatery atau berbayar. R merupakan aplikasi yang menjanjikan karena dikembangkan secara kolektif oleh banyak ahli statistika dan programmer komputer sehingga tersedia fitur yang lengkap mulai dari yang klasik hingga termodern, mulai dari tool statistik, komputasi numerik, pencitraan dua dimensi - tiga dimensi (2D & 3D) serta pemodelan. Dengan kelengkapan fiturnya dan senantiasa dikembangkan untuk banyak bidang aplikasi, R layak digunakan pada bidang seperti statistik, ekonomi, komputasi hingga geografis. Sampai buku ini dibuat, tim R sudah dan sedang melakukan banyak projek seperti, untuk tampilan grafik (GUI) dengan R GUI Projects & SciViews R GUI, tampilan untuk statistika dasar dengan R-Commander untuk memudahkan pengguna dengan bantuan menu berbasis objek & ikon, program analisis berbasis web dengan Rpad, untuk data mining dengan fasilitas Rattle yaitu interface quick and easy berbasis GNOME, untuk bidang geografi-statistik dan data spasial dengan geoR. Beberapa fitur lainnya masih banyak lagi yang dapat lihat di situs resmi R : http://CRAN.r-project.org. R dapat digunakan baik untuk pribadi maupun korporasi (dalam laboratorium) tanpa khawatir dan was-was atas lisensinya, alias GRATIS, karena bernaung dalam GNU
1
General Public License. Panduan, source, dan paket penunjangnya dapat didownload dari situs http://CRAN.r-project.org, atau dalam CD yang disertakan dalam buku ini. Dasar dari penulisan buku ini adalah agar khalayak khususnya akademisi, mahasiswa dan praktisi di Indonesia mulai giat memanfaatkan sumber daya yang baik sekaligus murah, dan juga menghindarkan/menghilangkan kesan negative pembajakan/ penggunaan software secara illegal, yang akhir-akhir ini banyak menjadi soroton dunia internasional. Buku ini disusun berdasarkan referensi dari praktisi & akademisi yang menggunakan R sebagai tool pendukung kerja yang diterbitkan di Internet, dokumentasi dari tim R (R core team) dan pengalaman penulis dalam menggunakan R sebagai tool riset. Sejarah & Perkembangan Open Source Pengertian Open Source Sekarang ini, dalam industri software kita sering mendengar kata Open Source, namun apakah Open Source itu? Sedikit akan kami ulas tentang sejarah Open Source. Terminology ‘open source’ bermula dari perdebatan pada tahun 1998 ketika perusahaan Netscape memutuskan untuk mempublikasikan dan menghibahkan kode sumber (source code) produk browser Navigator untuk publik. Para peserta debat tersebut menyatakan kepeduliannya akan kemungkinan terjadinya kebingungan dengan terminologi free software sebagai implikasi dari anti-komersil. Banyak perdebatan tentang beberapa terminologi yang dapat digunakan untuk menghindari kebingungan tersebut, dan keluarlah keputusan menggunakan kata ‘open source’ sebagai terminologi baru. Open Source adalah suatu konsep yang menunjuk pada produksi dan pengembangan praktis dimana setiap orang dapat mengakses pada sumber (source) suatu produk akhir. Terminologi Open Source paling sering dihubungkan dengan teknologi informasi (TI), salah satunya produk perangkat lunak sebagai bagian dari dunia TI tersebut Berbeda dengan konsep perusahaan perangkat lunak komersil yang ciri khasnya menggunakan model terpusat (centralized model) untuk suatu pengembangan, Open Source secara konsep adalah kebalikannya, dimana metode yang digunakan adalah bebas/liberal. Organisasi yang mempromosikan Open Source adalah Open Source Initiative (OSI) yang dibentuk pada tahun 1998. OSI mempromosikan studi mengenai perbandingan pengembangan tertutup (closed development) versus pengembangan terbuka (closed development). Definisi mengenai software Open Source secara garis besar, diantaranya adalah sebagai berikut: - Bebas di distribusi ulang (Free redistribution), yaitu orang dapat menjual, mensuplai atau mendistribusikan perangkat lunak dimana lisensi untuk paket perangkat lunak tersebut tidak berdampak pada royalty atau persentase dari nilai penjualan
2
− Harus menyertakan kode sumber dari suatu program (software). Jika suaru program tidak menyertakan kode sumber, alternatifnya, kode sumbernya harus tersedia di internet atau memberikan harga khusus. − Lisensi harus membolehkan modifikasi. Dimana modifikasi program harus mempuntai terminilogi yang sama dengan software originalnya. − Lisensi software harus secara eksplisit mengijinkan pendistribusian software untuk kode sumber yang telah dimodifikasi. − Tidak boleh ada diskriminasi kepada siapa saja, baik individu maupun kelompok untuk persoalan lisensi. − Lisensi harus bersifat netral terhadap teknologi individu dan style suatu interface. Open Source untuk analisis statistik Sekarang ini, telah banyak program (software) yang berlisensi Open Source yang secara mudah dapat di-download melalui Internet. Salah satu Open Source Software yang paling terkenal adalah Linux. Beberapa paket software turunan Linux yang merupakan hasil karya anak bangsa Indonesia, seperti blangkon linux, linux merdeka, aplikasi untuk warnet dari tim IGOS, dan lain sebagainya yang tidak bisa disebutkan satu persatu. Produk perangkat lunak Open Source sudah merambah pada banyak bidang, terutama bidang pendidikan, terlebih pada statistik. Banyak perangkat lunak statistik berbasis Open Source atau berkategori Freeware yang sudah disediakn untuk publik, diantaranya: Tabel 1.1 : Daftar spesisifkasi dan alamat software freeware / Open Source No 1
Nama Dataplot
2
ADE4
3
Vista
4
TANAGRA
Lisensi/OS
Keterangan
Situs Web
FreeMultiplatform
Untuk scientific visualization, statistical analysis dan non-linear modeling
http://www.itl.nist.gov/div898/ software/dataplot/homepage.htm
Data analisis
http://pbil.univ-lyon1.fr/ADE4/home.php?lang=eng http://forrest.psych.unc.edu/ research/index.html
Open SourceMac/Windows
Open SourceWindows
Statistical Visualization highly Dynamic and Very Interactive Data Mining
http://eric.univlyon2.fr/~ricco/tanagra/ en/tanagra.html 3
5
R
Open SourceMultiplatform
http://cran.r-project.org/ Programming Environment for Data Analysis and Graphics
6
WINIDAMS FreewareWindows
Paket http://www.unesco.org/idams Software untuk Validasi, Manipulasi, dan Analisis Data Statistik
7
TRAMOSEATS
FreewareWindows
Software Statistik dan Econometric
http://www.bde.es/servicio/ software/tswe.htm
8
JMULTI
Open Sourcewindows/Linux
Untuk Univariate dan Multivariate Time Series
http://www.jmulti.de/
9
OPENSTAT
Free untuk Untuk Social Windows/Linux Science
http://www.statpages.org/ miller/openstat/
4
BAB
II Software R dan Fitur-Fiturnya
Dalam bab ini akan pengembangannya.
dijelaskan
mengenai
R,
sejarah,
penggunaan
dan
II.1. Sejarah & Pengembangan R R adalah suatu kesatuan software yang terintegrasi dengan beberapa fasilitas untuk manipulasi, perhitungan dan penampilan grafik yang handal. R berbasis pada bahasa pemrograman S, yang dikembangkan oleh AT&T Bell Laboratories (sekarang Lucent Technologies) pada akhir tahun ’70 an. R merupakan versi gratis dari bahasa S dari software (berbayar) yang sejenis yakni S-PLUS yang banyak digunakan para peneliti dan akademisi dalam melakukan kegiatan ilmiahnya. Pada awalnya, versi pertama R dibuat oleh Ross Ihaka and Robert Gentleman dari Universitas Auckland, namun selanjutnya R dikembangkan oleh tim yang disebut tim inti. Tim inti (core team) terdiri dari ahli statistik, ahli komputer & pemrograman, geografi, ekonomi dari institusi yang berbeda dari seluruh dunia yang mencoba membangun sebuah sistem (software) yang handal namun dengan biaya yang sangat murah. Sampai tulisan ini dibuat, R dapat secara cuma-cuma didownload dan digunakan dengan berlisensi pada GNU General Public License. Menurut kutipan dari penghargaan Association for Computing Machinery Software bagi John Chamber 1998, menyatakan bahwa (bahasa pemrograman) S telah “merubah orang dalam memanipulasi, visualisasi dan menganalisis data untuk selamanya”. R dibuat searah dengan ide yang ada pada bahasa pemrograman S. Sampai tulisan ini dibuat versi R terbaru adalah R.2.4.1. , dan banyak projek lainnya yang berkaitan /berbasis /perluasan dari R, seperti geoR, Rattle, R Commander, SciViews R GUI, dan lain lain, yang anda dapat lihat ataupun download (jika sudah di terbitkan) di situs resmi projek R.
5
II.2. R dan program statistik lainnya. Seperti dijelaskan sebelumnya, R merupakan “kerabat” dekat dari S-PLUS dimana secara fungsi dan sintaks/tata bahasa sama-sama menggunakan bahasa S, namun tidak identik. R dapat berinteraksi dengan program statisik, manipulasi, perhitungan dan penampilan grafik lainnnya, seperti SPSS, yang cukup popular, Microsoft Excell dengan menyediakan fasilitas import dan eksport data. Selain software di atas, R dapat melakukan import file dari software lainnya seperti, Minitab, SAS, Stat, Systat dan EpInfo. Menurut [20], R adalah bahasa fungsional1, dimana terdapat inti bahasa yang menggunakan bentuk standar notasi aljabar, yang memungkinkan perhitungan numerik seperti 2+3, atau 3^11. Selain itu tersedia pula fasilitas perhitungan dengan menggunakan fungsi. Dengan beberapa fitur tersebut, R menjadi alat yang tangguh bagi para statistikawan, ahli ekonomi, peneliti dalam membantu risetnya, dikarenakan R dibangun dan didukung dengan model dan teori statistik terdepan dan menggunakan standar tertinggi bagi analisis data. R hampir dapat digunakan untuk berbagai bidang, mulai dari kalkulasi biasa (seperti kalkulator), statistik, ekonometri, geografi, hingga pemrograman komputer. II.2.1. Kelebihan dan Fitur-fitur R R mempunyai karakteristik tersendiri, dimana selalu dimulai dengan prompt “>“ pada console-nya. R mempunyai beberapa kelebihan dan fitur-fitur yang canggih dan berguna, diantaranya: - efektif dalam pengelolaan data dan fasilitas penyimpanan. Ukuran file yang disimpan jauh lebih kecil dibanding software lainnya. - lengkap dalam operator perhitungan array, - lengkap dan terdiri dari koleksi tools statistik yang terintegrasi untuk analisis data, diantaranya, mulai statistik deskriptif, fungsi probabilitas, berbagai macam uji statistik, hingga time series. - tampilan grafik yang menarik dan fleksibel ataupun costumized - dapat dikembangkan sesuai keperluan dan kebutuhan dan sifatnya yang terbuka, setiap orang dapat menambahkan fitur-fitur tambahan dalam bentuk paket ke dalam software R Selain kelebihan dan kelengkapan fitur-fiturnya, hal yang terpenting lainnya yakni, R bersifat multiplatform, yakni dapat diinstall dan digunakan baik pada system operasi Windows , UNIX/LINUX maupun pada Macintosh. Untuk dua system operasi disbeutkan terakhir diperlukan sedikit penyesuaian. Selain kelebihan disebutkan di atas, R didukung oleh komunitas yang secara aktif saling berinteraksi satu sama lain melalui Internet dan didukung oleh manual atau Rhelp yang menyatu pada software R. Sebagai catatan, buku ini mengambil contoh pada penggunaan R pada system berbasis Windows.
6
II.2.2. R, Riset dan Akademis Software R sangat cocok untuk riset, baik statistik,ekonomi, komputasi numerik dan pemrograman komputer. Karena didukung oleh banyak tenaga ahli dibidangnya, R layak dijadikan suatu perangkat lunak acuan bagi berbagai kalangan, terlebih di kalangan akademik (dosen, mahasiswa). Selain itu R memiliki fitur yang lengkap dan handal serta faktor tanggung jawab moral dan legal/hukum bukan lagi menjadi kekhawatiran dalam penggunaannya, karena dapat diperoleh secara GRATIS. Berikut adalah beberapa contoh yang didapat dari R sebagai acauan implementasi pada:. 1. Pemodelan matematis (seperti software MATLAB) dalam membentuk perspektif, cocok jurusan teknik arsitek, sipil, mesin, dan ilmu computer (pencitraan) z = Sinc ( x2 + y2 )
y
z
x
.
Gambar 2.1 : Grafik multidimensi hasil perhitungan R 2. Pencitraan dan analisis kontur, cocok untuk jurusan geografi dan sejenis
300 100
200
y
400
500
600
M aunga Whau Volcano col=gray(100:200/200)
100
200
300
400
500
600
700
800
x
Gambar 2.2: Grafik kontur dan topografi hasil perhitungan R 7
3. Proses analisis data statistik,dengan tampilan grafik plot yang costumized dan grafik fungsi densitas yang dapat diparalelkan dnegan histogram. Cocok untuk bidang statistika, ekonomi, dan lain lain.
Gambar 2.3 : Grafik scatter plot hasil perhitungan R
-1
0
1
2
3
Sim ple Use of Color In a Plot
0
10
20
30
40
50
Just a Whisper of a Label
Gambar 2.4 : Contoh grafik hasil plotting R 8
Gambar 2.5 : Contoh grafik histogram R
Gambar 2.6: Contoh grafik pie chart R
9
BAB
III Memulai R Dalam bab ini akan dijelaskan tatacara penggunaan R, dimulai dari mendapatkan source-nya, instalasi dan penggunaan serta pengenalan menu-menu. III.1. Mendapatkan Program (source) R Program Sumber R dapat didownload secara gratis pada situs web projek R di http://CRAN.R-project.org, serta dilengkapi dengan paket penunjang tools atau metode lainnya. Selain itu, R dapat anda install langsung dari CD yang disertakan dalam buku ini (termasuk contoh kode sebgai latihan dan manual). Versi yang kami gunakan dalam buku ini adalah R.2.1.1. III.2. Instalasi Instalasi yang kami jelaskan di sini yakni pada system operasi Windows dan Linux (dengan alasan penggunaan system operasi yang paling umum di Indonesia). Sedangkan penggunaan R dalam tulisan ini berjalan pada system operasi Windows. III.2.1. Instalasi di Sistem Operasi Windows Cara instalasi pada system operasi Windows sangatlah mudah, yakni dengan mengklik dua kali pada file aplikasi rw2011 yang kemudian lakukan dalam delapan langkah mudah berikut ini:
10
Gambar 3.1: Langkah 1 instalasi
√ Pilih bahasa instalasi, kemudian Klik OK!
Gambar 3.2 : Langkah 2 instalasi
√ Klik Next untuk melanjutkan installasi
11
Gambar 3.3: Langkah 3 Instalasi
√ Pilih I accept the agreement (atau scroll ke bawah untuk membaca GNU GPL) dan klik Next untuk melanjutkan installasi
Gambar 3.4: Langkah 4 Instalasi √ Pilih Browse dan tentukan directory installasi R anda, kemudian klik Next untuk melanjutkan instalasi 12
Gambar 3.5: Langkah 5 Instalasi
√ Pilih komponen yang akan diinstall (disarankan pilih semua), kemudian klik Next untuk melanjutkan instalasi
Gambar 3.6 : Langkah 6 Instalasi √ Pilih Browse dan tentukan nama dan letak program R anda, kemudian klik Next untuk melanjutkan installasi 13
Gambar 3.7: Langkah 7 Instalasi
√ Pilih icon tambahan, kemudian klik Next untuk melanjutkan installasi
Gambar 3.8: Langkah 8 Instalasi
√ Klik Finish untuk menyelesaikan instalasi, dan R anda sudah dapat digunakan.
14
III.2.2. Melakukan Un-Instal R di Sistem Operasi Windows Untuk menghilangkan/un-instal R sangat lah mudah. Normalnya, anda menuju Control Panel ->Add or Remove Programs -> Pilih R untuk di remove/un-install. Cara kedua, dengan menuju Start -> All Programs -> R -> Uninstall R 2.1.1 Cara lainnya, apabila menginstall dalam Program Files/R/rw2011, maka lakukan langkah berikut: Buka Windows Explorer Anda -> Program Files -> R -> rw2011 -> pilih icon aplikasi unins001. Setelah anda melakukan salah satu dari tiga cara un-instalasi, maka akan keluar window:
Gambar 3.9 : Kotak dialog, konfirmasi un-instalasi Klik Yes untuk melanjutkan un-install atau Klik No untuk membatalkan un-install. III.2.3. Instalasi di Sistem Operasi Linux Pada dasarnya R dapat bekerja hampir di semua sistem operasi yang ada sekarang ini, seperti Unix beserta turunannya termasuk Darwin, juga di Mac OS X, FreeBSD, Solaris dan termasuk LINUX. Ada distro/jenis Linux yang memerlukan cara instalasi, diantaranya (yang kami ambil dari situs R) adalah debian, Suse, Ubuntu. Namun dalam pembahasan tata cara instalasi, kami jelaskan bagian umum untuk sistem operasi ini. III.2.4. Menu-menu dalam R Setelah instalasi selesai anda dapat menjalankan R pada tombol menu Start>All Programs> R > R 2.1.1 atau klik dua kali ikon R 2.1.1
15
Gambar 3.10: Posisi program R pada Start menu Desktop Setelah menjalankan program R, windows yang tampil akan seperti gambar berikut.
Gambar 3.11: Tampilan muka program R
16
Menu default R-RGui Menu Utama Berikut adalah tampilan menu utama dalam R console, yang masing-masing akan dijelaskan pada bagian berikutnya.
Gambar 3.12. : Menu utama R
1. Menu File Menu ini menampilkan diantaranya: cara mengambil kode sumber R yang sudah ada tau tersimpan di komputer kita dengan menggunakan menu Source R code. Biasanya untuk perhitungan statistic tertentu kita dapat mendownload kode sumber dari internet secara Cuma-Cuma sehingga kita tidak harus menulis ulang kode sumber yang biasanya dengan jumlah baris perintah/command yang sangat panjang. Menu ini juga memudahkan kita dalam menyimpan ruang kerja/workspace yang sedang kita kerjakan (menu Save Workspace) di R console ke dalam folder komputer kita dan menggunakannya kembali dengan menggunakan menu Load Workspace.
Gambar 3.13: Menu File R
17
2. Menu Edit Menu ini adalah menu editor yang diantaranya berisikan: menu editor yang umum seperti Copy, Paste, Select All, dan menu editor lainnya seperti menempelkan (paste) hanya commands, membersihkan console R sehingga console R yang penuh dengan commands akan putih bersih sediakala ketika memulai R. Selain itu kita dapat juga mengedit data yang kita miliki dengan emnggunakan menu Data editor.
Gambar 3.14: Menu Edit R 3. Menu Misc Menu ini adalah menu tambahan diantaranya: memberhentikan seketika perhitungan yang sedang berlangsung dengan menggunakan tombol ESC; menampilkan objek (List objects) dan membuang objek (Remove all objects)
Gambar 3.15: Menu Misc (miscellaneous) R
4. Menu Packages Menu ini berisikan fasilitas untuk menambahkan paket statistic dan paket lainnnya dalam menu Load package dan instalasi paket dalm Install package(s) dan update paket dalm Update packas serta memungkinkan instalasi paket dari file zip yang ada di komputer kita (local) dengan menggunakan menu Install package(s) from local zip files 18
Gambar 3.16: Menu Packages R
5. Menu Windows
Gambar 3.17: Menu Windows R
6. Menu Help Menu ini berisikan sejumlah panduan, pertanyaan yang sering diajukan tentang R (FAQ) , fasilitas pencarian melalui situs resmi maupun situs proyek pengembangan R. Panduan dalam format html dan pdf (anda memerlukan pdf viewer terinstal di komputer seperti acrobat reader dan sejenisnya)
19
Gambar 3.18: Menu Help R III.2.5. Library dan fungsi dasar dalam instalasi R.2.1 Ketika anda telah melakukan instalasi R 2.1.1 yang telah anda download, anda akan mendapatkan R dengan koleksi library dan fungsi standar yang termasuk penting, antara lain sebagai berikut: Tabel 3.1: Paket dalam perangkat lunak R Library atau Fungsi Base Chron Class Cluster Datasets Foreign Graphics GrDevices Grid KernSmooth Lattice MASS Methods Mle Multcomp Mvtnorm
Keterangan & Penjelasan Paket dasar R Objek kronologis yang mengatasi masalah penanggalan hari dan waktu Fungsi untuk pengklasifikasian Fungsi untuk klastering (clustering) Paket kumpulan data-data R (contoh data-data) Membaca data yang tersimpan dalam bentuk file dari software seperti Minitab, S,SAS,SPSS, Stata, dll. Paket grafik R Fitur pendukung grafik untuk warna dan huruf Paket grafik Grid Fungsi untuk pemulusan Kernel (Kernel Smoothing) Grafik Lattice Main Library of Venables and Riple’s MASS Metode Formal dan Pengkelasan (Classes) Maximum likelihood estimation (Penaksir Likelihood Maksimum) Test berganda dan interval kepercayaan simultan Multivariate normal dan distribusi T 20
Tabel 3.1 (Lanjutan) Library atau Fungsi Nlme Nnet Rgl Rpart SparseM Spatial Splines Stats
Stepfun Survival Utils
Keterangan & Penjelasan Non-linear and linear mixed effect models (Model efek linear campuran linear dan non-linear) Feed-forward neural networks Sistem penampilan tiga dimensi 3D (OpenGL) Pempartisian rekursif Aljabar linier Sparse Fungsi untuk analisis pola titik-titik dan Kriging Regresi fungsi Spline dan peng-kelasan Paket Statisik R (termasuk uji klasik, smoothing, regresi, analisis multivariate, non-linear least square, analisi time series, dll) Fungsi step, termasuk Distribusi Empirik Analisis Survival termasuk penalished likelihood Utilitas R
Sedangkan untuk paket dan uji dan tools statitistik lainnya serta untuk pemrograman dan grafik, bisa didownload di CRAN (situs Internet R).
21
BAB
IV Fitur Dasar R
IV.1. Manipulasi sederhana untuk bilangan dan vektor Vektor dan assignment R beroperasi pada suatu struktur data, contoh yang paling sederhana adalah vektor numerik, yakni suatu entitas tunggal yang terdiri dari koleksi terurut bilanganbilangan. Misalkan pembuatan vektor numerik x yang mempunyai enam bilangan 11.0, 16.2, 7.2, 1.3, 8.3, 3.6. Perintah yang digunakan pada prompt (>) R sebagai berikut: > x
<− c(11.0, 16.2, 7.2, 1.3, 8.3)
Perintah ini merupakan assignment dengan menggunakan fungsi c(), sedangkan assignment operator adalah ”<-” yang terdiri dari tanda kurang dari ”<” dan tanda minus ”-”. Assignment tersebut di atas dapat juga dilakukan dengan menggunakan fungsi assign(): > assign("x", c(11.0, 16.2, 7.2, 1.3, 8.3))
Fungsi assign() identik dengan operator “<-“. Selain operan x terletak di sebelah kiri, pada R operan x tersebut dapat terletak di sebelah kanan dan dengan menggunakan tanda assignment ”->” yang berlawanan dengan tanda assignment sebelumnya, seperti berikut ini: > c(11.0, 16.2, 7.2, 1.3, 8.3) −> x
22
Perintah berikut: > y <− c(x,0,x) > y [1] 11.0 16.2 7.2
1.3
8.3
0.0 11.0 16.2
7.2
1.3
8.3
akan meng-assign vektor y dengan panjang 11 elemen, yang merupakan penggabungan (concatanation) vektor x, angka 0 dan vektor x. Vektor Aritmatika Vektor dapat digunakan dalam ekspresi aritmatika, dimana operasi-operasi aritmatika dilakukan pada setiao elemen vector. Vektor-vektor pada suatu ekspresi aritmatika yang sama tidak harus memiliki panjang yang sama. Hasil perhitungan yang melibatkan beberapa vektor dengan panjang yang berbeda akan menghasilkan vektor dengan panjang yang sesuai dengan vektor yang terpanjang dalam ekspresi tersebut. Pada vektor yang lebih pendek elemen akan diulang dari elemen terdepan hingga panjang vemtor tersebut sama dengan vektor yang terpanjang, begitupun dengan konstanta. Sebagai contoh perhatikan perintah berikut: > v <− 2*x+y+1 > v [1] 34.0 49.6 22.6
4.9 25.9 23.0 44.4 31.6 10.8 18.9 31.3
Perintah tersebut di atas akan menghasilkan vektor v dengan panjang sesuai dengan panjang vektor y, yaitu 11. Dimana vektor x diulang sebanyak 11/5 (2.2) kali dan konstanta 1 diulang sebanyak 11/1 (11) kali. Beberapa operator aritmatik yang tersedia di R untuk operasi vektor adalah seperti pada tabel berikut: Tabel 4.1 Operator Aritmatik dalam R Operator
Fungsi
+, -, *, / , ^
Penjumlahan, pengurangan, perkalian, pembagian dan perpangkatan log, exp, sin, cos, tan, Logaritma basis 10, exponential, sinus, sqrt, mean, var cosinus, tangen, akar kuadrat, nilai ratarata dan varian min, max, range, length Nilai minimum, maksimum, ranah vektor, dan panjang vektor sum, prod Jumlah total elemen vektor dan product (perkalian) vektor Sebagai contoh, untuk menghitung dua nilai dalam sample, yakni mean dan variansi (var) dapat kita tuliskan formula sum(x)/length(x) untuk mean(x) dan sum((x-mean(x))^2)/(length(x)-1) untuk var(x) Fungsi sort(x) akan menghasilkan sebuah vektor yang berukuran sama dengan vector x dimana elemennya sudah terurut dengan urutan menaik; selain itu terdapat 23
fasilitas pengurutan lain yang fleksibel (lihat fungsi order() atau sort.list() yang menghasilkan suatu permutasi dalam pengurutan). > sort(x) [1] 1.3 7.2 8.3 11.0 16.2 > order(x) [1] 4 3 5 1 2 > sort.list(x) [1] 4 3 5 1 2
Catatan: fungsi max dan min memilih nilai terbesar dan terkecil dari input argumen. Fungsi parallel maksimum (pmax) dan parallel minimum (pmin) menghasilkan sebuah vector (yang panjangnya sama dengan vector yang terpanjang dari input argumen) dimana elemennya merupakan nilai terbesar (terkecil) diantara nilai elemen pada posisi yang sama dari vector-vektor input argument yang dibandingkan. Pada kebanyakan penggunaan, kita tidak perlu memperhatikan tipe data numeric vektor apakah integer, real atau bahkan kompleks. Pada dasarnya R akan menggunakan tipe data real dengan double precision untuk melakukan proses aritmatika (untuk bilangan kompleks menggunakan double procision complex). Perhitungan bilangan kompleks secara eksplisit menggunakan format bilangan kompleks tersebut. Sebagai contoh: > sqrt(-17) Warning message: In sqrt(-17) : NaNs produced
Kesalahan disebabkan oleh tidak ada nilai untuk akar negatif, sehingga perlu dikonversi nilai -17 sebagai bilangan kompleks, yaitu -17 + 0i sehingga pencarian nilai akar -17 adalah: > sqrt(-17+0i) [1] 0+4.123106i
yang menghasilkan bilangan kompleks Barisan R juga mempunyai sejumlah fasilitas untuk membangkitkan (generate) barisan bilangan. Fungsi yang digunakan adalah seq(). Sebagai contoh, untuk menuliskan suatu barisan dari 1 hingga 20, kita tidak perlu menuliskan satu persatu elemen ke dalam vektor, cukup menuliskan > seq (1, 20)
atau > seq (from=1, to=20)
akan menghasilkan [1]
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18 19 20
24
Keterangan: [1] pada sisi paling kiri mengartikan baris ke-1 dari hasil perhitungan di R > seq (20, 1)
Perintah tersebut akan menghasilkan barisan bilangan yang menurun dari 20 ke 1 Barisan bilangan juga dapat dibangkitkan dengan cacah kelipatan tertentu. Misalkan: > s3 <- seq(from=-5, to=5, by=.5)
atau > s3 <- seq(-5,5,by.5)
atau > s3 <- seq(length=21,from-5,by=.5)
Ketiga perintah diatas menghasilkan keluaran yang sama. Argumen length menyatakan panjang vektor. > s3 [1] -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 1.5 2.0 [16] 2.5 3.0 3.5 4.0 4.5 5.0
0.0
0.5 1.0
Pembangkitan barisan bilangan yang elemennya merupakan pengulangan dapat dilakukan dengan menggunakan fungsi rep(), misalkan: > s4 <- rep(x,times=5) [1] 11.0 16.2 7.2 1.3 16.2 7.2 1.3 8.3 [16] 11.0 16.2 7.2 1.3
8.3 11.0 16.2
7.2
8.3 11.0 16.2
7.2
1.3 1.3
8.3 11.0 8.3
akan menyalin sebanyak 5 kali angka 4, sedangkan perintah berikut: > s5 <- rep(4,each = 5) [1] 11.0 11.0 11.0 11.0 11.0 16.2 16.2 16.2 16.2 16.2 7.2 7.2 [16] 1.3 1.3 1.3 1.3 1.3 8.3 8.3 8.3 8.3 8.3
7.2
7.2
7.2
akan menyalin setiap elemen x sebanyak 5 kali. Vektor Logika Seperti halnya vektor numerik, R juga menyediakan fasilitas untuk memanipulasi nilai logika. Elemen dari suatu vektor logika dapat bernilai Boolean (TRUE atau FALSE) atau NA (untuk ”not available” (tidak tersedia)). TRUE dan FALSE masingmasing biasa disingkat T dan F. Dalam hal ini T dan F hanyalah sebagai variabel yang di set nilainya ke TRUE dan FALSE secara defaultnya, tetapi bukan merupakan reserved word, sehingga dapat digunakan sebagai variabel dengan tipe lainnya. Vektor logika dibangkitkan dengan menggunakan perintah kondisi, seperti: > temp <- x < 13
25
akan menghasilkan suatu vektor yang panjangnya sam dengan vektor x dimana nilai elemennya merupakan nilai BOOLEAN dari hasil perbandingan nilai setiap elemen di x, dimana jika nilai elemen x < 13 maka bernilai TRUE selain itu bernilai FALSE. Sehingga nilai vektor temp adalah: > temp [1] FALSE
TRUE FALSE FALSE FALSE
Operator logika yang ada di R adalah <, <=, >, >=, == untuk persamaan eksak dan != untuk pertidaksamaan. Jika c1 dan c2 adalah ekspresi logika, maka c1&c2 adalah irisan keduanya, c1|c2 adalah gabungan keduanya dan !c1 adalah negasi(atau ingkaran) dari c1 Vektor logika dapat digunakan pada operator aritmatik, dimana nilai FALSE dinyatakan sebagai 0 dan TRUE sebagai 1. Tetapi juga vektor logika dengan nilai numeriknya tidak ekivalen. Missing value Dalam beberapa kasus dijumpai adanya komponen yang tidak lengkap dari suatu vektor. Nilai atau elemennya menjadi “not available” atau “missing value”, dan untuk alasan statistika, biasanya digantikan dengan nilai khusus NA. Umumnya dalam setiap operasi NA akan menjadi NA. Motivasinya adalah, jika spesifikasi suatu operasi tidak lengkap, maka hasilnya tidak diketahui dan oleh karenanya menjadi “not available”. Sebagai contoh, fungsi is.na(x) memberikan vektor logika yang mempunyai panjang yang sama dengan x dengan nilai TRUE jika dan hanya jika elemen yang berkorespondensi dalam x adalah NA. > z <- c(1:3,NA); ind <- is.na(z) > z [1] 1 2 3 NA > ind [1] FALSE FALSE FALSE TRUE
Maksud dari hasil diatas, pertama mendefinisikan vektor c dengan elemen vector 1, 2, 3, NA. Kemudian membentuk vector ind berupa nilai logika dari setiap elemen c dengan kondisi is.na(z), yaitu apabila elemen di c berupa NA maka bernilai TRUE, selain itu bernilai FALSE. Terkadang pada operasi perhitungan juga akan dijumpai hasil NaN (Not a Number) untuk kalkulasi yang tidak mempunyai nilai, misal > 0/0 [1] NaN > Inf – Inf [1] NaN
(Ket: Inf = Infinity (tak berhingga ∞).
26
Vektor karakter Vektor ini sering digunakan dalam R, misalkan dalam memberikan label suatu plot. Vektor ini menggunakan tanda petik dua (“) atau tanda petik satu (‘) untuk string karakter, dan biasanya di print dalam petik dua (“) (kadang tanpa tanda petik). Sebagai contoh > labs <- paste(c("X","Y"), 1:10, sep="")
menghasilkan vektor karakter labs [1] "X1"
"Y2"
"X3"
"Y4"
"X5"
"Y6"
"X7"
"Y8"
"X9"
"Y10"
IV.2. Objek dan Atribut Entitas dalam R dikenal sebagai objek. Vektor logika, vektor numeric, vektor karakter adalah suatu objek. Operasi pada objek harus mempunyai mode (atau sifat/property) objek yang sama, tanpa kesamaan tersebut maka operasi akan mengalami kesalahan (error). Singkatnya, nilai vektor semuanya harus mempunyai mode yang sama. Atribut (attribute) Fungsi attribute(object) menampilkan/mendapatkan daftar semua atribut non-instrinsik yang didefinisikan untuk suatu objek. Fungsi attr(object, name) dapat digunakan untuk memilih suatu atribut tertentu. Sebagai contoh > attr(z, "dim") <- c(10,10)
mendefiniskan bahwa z memiliki mode sebagai matriks berukuran 10 x 10. Kelas (class) Objek Semua objek di R mempunyai kelas, dengan menggunakan fungsi class(). Kelas objek yang merupakan atribut spesial digunakan dalam pemrograman berorientasi object di R. Sebagai contoh, suatu objek dengan kelas “data.frame”, akan ditampilkan (di print) dengan cara tertentu. fungsi plot() akan menampilkan grafik dalam cara tertentu. Secara umum, suatu kelas objek mempunyai tampilan yang berbeda-beda. Untuk menghilangkan sementara efek dari kelas, maka dapat digunakan fungsi unclass(). Sebagai contoh, jika notebook berkelas “data.frame” maka > notebook
akan dicetak dalam bentuk data frame, yang mirip dengan tampilan matriks, dimana > class(notebook)
akan dicetak dalam bentuk daftar (list) biasa.
27
IV.3. Faktor terurut dan tidak terurut Suatu faktor adalah objek vektor yang digunakan untuk menspesifikasikan pengelompokan (grouping) diskrit komponen-komponen vektor lain yang mempunyai panjang yang sama. R menyediakan fasilitas untuk factor baik terurut maupun factor tidak terurut. Sebagai contoh, misalkan terdapat sample 15 akuntan pajak dari beberapa provinsi di pulau jawa, yaitu: 1 dari Banten (btn), 4 dari Jakarta (jkt), 3 dari Jawa Barat (jabar), 3 dari Jawa Tengah (jateng), 2 dari Yogyakarta (diy) dan 2 dari Jawa Timur (jatim). Vektor akuntan dinyatakan sebagai berikut: > prov <- c("btn", "btn", "btn", "dki", "dki","dki", "dki", "jabar", "jabar", "jabar", "jateng", "jateng", "jateng", "diy","diy", "jatim", "jatim")
Suatu faktor dibuat dengan menggunakan fungsi factor() > provf <- factor(prov)
Fungsi print() menangani factor dengan cara yang sedikit berbeda dari objek lain: > provf [1] btn btn [11] jateng
btn
dki
dki
dki
dki
jabar
jabar
jateng jateng diy diy jatim Levels: btn diy dki jabar jateng jatim
jabar
jatim
Untuk menentukan level suatu vektor, gunakan fungsi level() > levels(provf) [[1] "btn" "diy" "dki" "jabar" "jateng" "jatim"
Fungsi tapply() Melanjutkan contoh sebelumnya, setiap akuntan memiliki pendapatan yang dinyatakan dalam suatu vector yang berbeda, yaitu vector incomes. > incomes <- c(50, 82, 75, 80, 60, 61, 64, 60, 60, 75, 89, 96, 68, 89, 96, 93, 78)
Untuk menghitung nilai mean sample pendapatan untuk setiap provinsi, kita gunakan fungsi tapply(): > incmeans <- tapply(incomes, provf, mean); > incmeans
akan memberikan mean vektor untuk setiap provinsi btn diy dki jabar jateng jatim 69.00000 92.50000 66.25000 65.00000 84.33333 85.50000
28
Selain itu kita juga dapat mendefinisikan fungsi sendiri di R. Seperti berikut ini merupakan pendefinisian fungsi standard error (stderr): > stderr <- function(x) sqrt(var(x)/length(x))
dimana var(x) adalah variansi sample. Selanjutnya, standar error untuk masing-masing prov dituliskan sebagai berikut: > incster <- tapply(incomes, provf, stderr) > incster btn diy dki jabar jateng jatim 9.712535 3.500000 4.661455 5.000000 8.412953 7.500000
Faktor terurut Level-level dari faktor-faktor disimpan secara terurut alfabetis, atau dalam urutan dimana faktor dispesifikasikan secara eksplisit. Terkadang level akan memiliki suatu urutan yang sesuai dengan yang diinginkan untuk merekam data yang kemudian digunakan untuk analisis statistik. Fungsi ordered() membentuk factor terurut tetapi identik dengan fungsi faktor(). Pada kebanyakan penggunaan, yang hanya menjadi perbedaan antara faktor terurut dengan tidak terurut adalah pembentukan urutan level. Tetapi hal ini berbeda dengan pembentukan dalam model pencocokan linear. IV.4. Matriks dan Array IV.4.1 Array Suatu array adalah koleksi beragam model subscript data entri, misalkan numerik. R memiliki fasilitas untuk pembuatan dan penanganan array, dan khususnya matriks. Dimensi vektor adalah vektor bilangan bulat non-negatif. Jika panjang vektor tersebut k maka array merupakan berdimensi k. Sebagai contoh, matrik adalah array berdimensi 2. Dimensi adalah indeks dari satu hingga nilau yang diberikan dalam dimensi vektor. Suatu vektor dapat digunakan di R sebagai suatu array jika hanya memiliki dimensi sama dengan atribut dim nya. Misalkan suatu vektor z merupakan vektor yang terdiri dari 1500 elemen. Perintah > dim(z) <- c(3,5,100)
Memberikan ke vektor nilai atribut dim yang menyatakan vektor tersebut merupakan array dengan dimensi 3x5x100. R memiliki fungsi yang dapat mempermudah penulisan vektor yakni matrix() dan array(). Contoh, jika array berdimensi vektor c(3, 4, 3) maka array tersebut mempunyai 3 x 4 x 3 =36 elemen.
29
IV.4.2 Indeks matriks
Suatu matriks dapat digunakan dengan indeks tunggal untuk memberukan nilai untuk koleksi elemen yang tidak beraturan dalam array tersebut, atau untuk mengekstraksi koleksi yang tidak beraturan sebagai suatu vektor. Contoh yang jelas adalah suatu matriks. Dalam hal indeks ganda suatu array, suatu indeks matriks dapat terdiri dari dua kolom dan banyak baris sesuai dengan yang diinginkan. Entri dalam indeks matriks adalah indeks baris dan kolom untuk array berindeks ganda. Misalkan kita memilik array X berdimensi 4x5 dan untuk mendapatkan array X tersebut dapat melakukan hal sebagai berikut: − Ekstrak elemen X[1,3], X[2,2] dan X[3,1] sebagai suatu struktur vektor, dan − Menggantikan entri-entri pada indeks tersebut dengan 0 dalam array X Dalam kasus ini, diperlukan suatu array bersubscript 3x2 seperti contoh berikut ini: > x <- array(1:20, dim=c(4,5))
Perintah tersebut akan membentuk array berukuran 4 x 5 > x [1,] [2,] [3,] [4,]
[,1] [,2] [,3] [,4] [,5] 1 5 9 13 17 2 6 10 14 18 3 7 11 15 19 4 8 12 16 20
> i <- array(c(1:3,3:1), dim=c(3,2))
Perintah tersebut akan membentuk array berukuran 3x2 > i [1,] [2,] [3,]
[,1] [,2] 1 3 2 2 3 1
> x[i] # Mengekstrak elemen-elemen tersebut [1] 9 6 3 > x[i] <- 0
perintah di atas mengganti elemen-elemen tersebut dengan nol > x [1,] [2,] [3,] [4,]
[,1] 1 2 0 4
[,2] [,3] [,4] [,5] 5 0 13 17 0 10 14 18 7 11 15 19 8 12 16 20
30
Indeks negatif tidak diperbolehkan dalam indeks matriks. Nilai 0 dalam indeks matriks akan diabaikan, sedangkan nilai NA akan menghasilkan NA. IV.4.3 Fungsi array( ) Selain menggunakan atribut dim (dimension), sebuah vector dapat juga dibentuk dengan menggunakan fungsi array(), dengan bentuk umum sebagai berikut: > Z <- array(data_vector, dim_vector)
Sebagai contoh, jika vektor h mempunyai 24 atau lebih sedikit elemen, maka dapat dituliskan dengan cara seperti berikut: >Z <- array(h, dim=c(3,4,2))
perintah tersebut akan membentuk array 3x4x2 di Z. Sedangkan jika ukuran h adalah tepat 24 elemen maka hasilnya sama dengan > dim(Z) <- c(3,4,2)
However if h is shorter than 24, its values are recycled from the beginning again to make it up to size 24
Tetapi jika h lebih pendek dari 24, maka nilainya digunakan (diputar) kembali dari depan hingga ukurannya menjadi 24. Dalam hal indeks, dim(Z) menyatakan dimensi vector c(3,4,2) dan Z[1:24] menyatakan data vektor seperti h di atas, dan Z[] dengan subscript hampa atau Z tanpa subscript untuk menyatakan array keseluruhan sebagai array. IV.4.4 Outer product dari dua array Outer product merupakan salah satu operasi yang penting dalam array. Jika a dan b dua array numeric, outer product dari array tersebut adalah sebuah array dengan dimensi dan data dari array a dan b sesuai dengan ketentuan perkalian matriks. Operator outer product berbentuk %o% . Contoh: > ab <- a %o% b
Sebagai alternative: > ab <- outer(a,b,”*”)
Fungsi perkalian dapat digantikan oleh sembarang fungsi dengan dua variabel. Sebagai contoh jika akan menghitung fungsi f(x,y) = cos(y) = (1 + x2) pada grid nilai vektor sumbu x dan y di R, maka dapat dilakukan sebagai berikut: > f <- function(x, y) cos(y)/(1 + x^2) > z <- outer(x, y, f)
31
Secara khusus, outer product dua vector adalah array dengan subscript ganda (yaitu sebuah matriks dengan rang paling besar 1). Operator outer product bersifat non komutatif.
Contoh: Perhitungan nilai determinan matriks berdigit tunggal berukuran 2x2. [a, b; c, d] dimana setiap elemen adalah integer non negative dalam range 0, 1, ;..., 9. Permasalahannya adalah bagaimana menghitung determinan ad-bc, dari semua kemungkinan matriks dalam bentuk yang ditentukan tersebut serta menunjukkan frekuensi kemunculan setiap nilai sebagai plot densitas tinggi (high density). Untuk mendapatkan probabilitas distribusi determinan jika setiap digit dipilih secara bebas dan acak secara uniform, maka digunakan fungsi outer() sebanyak dua kali seperti berikut: > d <- outer(0:9, 0:9) > fr <- table(outer(d, d, "-")) > plot(as.numeric(names(fr)), fr, type="h",xlab="Determinan", ylab="Frekuensi")
Catatan: konversi dari atribut names dari table frekuensi fr ke numeric untuk mendapatkan range nilai determinan.
Hasil dari perintah di atas adalah sebagai gambar plot berikut:
Gambar 4.1: Plot densitas tinggi untuk frekuensi kemunculan matriks 32
IV.4.5 Array Transpose Fungsi aperm(a, perm) digunakan untuk permutasi array a. Argumen perm adalah permutasi bilangan bulat {1, ..., k}, dimana k adalah banyaknya subscripts dalam a. Hasil fungsi tersebut adalah array yang berukuran sama dengan a namun dengan dimensi yang sebelumya diberikan oleh perm[j] menjadi dimensi baru yakni dimensi ke j. Cara paling mudah, yakni dengan menganggap operasi tersebut sebagai transposisi matrik. Jika A adalah matrik, maka B (sebagai permutasi A) dituliskan sebagai beirkut: > B <- aperm(A, c(2,1))
adalah transpos A dan dapat juga ditulis > B <- t(A)
IV.4.6 Fasilitas matriks Matriks merupakan array dengan dua subscript (baris dan kolom). Dalam bagian ini akan dijelaskan fasilitas matriks yakni operasi dan operator yang penting dalam matriks seperti perkalian matriks, persamaan linier, inverse matriks, nilai eigen dan vektor eigen, determinan dan dekomposisi nilai tunggal, least squares fitting and the dekomposisi QR. Perkalian matrik Jika A dan B adalah matrik, maka > A * B
matrik dengan perkalian elemen (elemen product) dan dinyatakan sebagai: > A %*% B
matrik dengan perkalian matriks (matrix product). Jika x adalah vektor, maka > x %*% A %*% x
adalah bentuk kuadrat. Fungsi crossprod() membentuk “crossproducts”, yang berarti crossprod(x, y) adalah sama dengan t(x)%*% y. Dalam hal ini akan lebih efisien dalam penulisan. Fungsi diag() mempunyai arti yang tergantung pada argumennya. Untuk vektor v, maka diag(v), berarti s diagonal matrik v. Untuk matrik M, diag(M), berarti matrikx yang merupakan diagonal utama dari matrik M. Konvensi pengertian tersebut serupa juga dalam software Matlab. 33
Persamaan linier dan inverse matrik R mempunyai fasilitas untuk mencari pemecahan persamaan linier matriks dan invers matrik. Diberikan matrik A dan b , maka persamaan Ax = b dituliskan, > b <- A %*% x
dengan vektor x adalah solusi sistem persamaan linier (spl). Solusi dari persamaan tersebut, dalam R ditulis: > solve(A,b)
Dalam aljabar linier, secara formal x = A-1 b dimana A-1 menyatakan inverse A, yang dapat dihitung dengan solve(A) tetapi jarang digunakan. Secara nukerik, keduanya tidak efisien dan berpotensi tidak stabil untuk menghitung > x <- solve(A) %*% b daripada solve(A,b).
Nilai eigen dan vektor eigen Dalam R, fungsi eigen(Sm) digunakan untuk menghitung nilai eigen dan vektor eigen suatu matrik simetris Sm. Hasil dari fungsi ini adalah daftar/list dua komponen dengan nama values (nilai eigen) dan vectors (vektor eigen). Penulisan dari vektor eigen adalah sebagai berikut: > ev <- eigen(Sm)
dimana menunjukkan daftar objek ev. Maka ev$val adalah vektor dari nilai eigen matrik simeteris Sm dan ev$vec adalah matrik yang berkoresponden vektor eigen Jika kita hanya akan mencari nilai eigen, maka dapat tuliskan perintah sebagai berikut: > evals <- eigen(Sm)$values
objek evals menunjukkan vektor dari nilai eigen dan komponen kedua (eigen vector) diabaikan. Jika dituliskan suatu perintah > eigen(Sm)
Maka akan mencetak kedua komponen, values dan vectors.
34
Saran: Untuk matrik yang berukuran besar, lebih baik hindari perhitungan vektor eigen. Determinan dan dekomposisi nilai tunggal Jika M adalah matriks kuadrat, maka fungsi > absdetM <- prod(svd(M)$d)
menyatakan perhitung nilai mutlak (absolute) determinan M. Untuk menghitung dekomposisi nilai tunggal, dapat menggunakan fungsi svd(M), dimana M adalah matrik sembarang, u adalah kolom matrik orthogonal dan d matrik diagonal yang semuanyabernilai positif. Fungsi lsfit() akan mengahsilkan prosedur least squares. Penulisannya adalah > ans <- lsfit(X, y)
Berikut merupakan contoh untuk menghitung dekomposisi QR, dengan menggunakan fungsi qr() > > > >
Xplus <- qr(X) b <- qr.coef(Xplus, y) fit <- qr.fitted(Xplus, y) res <- qr.resid(Xplus, y)
akan menghitung proyeksi orthogonal y pada range X, fit menunjukkan proyeksi pada orthogonal komplemen dan b sebagai vektor koefisien untuk proyeksi. Dalam hal ini, tidak diasumsikan bahwa X mempunyai rank kolom yang lengkap. Masalah redudansi akan ditemukan dan dihilangkan pada saat terdeteksi. IV.4.7 Pembentukan matrik partisi (forming partitioned matrices), cbind() dan rbind() Fungsi bind() dalam cbind() dan rbind() mempunyai arti mengikat/menyatukan. Lengkapnya cbind() berarti membentuk matrik dengan menyatukan/mengikat matrik-matrik secara baris (horizontal) atau/terhadap kolom (vertikal) dan rbind() menyatukan/mengikat matrik-matrik secara kolom atau/terhadap baris. Bentuk penulisannya adalah sebagai berikut: > X <- cbind(arg_1, arg_2, arg_3, ...)
dimana argumen-argumennya dalam bentuk vektor, atau matrik yang kolomnya berukuran sama. Sama halnya dalam penulisan rbind(), argument-argumennya dalam bentuk vektor, atau matrik yang barisnya berukuran sama.
35
Misal X1 dan X2 mempunyai baris dengan jumlah yang sama. Untuk mengkombinasikannya terhadapa kolom ke dalam matrik x, maka dituliskan > X <- cbind(1, X1, X2)
Hasil cbind() dan rbind() adalah matrik. Oleh karena itu cbind() dan rbind()adalah cara yang paling mudah untuk memperlakukan vektor x sebagai matriks baris atau matrik kolom. IV.4.8 Tabel frekuensi dari suatu faktor Perlu diingat kembali, karena faktor mendefinisikan suatu partisi ke dalam bentuk kelompok (grup), maka secara similar faktor juga mendefinisikan klasifikasi silang dua arah, dan seterusnya. Fungsi table() digunakan untuk menghitung tabel frekuensi dari faktor dengan panjang yang sama. Jika terdapat k faktor argument, akan menghasilkan frekuensi berbentuk array yang berukuran k (k –arah). Sebagai contoh, anggap, dengan menggunakan contoh pada data mengenai provinsi di pulau jawa, faktor provf akan mengatur menjadi kode-kode untuk setiap provinsi. Penulisan pernyataan ini adalah: > provfr <- table(provf)
memebentuk provfr sebagai table frekuensi setiap provinsi (prov) dalam sample dengan output seperti berikut: btn 3
diy 2
dki 4
jabar jateng 3 3
jatim 2
Frekuensi akan diurutkan dan diberi label dengan atribut level suatu faktor. Penulisannya sebagai berikut: > provfr <- tapply(provf, provf, length)
Anggap, incomef adalah faktor yang membentuk “bagian/ kelas dari pendapatan (income)” untuk setiap entri dalam data, sebagai contoh kita dapat menggunakan fungsi cut() > factor(cut(incomes, breaks = 35+10*(0:7))) -> incomef
Dan untuk membentuk table frekuensi dua arah, kita tuliskan: > table(incomef,provf) provf incomef btn diy dki jabar jateng jatim (45,55] 1 0 0 0 0 0 (55,65] 0 0 3 2 0 0 (65,75] 1 0 0 1 1 0 (75,85] 1 0 1 0 0 1 (85,95] 0 1 0 0 1 1 (95,105] 0 1 0 0 1 0
36
IV.5. List dan Frame Data List (daftar) dalam R adalah objek yang terdiri dari koleksi terurut suatu objek yang disebut sebagai komponen. Suatu komponen dalam list tidak harus berjenis atau mode yang sama. Sebagai contoh, suatu list dapat terdiri dari vektor numerik, nilai logika, matriks, vektor komplek, array karakter, fungsi, dan lain lain. Penulisan berikut adalah contoh membuat suatu list: > Lst <- list(name="Fred", wife="Mary", no.children=3, child.ages = c(4,7,9)) > Lst $name [1] "Fred" $wife [1] "Mary" $no.children [1] 3 $child.ages [1] 4 7 9
List (daftar) baru dapat dibentuk dari objek yang sudah ada dengan menggunakan fungsi list(). Cara penulisannya adalah sebagai berikut: > Lst <- list(name_1=object_1, ...,name_m=object_m)
Akan membentuk list Lst dengan m komponen dan menggunakan object_1, ..., object_m serta memberikan nama masing-masing dengan argument names. Jika nama dihilangkan , komponennya hanya berupa bilangan. Suat list, dapat diperluas dengan menambahkan komponen-komponen tambahan. Sebagai contoh > Lst[5] <- list(matrix=Mat); Lst[5]
Frame Data (data frame) Frame Data adalah list dengan kelas “data.frame”. Sebagai catatan, ada emapat hal pembatasan suatu list diubah menjadi data frame, yakni: − Komponennya harus berupa vektor (numeric, karakter atau logika), faktor, matriks numeric, list, atau data frame lainnya. − Matriks, list, dan data frame menyediakan banyak variable untuk data frame sebanyak kolom, elemen atau variable yang dimiliki/didefinisikan sebelumnya.
37
− Struktur vektor yang ditampilkan dalam bentuk variable suatu data frame harus memiliki panjang yang sama, struktur matriknya harus mempunyai ukuran baris yang sama. Dalam praktiknya, data frame sering digunakan dalam bentuk matriks. Membuat Data Frame Fungsi yang digunakan untuk membuat data frame adalah data.frame. Seperti contoh berikut: > akuntan <- data.frame(home=provf, loot=incomes, shot=incomef)
akan membentuk objek akuntan sebagai suatu data frame. Fungsi attach( ) dan detach( ) Fungsi attach() digunakan untuk memepermudah penulisan dalam list dan data frame, seperti penggunaan notasi $ pada penulisan akuntan$provf . Misal, anggap lentils terdiri tiga variable lentils$u, lentils$v, lentils$w. Maka penulisan > attach(lentils)
akan menempatkan data frame kedalam jalur pencarian pada posisi 2, dan menyatakan bahwa tidak ada variable u, v atau w pada posisi 1. u, v dan w adalah variable dari frame dalam bentuk awal yang sudah ditentukan sebelumnya. Dalam hal ini, penulisan > u <- v+w
tidak menggantikan komponen u dari data frame, namun hanya menutupinya dengan variable u lainnya dalam direktori kerja (working directory) pada posisi 1 pada jalur pencarian. Sedangkan untuk membuat perubahan atau pergantian suatu data frame yang permanent, cara yang sederhana yang dapat dilakukan dengan mengurutkan ulang (resort) pada notasi $: > lentils$u <- v+w
Namun bagaimanapun, nilai baru suatu komponen u tidak tampak (visible) sampai data frame di-detach dan di-attach lagi. Untuk men-detach-nya dengan menuliskan fungsi > detach()
38
Sebagai contoh, untuk men-detach data frame lentils, dengan menuliskan > detach(lentils)
Bekerja dengan data frame Berikut adalah cara bekerja dengan data frame dalam direktori kerja yang sama: −
−
−
Kumpulkan secara bersamaan semua variable dari setiap permasalahan yang telah didefinisikan dan terpisah dalam data frame dengan nama informative yang sesuai Ketika mengerjakan/memproses suatu permasalahan, attach data frame yang bersangkutan pada posisi 2, dan gunakan direkori kerja pada level 1 untuk kuantitas operasional dan variable sementara/temporer; Sebelum keluar dari suatu permasalahan, tambahkan sebarang variable yang ingin anda simpan untuk referensi kerja selanjutnya dengan menggunakan assignment $ dan kemudian detach();
Catatan: lebih mudah apabila bekerja dalam direktori yang sama.
IV.6. Membaca Data Suatu File Suatu objek data yang berukuran besar, biasanya dibaca sebagai nilai dari file eksternal (selain dari data R yang sedang kita kerjakan). Fasilitas input data di R, sangat mudah , sebgai contoh fungsi scan() yang dapat langsung kita panggil (fungsi scan(), fungsi yang primitive), sedangkan untuk data yang besar, dengan menggunakan fungsi read.table(). Fungsi read.table() Untuk langsung membaca data frame dari suatu file eksternal yang normalnya mempunyai bentuk khusus: • Baris pertama file terdiri dari nama setiap variabel dalam data frame • Setiap penambahan baris pada suatu file mempunyai label baris dan nilai untuk setiap variable pada baris pertama. Jika suatu file mempunyai item yang lebih sedikit pada baris pertamanya dibanding baris kedua, harus dilakukan suatu perubahan. Maka dalam baris pertama yang lebih sedikit akan dibaca sebagai data frame yang terlihat pada tabel berikut ini:
39
Input file form with names and row labels: 01 02 03 04 05
Price 52.00 54.75 57.50 57.50 59.75
Floor 111.0 128.0 101.0 131.0 93.0
Area 830 710 1000 690 900
Rooms 5 5 5 6 5
Age 6.2 7.5 4.2 8.8 1.9
Cent.heat no no no no yes
Ket: 01,02,03,04,05, ….. adalah label untuk setiap baris dalam data frame Dengan item numerik yang sudah ditetapkan secara default (kecuali label baris) akan dibaca sebagai variabel numerik dan variabel non numerik, seperti pada Cent.heat yang dianggap sebagai factor, dan jika diperlukan, hal tersebut dapat diubah. Fungsi read.table() digunakan untuk membaca data frame secara langsung: > HargaRumah <- read.table("rumah.data")
Kita juga dapat menghilangkan label baris untuk data frame dengan menuliskan > HargaRumah <- read.table("rumah.data",header=TRUE)
header=TRUE digunakan untuk mengatur tabel data frame dalam bentuk default, sehingga label baris tidak akaan tampak, seperti dalam tabel berikut:
Input file form with names and row labels: Price Floor Area Rooms Age 52.00 111.0 830 5 6.2 54.75 128.0 710 5 7.5 57.50 101.0 1000 5 4.2 57.50 131.0 690 6 8.8 59.75 93.0 900 5 1.9
Cent.heat no no no no yes
Fungsi scan() Apabila akan membaca beberapa vektor data dengan panjang yang sama secara parallel (anggap ada tiga vektor, yang pertama dalam bentuk karakter dan sisanya dalam bentuk numeric, dan filenya adalah input.dat), maka pertama dapat menggunakan fungsi scan() untuk membaca ketiga vektor dalam bentuk list, dengan menuliskan: > inp <- scan("input.dat", list("",0,0))
Pada fungsi scan tersebut, argumen kedua adalah struktur list dummy, yang menetapkan mode ketiga vektor dapat dibaca. Hasilnya adalah objek inp yang 40
merupakan list yang komponennya adalah ketiga vektor tersebut. Untuk memisahkan item data menjadii tiga vektor terpisah, kita tuliskan: > label <- inp[[1]]; x <- inp[[2]]; y <- inp[[3]]
Kita juga dapat memberikan nama komponen pada daftar dummy, (dalam kasus ini) digunakan untuk mengakses vektor yang ada di dalamnya. Sebagai contoh: > inp <- scan("input.dat", list(id="", x=0, y=0))
Jika anda ingin mengakses variabel secara terpisah, hal itu dapat dilakukan dengan re-assign variabel pada data frame, kita tuliskan: > label <- inp$id; x <- inp$x; y <- inp$y
Jika argument kedua merupakan nilai tunggal atau tidak ada dalam list, maka semua komponen dalam vektor harus mempunyai mode yang sama sebagai nilai dummy. > X <- matrix(scan("light.dat", 0), ncol=5, byrow=TRUE)
Mengakses dan menggunakan data yang built-in di R. Ketika anda meng-instal R, maka anda mempunyai sekitar 100 kumpulan data sebagai contoh atau latihan ( dalam paket dataset) . Untuk melihat kumpulan data tersebut, tuliskan: > data()
akan tampak Gambar 4.2 berikut:
41
Gambar 4.2: Dataset default dalam R untuk melihat kumpulan data lengkap, maximize-kan window menjadi gambar berikut:
42
Gambar 4.3: Daftar dataset dalam R Untuk menggunakan salah satu data built-in anda dapat menggunakan fungsi data(). Sebagai contoh, untuk menggunakan data AirPassengers, tuliskan: > data(AirPassengers)
dan untuk melihat item datanya, tuliskan > list(AirPassengers) [[1]] Jan Feb Mar Apr 1949 112 118 132 129 1950 115 126 141 135 1951 145 150 178 163 1952 171 180 193 181 1953 196 196 236 235 1954 204 188 235 227 1955 242 233 267 269 1956 284 277 317 313 1957 315 301 356 348 1958 340 318 362 348 1959 360 342 406 396 1960 417 391 419 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
43
Loading data dari paket R lainnya Selain dari dataset yang built-in, kita dapat menggunakan data dari paket R lainnya (dapt di download di website resmi R). Sebagai contoh: > data(package="rpart") > data(Puromycin, package="datasets")
baris pertama akan memanggil (kumpulan) data dari paket rpart, pada baris kedua akan memanggil data Puromycin dari paket datasets. Menyunting/edit data Seperti software pengolahan & analisis data lainnya, R menyediakan fasilitas editor data mirip tampilan spreadsheet dengan menggunakan fungsi edit() yang penulisannya sebagai berikut: > xnew <- edit(xold)
akan mengedit data sebelumnya xold menjadi data (objek) baru xnew. Sebagai contoh, dengan menggunakan data built-in pada dataset , yakni AirPassenger , penulisannya: > data(AirPassengers) > xnew<-edit(AirPassengers)
menampilkan editor berikut:
Gambar 4.4: Editor data AirPassenger Ket: Pemberian nama objek data yang diedit adalah bebas (bergantung kebutuhan dan kemudahan pengguna).
44
Untuk pengeditan data asli, dapat digunakan fungsi fix(). Misalkan: > xnew <- fix(xold)
Ket: fungsi fix() ekivalen dengan fungsi edit() (pen.) Sebagai contoh, untuk mengganti data AirPassenger , dapat dilakukan dengan cara sebagai berikut: > xnew <- fix(AirPassengers)
Sedangkan untuk melakukan pemasukan (input) data dengan menggunakan interface spreadsheet (seperti MS Excel), penulisannya sebagai berikut: > xnew <- edit(data.frame())
Sebagai contoh, akan digunakan data faithful untuk mengedit dengan model grid, dengan penulisan sebagai berikut: > attach(faithful) > xnew <-fix(faithful)
Maka akan muncul spreadsheet sbb:
Gambar 4.5: Spredsheet editor data
45
Pengeditan data dapat dilakukan dengan penulisan statement R seperti di atas, atau dengan menggunakan menu window: Edit -> Data editor …-> Masukan nama data (misal data faithful) -> OK untuk melanjutkan edit data. Tahapan tersebut ditunjukkan pada gambar berikut:
Gambar 4.5: Menu Data editor pada menu utama
Soal Latihan Bab IV
1.
Tuliskan perintah dalam R yang menujukkan formula x2 + xy – 2/x .
2. Untuk menghasilkan barisan terurut meningkat keatas (ascending) mulai dari 1 sampai 100 dengan selisih 0,25, maka cara penulisan dalam R adalah?
3.
Untuk membuat vektor
dengan semua elemennya identik, misal
angka 1
sebanyak 10 kali ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) maka fungsi dari R yang digunakan adalah ?
4. Untuk membuat matrik kuadrat berukuran 2x2, dengan semua elemennya adalah 0, maka perintah R yang digunakan adalah ?
5. Jika A adalah sebuah matrik, dengan berukuran 2x3 dimana elemen secara terurut mulai array [1,1] = 1 , [2,1] = 2, …, [2,3] = 6. Maka perintah R yang digunakan untuk menuliskannya adalah ?
46
6. Jika K dan L adalah matrik kuadrat 2x2 dengan semua elemennya masing-masing adalah 1, dan 2. Untuk menggabungkan menjadi matrik berukuran 4x2 (ukuran 4 baris, 2 kolom) seperti matrik di bawah ini, diperlukan perintah R?
7.
Dengan dua matrik yang sama pada soal no. 6, tuliskan perintah R yang
menggabungkan keduanya menjadi matrik berukuran 2x4 .
8. Untuk matrik yang dihasilkan dari perhitungan soal no. 6 (misal matrik X) dan soal no. 7 (misal matrik Y), maka perintah R yang digunakan untuk mengalikan matrik X dan Y adalah ?
9. Lakukan perintah soal no. 8, namun untuk perkalian matrik Y dan X, lihat apakah ada perbedaan antara cara perkalian kedua matrik tersebut pada soal no. 8 dan soal no.9 ?
10. Misalkan, buka data sets yang terintegrasi pada R anda, kemudian edit lah data CO2 dan kemudian ganti menjadi objek dengan nama baru yakni karbondioksida, tuliskan perintah R yang digunakan!
47
BAB
V R untuk Pengolahan & Analisis Statistik
V.1. Statistika deskriptif V.1.1. Rerata (Mean) Rerata merupakan deskripsi statistika yang menggambarkan tentang nilai rata-rata dari suatu sample. Perhitungan rerata secara matematis adalah sebagai berikut: n
mean = 1 / n * ∑ xi i
Dalam R terdapat fungsi untuk menghitung nilai rerata sampel. Fungsi yang digunakan adalah mean(x) ataupun dengan menggunakan fungsi summary(x). Sebagai contoh, digunakan data dari datapackage yang sudah tersedia di R, pilih salah satu data (misalkan Nile). Kemudian hitung nilai rerata sampel, dengan menuliskan > data() > data(Nile) > Nile Time Series: Start = 1871 End = 1970 Frequency = 1 [1] 1120 1160 [14] 994 1020 [28] 1030 1100 [41] 969 831 [54] 864 862 [67] 897 822 [80] 848 890 [94] 906 901
963 960 774 726 698 1010 744 1170
1210 1180 840 456 845 771 749 912
1160 799 874 824 744 676 838 746
1160 958 694 702 796 649 1050 919
813 1140 940 1120 1040 846 918 718
1230 1100 833 1100 759 812 986 714
1370 1210 701 832 781 742 797 740
1140 1150 916 764 865 801 923
995 1250 692 821 845 1040 975
935 1260 1020 768 944 860 815
1110 1220 1050 845 984 874 1020
47
> mean(Nile) [1] 919.35 > summary(Nile) Min. 1st Qu. 456.0 798.5
Median 893.5
Mean 919.4
3rd Qu. 1033.0
Max. 1370.0
Hasil tersebut di atas adalah menunjukkan tentang data Nile yang terdiri dari 100 data dengan nilai rerata 919.35. Selain rerata ada pula nilai statistik lainnya, yaitu minimum, kuartil pertama, nilai tengah (median), kuartil ke tiga dan maksimum. Nilai-nilai tersebut ditampilkan dengan menjalankan fungsi summary(). V.1.2. Nilai Tengah (median)
Seperti halnya dengan rerata, R juga menyediakan fungsi untuk mencari nilai tengah (median) sampel dengan menuliskan fungsi median(). Sebagai contoh, dapat digunakan data seperti mencari nilai rerata sebelumnya untuk menghitung nilai tengah (median): > median(Nile) [1] 893.5
V.1.3. Nilai minimum dan maksimum
R menyediakan fasilitas untuk mencari nilai minimum dan maksimum suatu data, yaitu dengan digunakan perintah min() dan max() > min(x) > max(x)
# untuk nilai minimum, dan # untuk nilai maksimum
V. 2. Grafik
R dilengkapi dengan fasilitas untuk visualisasi statistik dalam bentuk grafik, baik statistik, kontur, map, dll. Sistem grafik di R terdiri dari dua sistem: sistem (dasar/default) yang terdapat dalam paket graphics dan sistem trellis yang terdapat dalam paket lattice. Grafik di R dapat diatur sesuai keperluan. Untuk melihat lebih detil mengenai fitur grafik dalam R, pilih menu Help di menu R kemudian pilih Manual (dalam format pdf) atau HTML help. Untuk mendapatkan gambaran langsung tentang grafik dalam R, dapat dilihat dalam fungsi demo(), dengan menuliskan > > > > >
demo() demo(graphics) demo(image) demo(persp) demo(lattice)
# # # # #
untuk melihat jenis-jenis demo atau atau atau sebelumnya diperlukan load package dan pilih lattice pada menu di windows R anda; atau > demo(package = .packages(all.available = TRUE)) # untuk melihat semua jenis demo yang tersedia
Ket: untuk R versi 2.1.1, penulisan Return dituliskan setelah penulisan fungsi demo()
48
Grafik Dasar (Base)
Pengantar tentang prosedur grafik dapat dilihat di dokumen “Introduction to R” pada menu Help ->Manual (dalam format pdf). Berikut akan disajikan contoh pembuatan plot secara bertahap diawali dengan model standar hingga pengaturan sesuai dengan yang diinginkan (customize). Contoh berikut adalah pembuatan scatterplot untuk petal.length yang dibandingkan dengan petal.width dari dataset iris. Default scatterplot dari dua variabel dihasilkan oleh metod plot.default, yang secara otomatis digunakan oleh perintah plot generik dimana argumennya merupakan dua vektor dengan panjang yang sama seperti berikut ini: > data(iris) > str(iris) ‘data.frame’: 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 … $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 … $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 … $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 … $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1
Data tersebut di atas menyatakan bahwa data iris terdiri dari 5 variabel dimana setiap variable terdiri dari 150 data observasi. Lima variable tersebut adalah: Sepal.Length, Sepal.Width, Petal.Length, Petal.Width dan Species. > attach(iris) > plot(Petal.Length, Petal.Width)
Hasil dari perintah tersebut terlihat pada Grafik 5.1 (merupakan bentuk grafik secara default). Dalam grafik tersebut, sumbu x dan sumbu y berasal dari argumen pertama (Petal.Length) dan argumen kedua (Petal.Width), dari pernyataan plot(argument_1, argument_2).
49
Gambar 5.1: Scatter plot data variabel Petal Grafik 5.1 di atas dapat dilengkapi untuk menunjukan dependensi argumen dimana sumbu y sebagai variabel dependen. Hal tersebut dilakukan dengan menuliskan perintah seperti berikut, dimana variable terikat terletak sebelah kiri: > plot(Petal.Width ~ Petal.Length,)
Pada Gambar 5.1 bentuk grafik sangat standart, sehingga perlu dilengkapi dengan beberapa keterangan tambahan untuk memperjelas dan mempermudah dalam melakukan interpretasi grafik. Hal ini dapat dilakukan dengan menambahkan fitur warna atau simbol dalam tampilan grafik. Untuk hal tersebut, R mempunyai fasilitas pewarnaan (yaitu dengan argumen col), simbol (dengan argumen pch), ukuran (dengan argumen cex), label/nama sumbu kordinat (dengan argumen xlab dan ylab), judul grafik (dengan argumen main). Beberapa jenis warna yang disediakan dalam R dapat diketahui dengan menggunakan perintah colours(), dimana akan ditampilan daftar warna-warna tersebut. > colours() [1] "white" [4] "antiquewhite1" … [655] "yellow3"
"aliceblue" "antiquewhite2
"antiquewhite" " antiquewhite3"
"yellow4"
"yellowgreen"
sedangkan fungsi palette() dapat digunakan untuk menampilkan daftar warna dalam bilangan numeric: > palette() [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" [8] "gray"
50
Selain warna, simbol juga dapat digunakan untuk menampilkan tanda plot. Spesifikasi simbol dapat dilakukan dengan menentukan karakter yang akan digunakan (misalkan asterik ”*”) atau kode integer dari simbol tersebut. Gambar 5.2 menunjukkan simbol dan kodenya. Simbol dengan kode 21-26 memiliki fill (warna latar) yang dispesifikasikan pada argumen bg, spesifikasi warna utama dengan argumen col menspesifikasikan garis border.
Gambar 5.2: Simbol dan kode dalam R Berikut ini merupakan contoh yang menampilkan grafik plot yang dilengkapi dengan pewarnaan, modifikasi ukuran dan pemilihan simbol plotting. Penulisannya adalah sebagai berikut: > > > > > > >
plot(1, 1, xlim=c(1, 7.5), ylim=c(0,5), type="n") points(1:7, rep(4.5, 7), cex=1:7, col=1:7, pch=0:6) text(1:7,rep(3.5, 7), labels=paste(0:6), cex=1:7, col=1:7) points(1:7,rep(2,7), pch=(0:6)+7) # Plot simbol 7 hingga 13 text((1:7)+0.25, rep(2,7), paste((0:6)+7)) # Label dengan bilangan simbol points(1:7,rep(1,7), pch=(0:6)+14) # Plot symbols 14 hingga 20 text((1:7)+0.25, rep(1,7), paste((0:6)+14)) # Labels dengan bilangan simbol
dan akan menghasilkan Gambar 5.3 sebagai berikut:
51
Gambar 5.3: Simbol, Kode dan Warna dalam R Setelah kita mengetahui bentuk dan kode simbol, maka berikut ini akan dilakukan penggunaan simbol, warna dan modifkasi lain untuk menggambarkan plot/grafik dari contoh sebelumnya dengan menuliskan perintah seperti berikut: > + + + +
plot(Petal.Length, Petal.Width, pch=20, cex=1.2, xlab=" Petal length (cm)", ylab="Petal width (cm)", main="Data Anderson Iris", col=c("slateblue","firebrick",darkolivegreen") [as.numeric(Species)])
Data menunjukkan dengan jelas bahwa ukuran spesies berbeda (Sentosa paling kecil, Versicolor menengah, Virginica terbesar) tetapi rasio petal length dan weight sama untuk ketiga ukuran tersebut.
Gambar 5.4: Grafik scatterplot data Iris
52
V.2.1. Histogram
Selain plot, bentuk representasi grafis lainnya yang paling mudah digunakan untuk menggambarkan sebaran data adalah histogram. R menyediakan fasilitas fungsi histogram yang digunakan untuk mengetahui sebaran sampel suatu data. Sebagai catatan: histogram ataupun boxplot, digunakan untuk satu variable. Sebelum kita mencoba untuk menggunakan fasilitas histogram, maka perlu sedikit penjelasan yang berkaitan dengan histogram, yaitu: • histogram digunakan untuk mengestimasi fungsi distribusi probabilitas densitas (probability density function);
f ( x) = lim Pr ob( x − δ < X ≤ x) / δ δ →0
• • • • •
histogram ditentukan pula oleh bin/lebar batang; sumbu- y dalam histogram dapat berupa frekuensi kemunculan atau proporsi; tidak ada estimasi statistik yang dapat dibaca langsung dari histogram, namun dengan histogram kita dapat menduga kemiringan, sifat/behavior pada tail atau ujung kurva, dan outlier data; histogram dapat dibandingkan sebagai suatu distribusi analitik standar.
Selain histogram, R juga menyediakan plot yang fungsinya menyerupai histogram yakni stem-and-leaf plot dengan penulisan: > stem(variabel)
Sebagai contoh, gunakan variabel eruptions dari tabel data faithful, dengan menuliskan: > attach(faithful) > summary(eruptions) Min. 1.600
1st Qu. Median 2.163 4.000
Mean 3.488
3rd Qu. 4.454
Max. 5.100
> fivenum(eruptions) [1] 1.6000 2.1585 4.0000 4.4585 5.1000 > stem(eruptions) 16 18 20 22 24 26 28 30 32 34 36 38
| | | | | | | | | | | |
The decimal point is 1 digit(s) to the left of the | 070355555588 000022233333335577777777888822335777888 00002223378800035778 0002335578023578 00228 23 080 7 2337 250077 0000823577 2333335582225577
53
40 42 44 46 48 50
| | | | | |
0000003357788888002233555577778 03335555778800233333555577778 02222335557780000000023333357778888 0000233357700000023578 00000022335800333 0370
Kita juga dapat melihat sebaran data dalam plot histogram yaitu dengan menggunakan fungsi hist() > hist(eruptions)
Gambar 5.5: Grafik histogram data eruptions Pada Gambar 5.5 di atas, fungsi hist() menggunakan jarak antar batang (disebut bin) cukup besar. Untuk membuat bin lebih kecil, diperlukan tambahan atribut dengan menuliskan: > hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE)
Pada perintah di atas, argumen seq(1.6, 5.2, 0.2) adalah histogram menggunakan range dari 1.6 hingga 5.2 dengan lebar bin 0.2. Sehingga tampilan grafik histogram adalah sebagai berikut:
54
Gambar 5.6: Grafik histogram data eruption berdasarkan lebar bin 0.2 Gambar 5.6 di atas menunjukkan lebar batang histogram yang lebih kecil dibanding Gambar 5.5. Apabila ingin ditambahkan garis pada data densitas, maka dapat menggunakan fungsi lines()seperti berikut: > lines(density(eruptions, bw = 0.1))
Keterangan: bw adalah bandwidth (lebar pita), dengan nilainya berdasarkan trial and error.
Gambar 5.7: Grafik histogram data eruptions dengan bw = 0.1 Untuk menampilkan point data aktual digunakan fungsi rug() sbb: > rug(eruptions)
55
Gambar 5.8: Grafik histogram data eruption dengan data aktual Selain histogram, R dapat memplot fungsi distribusi kumulatif empiris dengan menggunakan fungsi ecdf(): > plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE)
Gambar 5.9: Plot 1 ecdf data eruption Distribusi ecdf di atas masih jauh dari standar distribusi yang ada. Untuk itu dapat dicobakan dengan mencocokkan distribusi normal dan “menutupi” fungsi distribusi kumulatif (ecdf) sebelumnya. Penulisannya adalah sebagai berikut: > long <- eruptions[eruptions > 3] > plot(ecdf(long), do.points=FALSE, verticals=TRUE)
56
Gambar 5.10: Plot 2 ecdf data eruption > x <- seq(3, 5.4, 0.01) > lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3)
Gambar 5.11: Plot 3 ecdf data eruption V.2.2. Q-Q (Quantile – Quantile)
Selain histogram sebagai alat untuk memplot sebaran data suatu variabel adalah Quantile – Quantile (Q-Q) plot. Q-Q plot dapat digunakan untuk memplot variable secara lebih teliti berdasarkan nilai quantile data. Q-Q plot adalah suatu scatter plot yang membandingkan distribusi empiris dengan fitted distribution dalam kaitannya dengan nilai dimensi suatu variabel (misalkan: nilai quantile empiris). Q-Q plot dapat memplot dengan baik jika dataset diperoleh dari populasi yang sudah diketahui. 57
Q-Q plot dalam R dibagi menjadi dua, yaitu: • qqnorm(variabel); untuk menguji goodness of fit dari distribusi Gaussian. qqnnorm() disebut juga sebagai plot probabilitas normal. •
qqplot(variabel); untuk sebarang jenis distribusi
Melanjutkan contoh sebelumnya, untuk data eruptions, penggunaan Q-Q plot dituliskan sbb: > par(pty="s") # mengatur pembuatan daerah gambar berbentuk kotak > qqnorm(long)
Gambar 5.12: Plot1 Q-Q Normal > qqline(long)
Gambar 5.13: Plot 2 Q-Q Normal
58
V.2.3. Boxplot
Selain dua alat untuk menggambarkan grafik untuk satu variable yang sudah dijelaskan sebelumnya, terdapat fasilitas boxplot yang digunakan untuk melihat sebaran data. Berikut adalah penjelasan tentang fitur dasar boxplot: • Berguna untuk membanding banyak kelompok/grup. • Dasarnya menggunakan 3 jenis summary: 3 quartil. • Mudah dalam menampilkan nilai rerata (mean). • Dapat diperluas untuk menampilkan persentil lainnya, terutama pada ujung(tails) suatu distribusi. R menyediakan fitur untuk menampilkan boxplot, dengan menuliskan fungsi boxplot(variabel). Untuk menjelaskan penggunaan fungsi boxplot(), berikut adalah contoh menggambar grafik dengan menggunakan data faithful seperti pada contoh sebelumnya. > boxplot(eruptions)
Perintah di atas akan mendapatkan gambar boxplot dari variabel eruption seperti berikut:
Gambar 5.14: Boxplot data eruption Apabila ingin menambahkan judul gambar, maka penulisannya adalah: > boxplot(eruptions, main=”Plot dengan Boxplot”)
59
Gambar 5.15: Boxplot data eruption dengan nama titel R menyediakan beragam bentuk penyajian grafik plot. Berikut adalah daftar plot grafik dasar yang ada dalam R (beberapa ada yang termasuk dalam instalasi awal dan adapula yang masuk dalam paket lain yang harus didownload dari CRAN): Tabel 5.1: Jenis plot dalam R Jenis Fungsi Plot Keterangan assocplot Plot Asosiasi (Association) barplot Plot Batang (Bar) boxplot Plot Kotak (Box) contour Plot Contour coplot Plot Conditioning dotchart Plot Cleveland Dot filled.contour Plot Level (Contour) fourfoldplot Plot Fourfold hist Histogam image Menampilkan suatu Warna Image matplot Plot Kolom suatu Matriks mosaicplot Plot Mosaic pairs Matriks Scatterplot persp Plot Perspektif plot Plot X-Y Umum stars Plot Star (Spider/Radar) stem Plot Stem-and-Leaf stripchart Plot Scatter 1-D sunflowerplot Plot Scatter Sunflower
60
Gambar 5.16 terdiri dari beberapa contoh tampilan grafik plot, yaitu boxplot, a conditioning plot, pairwise scatterplot, dan star plot, yang kesemuanya mengaplikasikan dataset Anderson iris. Perintah di R untuk menggambarkan grafik-grafik tersebut adalah : > + + + > + > + > +
boxplot(Petal.Length ~ Species, horizontal=T, col="lightblue", boxwex=.5, xlab="Petal length (cm)", ylab="Species", main="BoxPlot Group") coplot(Petal.Width ~ Petal.Length | Species, col=as.numeric(Species), pch=as.numeric(Species)) pairs(iris[,1:4], col=as.numeric(Species), main="Pairwise scatterplot") stars(iris[,1:4], key.loc=c(2,35), mar=c(2, 2, 10, 2), main="Star plot of individuals", frame=T)
Conditioning plot
boxplot
Pairwise scatterplot
Star plot
Gambar 5.16: Contoh grafik plot
61
V.2.4 Grafik Trellis
Sistem grafik trellis dalam R tersedia dalam paket lattice. Model grafik ini khususnya digunakan untuk visualisasi multivariate apabila relasi antara variable berubah bersama beberapa group factor yang disebut sebagai kondisi (conditioning) suatu grafik terhadap factor. Metoda ini menggunakan formula yang similar dengan formula statistic untuk menspesifikasikan variable yang akan diplot serta hubungannya dalam plot. Untuk memudahkan dalam penggunaannya, jenis plot dibagi berdasarkan banyaknya variabel: satu variable (univariate), dua variable (bivariate), tiga variable (trivariate) dan banyak variable (hypervariate). Satu varibel/Univariate
Sebagai salah contoh univariate adalah membuat grafik plot densitas pada keseluruhan data. Pada contoh ini digunakan dataset iris seperti contoh sebelumnya. Berikut adalah metode yang digunakan untuk menampilkan plot densitas: > densityplot(~ Petal.Length, data=iris,main=”Seluruh Spesies”)
Operator ~ tidak memiliki operan di sebelah kiri, karena tidak ada variable terikat (dependent) dalam plot; ini menunjukkan sifat univariate. Petal.Length adalah variable bebas (independent), dan diperoleh plotnya. Gambar 5.17(a) sebelah kiri menunjukkan plot densitas univariate. Pengkondisian dilakukan dengan menambahkan operator “|”, yang dapat dibaca sebagai “pengkondisian pada” (conditioned on) satu (beberapa) variable pada sisi kanan operator, seperti pada berikut ini: > densityplot(~ Petal.Length | Species, data=iris)
Perintah tersebut akan menampilkan satu panel per spesies; seperti yang ditunjukkan pada Gambar 5.17(b). Pada gambar tersebut tampak jelas bahwa distribusi multimodal keseluruhan data set berdasarkan perbedaan distribusi untuk setiap spesies.
(a) (b) Gambar 5.17 Plot densitas triller (a) tanpa dan (b) dengan pengkondisian faktor 62
Jenis plot untuk satu variable (univariate) adalah seperti pada table 5.2 berikut: Tabel 5.2: Jenis plot untuk satu variable Jenis Keterangan assocplot Plot hubungan (association) barchart Plot batang (bar) bwplot Plot box dan whisker densityplot Plot kepadatan Kernel dotplot Plot dot histogram Histogram qqmath Quantile plot distribusi matematis stripplot Scatterplot 1 dimensi
Dua variable (Bivariate)
Salah satu metode membuat plot dua variable (bivariate) adalah xyplot, dimana sumbu y adalah variable terikat dan sumbu x adalah variable bebas; variable tersebut juga dapat dikondisikan terhadap satu atau lebih kelompok faktor seperti pada perintah berikut. > + > +
xyplot(Petal.Width ~ Petal.Length, data=iris, groups=Species, auto.key=T,main=”Seluruh Spesies”) xyplot(Petal.Width ~ Petal.Length | Species, data=iris, groups=Species,main=”Dipisah berdasarkan spesies”)
Gambar 5.18: Scatter plot triller (a) tanpa dan (b) dengan pengkondisian faktor Gambar 5.18 menunjukkan penggunaan argumen group untuk menspesifikasikan perbedaan cara menampilkan grafik (dalam hal ini warna) untuk setiap spesies, dan argument auto.key untuk mendapatkan kunci sederhana terhadap warna yang digunakan untuk setiap spesies. Motode lain yang ada di R untuk membentuk grafik dengan bivariate adalah pada table 5.3 berikut:
63
Tabel 5.3: Jenis plot untuk dua variable Jenis Keterangan qq Plot untuk membandingkan dua distribusi xyplot Plot scatter Tiga variable(Trivariate)
Plot yang paling banyak digunakan untuk trivariate adalah levelplot dan contourplot untuk melakukan plot 2D dari satu variable respon pada dua variable terikat kontinu (misalkan, elevation vs. dua koordinat), metode wireframe untuk suatu versi grafik 3D, dan metode cloud (awan) untuk scatter plot 3D dari tiga variable. Semua dapat dikondisikan pada suatu factor tertentu. Gambar 5.19 menunjukkan contoh yang dihasilkan dari kode berikut: > + + + > > + + + + > + + > + + + + + > > > > >
pl1 <- cloud(Sepal.Length ~ Petal.Length * Petal.Width, groups=Species, data=iris, pch=20, main="Anderson Iris data, all species", screen=list(z=30, x=-60)) data(volcano) pl2 <- wireframe(volcano, shade = TRUE, aspect = c(61/87, 0.4), light.source = c(10, 0, 10), zoom=1.1, box=F, scales=list(draw=F), xlab="", ylab="", zlab="", main="Wireframe plot, Maunga Whau Volcano, Auckland") pl3 <- levelplot(volcano, col.regions=gray(0:16/16), main="Levelplot, Maunga Whau Volcano, Auckland") pl4 <- contourplot(volcano, at=seq(floor(min(volcano)/10)*10, ceiling(max(volcano)/10)*10, by=10), main="Contourplot, Maunga Whau Volcano, Auckland", sub="contour interval 10 m", region=T, col.regions=terrain.colors(100)) print(pl1, split=c(1,1,2,2), more=T) print(pl2, split=c(2,1,2,2), more=T) print(pl3, split=c(1,2,2,2), more=T) print(pl4, split=c(2,2,2,2), more=F) rm(pl1, pl2, pl3, pl4)
Gambar 5.19 menunjukkan hasil dari perintah di atas. Sebagai catatan, data set volcano merupakan matriks elavasi: > str(volcano) num [1:87, 1:61] 100 101 102 103 104 105 105 106 107 108 ...
Metode levelplot menkonversi ke variable respon (nilai z) dan dua predictor, yaitu baris dan kolom matriks (nilai x dan y). Contoh tersebut menunjukkan metode lattice tingkat tinggi yang melakukan pembentukan grafik sendiri. Hasil dari metode levelplot digambar dengan metode print. Metode plot tiga variable adalah seperti Table 5.4:
64
Gambar 5.19: Grafik plot Trellis trivariate Tabel 5.4: Jenis plot untuk tiga variable Jenis Keterangan levelplot Plot level contourplot Plot contour cloud Plot scatter 3 dimensi wireframe Permukaan 3 dimensi (similar dengan plot persp di R)
Lebih dari tiga variabel/Hypervariate
Selain motode plot untuk satu, dua, tiga variable, R juga menyediakan plot grafik untuk lebih dari tiga variable (hypervariate) seperti pada Table 5.5 berikut: Tabel 5.5: Jenis plot untuk lebih dari tiga variable Jenis Keterangan splom Matriks plot scatter parallel Plot koordinat paralel
V.3. Fungsi Distribusi
Fungsi distribusi merupakan salah satu bahasan penting dalam statistika, terutama dalam analisis data. Fungsi distribusi merupakan salah satu alat pendekatan distribusi suatu data. Fungsi distribusi juga berperan dalam menentukan densitas suatu fungsi
65
data. Dalam bab ini akan dibahas fungsi distribusi dan fungsi yang berkaitan dengannya. V.3.1. Jenis fungsi distribusi dalam R
Software R mempunyai koleksi fungsi distribusi standar yang lengkap, yang tersedia dalam paket program R dan dapat ditambah dengan mendownload dalam bentuk paket dari situs R. Fungsi distribusi di R disediakan untuk memfasilitasi fungsi distribusi kumulatif (Cummulative Distributive Function (CDF)) P(X ≤ x),fungsi probabilitas densitas (Probability Density Function (PDF)), dan fungsi kuantil (diberikan q, x lebih kecil sedemikian hingga P(X ≤ x) > q). Berikut adalah tabel distribusi di R.
Tabel 5.6: Jenis fungsi distribusi dalam R Nama Distribusi Nama fungsi di R Argument tambahan beta Beta shape1, shape2, ncp binom Binomial size, prob cauchy Cauchy location, scale chisq Chi-squared df, ncp exp Exponential rate f F df1, df1, ncp gamma Gamma shape, scale geom Geometric Prob hyper Hypergeometric m, n, k lnorm Log-normal meanlog, sdlog logis Logistic location, scale nbinom Binomial negative size, prob norm Normal mean, sd pois Poisson Lambda t t - Student’s df, ncp unif Uniform min, max weibull Weibull shape, scale wilcox Wilcoxon m, n
V.3.2. Fungsi Probabilitas Densitas (Probability Density Function (PDF))
Fungsi probabilitas densitas merupakan salah satu parameter statistic yang digunakan untuk mengetahui probabilitas terhadap suatu factor yang ada dalam sample. Buku ini akan mengawali pembahasan dengan contoh kasus untuk mempermudah pemahaman tentang fungsi densitas seperti berikut ini: Terdapat 16 mahasiswa dipilih secara acak dari populasi dimana 30% adalah wanita. Berapa probabilitas sebanyak nol, satu, dua, …, enam belas dari mahasiswa tersebut yang dipilih adalah wanita?. Untuk menghitung probabilitas tersebut akan digunakan beberapa langkah dalam R seperti dibawah ini.
66
> round(dbinom(0:16, 16, 0.3), 3)
# dbinom artinya d:densitas dan binom:binomial
[1] 0.003 0.023 0.073 0.146 0.204 0.210 0.165 0.101 0.049 0.019 0.006 0.001 [13] 0.000 0.000 0.000 0.000 0.000
Pertama adalah menghitung nilai probabilitas jumlah wanita yang terpilih dari populasi yang dicari tersebut berdasarkan distribusi binomial dengan menggunakan fungsi dbinom(). Nilai probabilitas dari masing-masing kejadian tersebut adalah: Jml Wanita terpilih 0 1 2 3 4 5 6 7 8 9 10 11 12 - 16
Probabilitas 0.003 0.023 0.073 0.146 0.204 0.210 0.165 0.101 0.049 0.019 0.006 0.001 0.000
Total kumulatif dari masing-masing nilai probabilitas tersebut adalah 1 (hal ini menunjukkan bahwa nilai probabilitas tersebut merupakan pdf). Kemudian untuk menggambarkan scatter plot nilai probabilitas tersebut digunakan perintah plot seperti berikut: > plot(dbinom(0:16, 16, 0.3), type =”h”, xlab=” + ylab=”Probabilitas”)
Banyaknya wanita”,
Perintah tersebut menggambarkan grafik plot (Gambar 5.20) dimana sample berdistribusi binomial dimana menghitung probabilitas sukses 0 hingga 16 (0:16) pada suatu populasi yang terdiri dari 16 mahasiswa dimana terdiri dari 0.3 (30%) mahasiswa wanita. Misalkan terdapat kondisi bahwa hanya 2 dari 16 yang terpilih adalah wanita. Berapa probabilitas dua atau kurang dari jumlah wanita dapat terpilih kembali? Penyelesaian masalah tersebut dapat diselesaikan dengan menggunakan fungsi pbiom() seperti perintah program dibawah, dimana argument pertama = 2 yang menyatakan jumlah wanita terpilih, argument kedua adalah 16 yang menyatakan jumlah keseluruhan, argument ketiga menyatakan probabilitas jumlah wanita. Perintah dalam R adalah sebagai berikut: > pbinom(2, 16, 0.3, lower.tail = T) # pbinom, p: fungsi distribusi atau probabilitas, binom: binomial [1] 0.09935968
67
Gambar 5.20: Plot binomial data mahasiswa (Interpretasi: dalam sample random dari 16 orang populasi dengan 30% adalah wanita, terdapat sekitar 10% bahwa dari sample akan terpilih sebanyak nol, satu atau dua adalah wanita. Maka jika kita lihat, 16 orang sample dengan dua atau kurang wanita, maka kita menduga bahwa terjadi diskriminasi terhadap hal tersebut, maka 10% kesempatan yang kita duga tersebut adalah tanpa dasar yang kuat). Contoh berikut menyatakan bahwa dua random sample yang saling bebas yang berdistribusi normal seharusnya tidak berkorelasi. Kita dapat mensimulasikan hal ini berulangkali untuk menaksi koefisien korelasi dimana probabilitas error Type I (yaitu menolak hipotesis yang menyatakan tidak terdapat suatu korelasi) adalah 10%. Pertama, kita akan menuliskan: > size <- 20 > sample.1 <- rnorm(size) # rnorm; r: deviasi random; norm: distribusi normal > sample.2 <- rnorm(size) > cor.test(sample.1, sample.2) Pearson’s product-moment correlation data: sample.1 and sample.2 t = 0.4394, df = 18, p-value = 0.6656 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0.3557135 0.5217580 sample estimates: cor 0.1030244 > > > >
plot(sample.1, sample.2) abline(h=0, lty=2) abline(v=0, lty=2) title(paste(“r=”, round(cor(sample.1, sample.2), 3)))
68
Gambar 5.21: Plot variabel sample1 dan sample 2 Gambar 5.21 menunjukkan bahwa 2 variabel random sample.1 dan sample.2 adalah saling bebas. Sebagai catatan, karena sifat kerandomannya, hasil yang akan anda peroleh dari hasil percobaan yang dilakukan tentu akan berbeda dengan apa yang disajikan dalam buku ini. Kemudian, untuk perhitungan yang lebih besar lagi, yakni mencari nilai-nilai statistiknya, perlu mendefinisikan fungsi secara tersendiri seperti berikut ini: > cor.2 <- function(size) { + sample.1 <- rnorm(size) + sample.2 <- rnorm(size) + cor(sample.1, sample.2) +} > results <- NULL > length <- 1000 > for (i in 1:length) { + results[i] <- cor.2(20) +} > hist(results, xlab= “r”, main= “Koefisien Korelasi”) > (paste(“5% nilai r lebih negative dari”, round(sort(results)[length/20], 3))) [1] "5% nilai r lebih negative dari -0.386" > (paste(“5% nilai r lebih positif dari”, round(sort(results)[length - length/20], 3))) [1] "5% nilai r lebih positif dari 0.35"
69
Gambar 5.22: Histogram koefisien korelasi Sepertinya, terlihat suatu interval antara -0, 36 …. +0,37 yang melingkupi 90% dari koefisien korelasi r sample untuk ukuran sample 20. Sekali lagi hasilnya mungkin sedikit berbeda antara yang anda lakukan dengan yang dikerjakan dalam buku ini. Suatu plot perspektif untuk PDF - distribusi normal bivariat: > > > > > + +
range <- seq (-3, 3, by= 0.1) random.1 <- dnorm(range, 0, 1) random.2 <- dnorm(range, 0, 0.7) mesh <- outer(random.1, random.2, function(x, y) x * y) persp(range, range, mesh, phi = 20, theta = 30, expand = 0.8, xlab = “N(0, 1)”, ylab = “N(0, 0.7)”,zlab = “PDF”, main = ”Contoh PDF untuk Distribusi Normal Bivariat”)
Gambar 5.23: Grafik 3D untuk pdf normal bivariat
70
Baris perintah di atas adalah salah satu contoh pembahasan mengenai fungsi probabilitas densitas (probability density function (PDF)) dengan kasus distribusi normal bivariat. V.3.3. Fungsi Kumulatif Densitas Empirik (Empirical Cummulative Density Function (ECDF))
R menyediakan fitur dengan fungsi ecdf()untuk mencari fungsi densitas kumulatif empirik (empirical cummulative density function (ecdf)).. Berikut adalah teori yang berkaitan dengan ecdf: • Fungsi distribusi kumulatif suatu populasi dituliskan dalam bentuk
F ( x) = Pr ob( X ≤ x) •
Daerah di bawah fungsi densitas f(x) dari a ke b dituliskan dalam bentuk
F (b) − F (a) = Pr ob(a < X ≤ b) • • • • • •
Fungsi distribusi kumulatif dicari dengan mengestimasi nilai F(x), dimana proporsi nilai data ≤ x Histogram yang ditampilakan adalah histogram kumulatif Dapat menjadi sempurna jika histogramnya hanya memiliki satu observasi per bin (batang) ECDF bersifat unik dan tidak memerlukan binning Sangat baik untuk menunjukkan perbedaan dalam distribusi keseluruhan di antara dua atau tiga grup yang berlapis/ menumpuk. Dapat membaca langsung nilai quantil nya.
V.4. Regresi & ANOVA (Analysis of Variance)
Dalam sub bab ini akan dijelaskan tentang regresi dan ANOVA, yang merupakan salah satu metode dasar statitistik dalam melakukan pengolahan dan analisis data. Disini akan disajikan teori dan praktek regresi dan anova serta penggunaan R untuk analisis tersebut. Pada tahap awal mungkin akan terasa sedikit rumit, namun diharapkan setelah mencoba beberapa contoh akan menjadi lebih mudah. Analisis regresi digunakan untuk menjelaskan atau memodelkan hubungan antara suatu variable tunggal Y, disebut sebagai variable respon, output atau terikat, dan satu atau lebih variable predictor, input, bebas atau penjelasan (explanatory), X1, …, Xp. Apabila p = 1 maka disebut regresi sederhana, sedangkan apabila p > 1 maka disebut regresi berganda atau regresi multivariate. Jika terdapat lebih dari satu variable terikat Y, maka disebut regresi mulrivariate berganda. Variabel respon harus berbentuk kontinu, sedangkan variabel penjelasan dapat berbentuk kontinu, diskrit ataupun kategori. Sebelum kita masuk ke contoh, maka akan digunakan data pima dari paket library ”faraway” yang sudah tersedia di paket
71
CD. Selain dalam CD, library(faraway) dapat didownload di situs www.stat.lsa.umich.edu/˜faraway. Pertama digunakan library faraway dan memanggil data pima tersebut dengan mengetikkan: > library(faraway) > data(pima) > pima pregnant glucose diastolic triceps insulin bmi diabetes age test 1 6 148 72 35 0 33.6 0.627 50 1 2 1 85 66 29 0 26.6 0.351 31 0 3 8 183 64 0 0 23.3 0.672 32 1 4 1 89 66 23 94 28.1 0.167 21 0 5 0 137 40 35 168 43.1 2.288 33 1 ….
Simpulan dari dataset tersebut dapat kita lihat sebagai berikut: > summary(pima) pregnant Min. : 0.000 1st Qu.: 1.000 Median : 3.000 Mean : 3.845 3rd Qu.: 6.000 Max. :17.000 insulin Min. : 0.0 1st Qu.: 0.0 Median : 30.5 Mean : 79.8 3rd Qu.:127.2 Max. :846.0 test Min. :0.0000 1st Qu.:0.0000 Median :0.0000 Mean :0.3490 3rd Qu.:1.0000 Max. :1.0000
glucose Min. : 0.0 1st Qu.: 99.0 Median :117.0 Mean :120.9 3rd Qu.:140.2 Max. :199.0 bmi Min. : 0.00 1st Qu.:27.30 Median :32.00 Mean :31.99 3rd Qu.:36.60 Max. :67.10
diastolic Min. : 0.0 1st Qu.: 62.0 Median : 72.0 Mean : 69.1 3rd Qu.: 80.0 Max. :122.0 diabetes Min. :0.0780 1st Qu.:0.2437 Median :0.3725 Mean :0.4719 3rd Qu.:0.6262 Max. :2.4200
triceps Min. : 0.00 1st Qu.: 0.00 Median :23.00 Mean :20.54 3rd Qu.:32.00 Max. :99.00 age Min. :21.00 1st Qu.:24.00 Median :29.00 Mean :33.24 3rd Qu.:41.00 Max. :81.00
Simpulan data di atas menunjukkan beberapa hal yang tidak wajar yang mungkin disebabkan ketika memasukkan data, misalkan nilai maksimum pregnant = 17 (ini sangat besar, tetapi juga memungkinkan), tekanan darah (diastolic) = 0. Dengan demikian kita perlu sedikit melakukan pembersihan data tersebut, khususnya yang diasumsikan ketika memasukkannya tidak benar. Melihat ketidak wajaran tersebut kita perlu menset nilai dari dataset yang bernilai 0 dengan NA, hal ini untuk menghindari terjadinya pada kesalahan perhitungan. Nilai NA data tidak tersedia untuk nilai yang diasumsikan salah ketika memasukkan, sehingga tidak termasuk dalam perhitungan. Apabila nilai tersebut tetap 0, maka nilai statistik menjadi tidak wajar, karena tidak sesuai dengan kenyataan. Perintah yang digunakan untuk menset nilai tersebut adalah: > > > > >
pima$diastolic[pima$diastolic == 0] <- NA pima$glucose[pima$glucose == 0] <- NA pima$triceps[pima$triceps == 0] <- NA pima$insulin[pima$insulin == 0] <- NA pima$bmi[pima$bmi == 0] <- NA
72
Variabel test adalah bukan kuantitatif melainkan kategori. Variabel tersebut adalah faktor. Tetapi karena merupakan kode numerik, variabel tersebut diperlakukan seperti halnya kuantitatif. Akan lebih baik apabila variabel tersebut adalah faktor sehingga dapat diperlakukan sesuai fungsinya. Hal seperti itu kadang terlupakan dan akibatnya akan terjadi kesalahan proses perhitungan statistik (misalkan proses perhitungan ”rata-rata code pos” (dimana kodenya numerik tetapi bukan data kuantitatif)). Sehingga untuk mendefinisikan variabel test sebagai faktor maka perintah yang digunakan adalah: > pima$test <- factor(pima$test) > summary(pima$test)
0 1 500 268 Sekarang jelas bahwa 500 kasus adalah negative (0) dan 268 positif (1). Sehingga untuk menggunakan deskripsi label yang benar untuk variabel test sebagai kategori maka dimana (0) adalah negatif dan (1) adalah positif, maka dituliskan perintah berikur: > levels(pima$test) <- c("negative","positive") > summary(pima) pregnant Min. : 0.00 1st Qu.: 1.00 Median : 3.00 Mean : 3.85 3rd Qu.: 6.00 Max. :17.00 NA’s : 5 bmi Min. :18.2 1st Qu.:27.5 Median :32.3 Mean :32.5 3rd Qu.:36.6 Max. :67.1 NA’s :11.0
glucose Min. : 44 1st Qu.: 99 Median :117 Mean :122 3rd Qu.:141 Max. :199 NA’s :35 diabetes Min. :0.078 1st Qu.:0.244 Median :0.372 Mean :0.472 3rd Qu.:0.626 Max. :2.420
diastolic Min. : 24.0 1st Qu.: 64.0 Median : 72.0 Mean : 72.4 3rd Qu.: 80.0 Max. :122.0 NA’s :227 age Min. :21.0 1st Qu.:24.0 Median :29.0 Mean :33.2 3rd Qu.:41.0 Max. :81.0
triceps Min. : 7.0 1st Qu.: 22.0 Median : 29.0 Mean : 29.2 3rd Qu.: 36.0 Max. : 99.0 NA’s :374 test negative:500 positive:268
insulin Min. : 14.0 1st Qu.: 76.2 Median :125.0 Mean :155.5 3rd Qu.:190.0 Max. :846.0
Data yang ada menunjukkan beberapa kemungkinan diantaranya regresi test (sebagai respons) terhadap diastolic dan bmi (predictor) melibatkan suatu respon kualitatif. Hal tersebut menunjukkan bahwa analisis regresi memiliki beberapa kemungkinan berdasarkan pada tujuan yang dikehendaki, yaitu: − Prediksi observasi ke depan − Penilaian efek, hubungan antara, variable explanatory terhadap respon. − Deskripsi umum struktur data. Variabel prediktor dalam fungsi adalah berbentuk data kategori/kualitatif. Nama ANOVA sendiri merupakan kependekan dari Analysis of Variance, dimana sering digunakan untuk membagi/mempartisi keseluruhan variansi sebagai respon terhadap setiap faktor-faktor dan error. Pada saat ini variabel prediktor disebut sebagai faktor karena memiliki beberapa tingkatan/level. Sedangkan parameter-paremeter yang terlibat disebut sebagai efek. Kita sekarang akan memperhatikan model dimana parameternya tetap (fixed) tetapi tidak diketahui – disebut model fixed-effect tetapi model randompeffect juga digunakan dimana parameter yang diambil merupakan variabel random. 73
V.4.1. ANOVA Satu Arah V.4.1.1. Model Model untuk ANOVA jenis ini yaitu, diberikan faktor α terjadi pada tingkat i = 0, 1, …, I , dengan sejumlah j observasi per tingkat dimana j = 1, …, Ji. Model yang digunakan: yij = μ + α i + ε ij , i = 1,..., I ; j = 1,..., J i
dengan batasan-batasan parameter sebagai berikut: 1. Set μ = 0 dan variabel dummy I yang berbeda 2. α1 = 0 – berhubungan dengan perlakuan yang kontras 3. ∑ J iα i = 0 , yang mengarah pada penaksir kuadrat
terkecil (least square
i
estimate).
μˆ = y•• , αˆi = yi • − y•• ,
Dimana tanda • (misal pada y•• ) menyatakan indeks dari rerata yang digunakan. Metode terakhir ini paling banyak direkomendasikan untuk penghitungan manualwalaupun akan lebih sulit disajikan dalam bentuk y = Xβ + ε . Faktor kedua pertama di atas lebih mudah diimplementasikan secara komputas. Seperti biasa, beberapa analisis grafis awal diperlukan sebelum melakukan pencocokkan (fitting). Boxplot sisi per sisi merupakan plot yang paling banyak digunakan. Lihat pada persamaan variansi, transformasi, outliers (disini tidak berpengaruh secar relevan karena levarage tidak akan berbeda kecuali disain yang sangat tidak seimbang) V.4.1.2. Penaksiran dan Pengujian
Penaksiran efek menggunakan langsung formula seperti yang sudah dijelaskan sebelumnya atau menggunakan pendekatan least square (karena hasil sama). Pada ANOVA, penaksiran dan pengujian dilakukan pertama kali adalah mencari perbedaan factor levelnya. Kita lakukan perbandingan hipotesis, dimana: • H0 : αi = 0 , berlaku untuk semua i • Ha :paling sedikit satu αi ≠ 0 Contoh kasus, Suatu penelitian ingin mengetahui apakah factor sosioekonomi mempengaruhi IPK mahasiswa. Sosioekonomi dibagi dalam tiga kelompok, yaitu rendah (r), sedang (s) dan tinggi (t). Dalam penelitian tersebut, masing-masing kelompok terdiri dari 7 mahasiswa yang diambil data IPK secara acak. > ipksosek <- edit(data.frame()) #memasukkan data ipksosek >ipksosek 1 2 3 4 5 6
ipk 2.87 2.16 3.14 2.51 1.80 3.01
sosek r r r r r r
74
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
2.16 3.23 3.45 2.78 3.77 2.97 3.53 3.01 2.25 3.13 2.44 2.54 3.27 2.81 1.36
r s s s s s s s t t t t t t t
Langkah pertama adalah melihat sebaran data dengan melakukan plot, dan digunakan boxplot dan hasilnya seperti Gambar 5.24: > boxplot(ipk˜sosek, data=ipksosek)
Gambar 5.24. Boxplot sebaran IPK mahasiswa berdasarkan sosio ekonomi Disini diharapkan tidak terlihat adanya outlier, kemiringan (skewness) dan variansi yang berbeda. Selanjutnya, dilakukan pencocokan model dengan cara sebagai berikut: Eksperimen tersebut melibatkan suatu factor tunggal yaitu kelas sosioekonomi (sosek) pada tiga level (r,s,t). Misalkan μ r , μ s , μt masing-masing menyatakan ratarata IPK untuk mahasiswa tingkat social ekonomi rendah, sedang dan tinggi. Sehingga akan diujikan hal berikut: H 0 : μ r = μ s = μt melawan alternatif: Ha : paling sedikit dua dari tiga perlakuan berbeda. Maka untuk mendapatkan hal tersebut, maka perlu dibuat suatu model linear yang menggambarkan hubungan ipk dengan sosek sebagai berikut: > g <- lm(ipk˜sosek,ipksosek)
75
> summary(g) Residuals: Min 1Q Median -1.18286 -0.29286 -0.01143
3Q 0.34857
Max 0.72714
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2.52143 0.19336 13.040 1.31e-10 *** soseks 0.72714 0.27346 2.659 0.0160 * sosekt 0.02143 0.27346 0.078 0.9384 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.5116 on 18 degrees of freedom Multiple R-Squared: 0.3372, Adjusted R-squared: 0.2636 F-statistic: 4.579 on 2 and 18 DF, p-value: 0.02468
Karena nilai statistik F = 4.579 melebihi nilai kepercayaan F0.05 = 3.55, maka H0 ditolak dan disimpulkan (pada tingkat kepercayaan α = 0.05) bahwa rata-rata IPK mahasiswa berbeda paling sedikit dua dari tiga tingkat sosio ekonomi. Hal ini juga ditunjukkan oleh α = 0.05 lebih besar dari p-value = 0.02468. Grup r adalah level rujukan dan mempunyai nilai rerata 2.52143, sedangkan grup s dan t berturut-turut memiliki nilai rerata 0.72714 dan 0.02143 lebih besar dari ratarata r. Kemudian berdasarkan factor sosioekonomi tersebut, maka dilakukan pemeriksaan matriks rancangan untuk memahami pengkodean: > model.matrix(g)
Kita dapat mencocokan model tanpa mengintersepsi batasan: > gi <- lm(ipk˜sosek -1, ipksosek) > summary(gi) Residuals: Min 1Q Median -1.18286 -0.29286 -0.01143
3Q 0.34857
Coefficients: Estimate Std. Error t value sosekr 2.5214 0.1934 13.04 soseks 3.2486 0.1934 16.80 sosekt 2.5429 0.1934 13.15 --Signif. codes: 0 ‘***’ 0.001 ‘**’
Max 0.72714
Pr(>|t|) 1.31e-10 *** 1.91e-12 *** 1.14e-10 *** 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5116 on 18 degrees of freedom Multiple R-Squared: 0.972, Adjusted R-squared: 0.9674 F-statistic: 208.4 on 3 and 18 DF, p-value: 3.662e-14
Kita lihat, dengan nilai p (p-value) = 3.662*10-14 (mendekati 0) maka kita tidak dapat melakukan perbandingan hipotesis sebelumnya.
76
V.4.2. ANOVA Dua Arah
Anggap terdapat dua faktor, α pada level I dan β pada level J. Misalkan jumlah observasi pada level i dari α dan level j dari β dan misalkan observasi tersebut sebagai yi j1, yi j2, …. Suatu layout lengkap A memiliki nij ≥ 1 untuk semua i, j. memiliki model umum yang paling sesuai adalah : yijk = μ + α i + β j + (αβ )ij + ε ijk
Efek interaksi (αβ)ij diinterpretasikan sebagai bagian dari rata-rata respon yang bukan merupak atribut efek tambahan dari αi and βj Sebagai contoh misalkan anda menyukai strawberi dan es krim secara individu, tetapi strawberi yang dicampur dalam eskrim lebih disukai. Hal yang berlawanan misalkan anda menyukai ikan dan es krim tetapi tidak menyukai es krim yang dicampur ikan. (
Berikut ini adalah contoh penggunaan anova dua arah [23]: Perusahaan pengecatan pesawat udara akan melakukan pengecatan pada permukaan alumunium dengan dua cara; penyemprotan (spray) dan dipping. Percobaan perbedaan faktor dilakukan untuk menyelidiki efek dari tipe pengecatan dan metode pengecatan terhadap daya rekat (adhisif) cat. Kekuatan daya rekat diukur, dengan tiga jenis cat (primer) yang berbeda dan dua metode pengecatan (aplikasi). Berikut adalah penulisan dalam R: > paint <- data.frame(adhf = c(4.0,4.5,4.3,5.6,4.9,5.4,3.8,3.7,4.0,5.4,4.9,5.6,5.8,6.1,6.3,5.5 ,5.0,5.0), primer = factor(rep(rep(1:3,rep(3,3)),2)),applic = factor(rep(c("D","S"),c(9,9)))) > paint adhf primer applic 1 4.0 1 D 2 4.5 1 D 3 4.3 1 D 4 5.6 2 D 5 4.9 2 D 6 5.4 2 D 7 3.8 3 D 8 3.7 3 D 9 4.0 3 D 10 5.4 1 S 11 4.9 1 S 12 5.6 1 S 13 5.8 2 S 14 6.1 2 S 15 6.3 2 S 16 5.5 3 S 17 5.0 3 S 18 5.0 3 S
Hasil tersebut adalah untuk anova satu arah, dengan mengabaikan metode pengecatan. Statemen lm() menyesuaikan model linier dan statemen anova() menampilkan hasil dalam bentuk tabel anova. > anova(lm(adhf~primer, data=paint))
77
Analysis of Variance Table Response: adhf
Df Sum Sq Mean Sq F value Pr(>F) 4.5811 2.2906 5.5989 0.01527 * 6.1367 0.4091
primer 2 Residuals 15 --Signif. codes:
0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Tampilan hasil di atas adalah anova satu arah untuk metode pengecatan, dengan mengabaikan jenis cat (primer). > anova(lm(adhf~applic, data=paint)) Analysis of Variance Table Response: adhf Df applic 1 Residuals 16 --Signif. codes:
Sum Sq 4.9089 5.8089
Mean Sq 4.9089 0.3631
F value 13.521
Pr(>F) 0.002039 **
0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Hasil berikut merupakan anova dua arah untuk metode pengecatan, varibel primer dan interaksi antar keduanya. Sebagai catatan, jumlah kuadrat untuk variable primer dan untuk variable applic bernilai sama dengan hasil perhitungan dalam analisis satu arah. > anova(lm(adhf~primer*applic, data=paint)) Analysis of Variance Table Response: adhf primer applic primer:applic Residuals --Signif. codes:
Df 2 1 2 12
Sum Sq 4.5811 4.9089 0.2411 0.9867
Mean Sq F value 2.2906 27.8581 4.9089 59.7027 0.1206 1.4662 0.0822
Pr(>F) 3.097e-05 *** 5.357e-06 *** 0.2693
0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Interaksi variable tidak signifikan (p = 0.2693) oleh karena itu kita dapat melakukan uji untuk efek utama, dimana keduanya memiliki signifikansi yang tinggi. Kesimpulan: Bahwa pemilihan tipe primer dan pemilih metode pengecatan (aplikasi) mempengaruhi kekuatan daya rekat cat, dan selisih antara tiga tipe cat adalah sama untuk kedua cara pengecatan (aplikasi), dan selisih antara dua metode pengecatan adalah sama untuk setiap tipe cat. Untuk uji t contoh pengecatan di atas, dibahas di V.5. sub bab uji t. Perintah berikut digunakan untuk menunjukkan cara perhitungan nilai rerata untuk enam tipe cat yang berbeda: kombinasi variable applic dan cara bagaimana mengatur nilai rerata dalam bentuk matriks untuk memberikan plot interaksi. > split(paint$adhf,paint$applic:paint$primer) $"D:1" [1] 4.0 4.5 4.3 $"D:2" [1] 5.6 4.9 5.4
78
$"D:3" [1] 3.8 3.7 4.0 $"S:1" [1] 5.4 4.9 5.6 $"S:2" [1] 5.8 6.1 6.3 $"S:3" [1] 5.5 5.0 5.0 >sapply (split (paint$adhf, paint$applic:paint$primer), mean) D:1 4.266667
D:2 5.300000
D:3 3.833333
S:1 S:2 S:3 5.300000 6.066667 5.166667
>matrix(sapply(split(paint$adhf, paint$applic:paint$primer),mean),ncol=2) [,1] [,2] [1,] 4.266667 5.300000 [2,] 5.300000 6.066667 [3,] 3.833333 5.166667
Perintah mathplot() akan mem-plot setiap kolom dari matriks pada graph yang sama. > matplot(matrix(sapply(split(paint$adhf, paint$applic:paint$primer),mean),ncol=2), type="l", xlab="Primer",ylab="Daya Rekat")
Gambar 5.25: Plot kolom matrik Dua garis di atas tampak seperti paralel, sesuai dengan kesimpulan sebelumnya bahwa tidak terjadinya suatu interaksi. Oleh karena itu, selisih/perbedaan antara tipe cat (primer) adalah sama untuk setiap metode pengecatan. 79
> matplot(matrix(sapply(split(paint$adhf,paint$primer:paint$applic), mean),ncol=3), type="l", xlab="Aplikasi",ylab="Daya Rekat")
Cara lain, anda dapat juga memplot daya rekat (adhesi) dengan metode pengecatan (aplikasi), dengan garis yang berbeda untuk setiap primer garis tampak parallel (Gambar 5.23).
Gambar 5.26: Matplot daya rekat (adhesi) vs aplikasi V. 5. Analisis (Uji) Statistika t
Berkaitan den gan contoh kasus pengecatan pesawat terbang dengan variable primer (tipe cat) dan variable applic (metode pengecatan; semprot dan dipping) (lihat kasus di bagian anova dua arah), penulisan uji t dan koefisiennya dalam R adalah: > summary(lm(adhf~primer*applic, data=paint)) Call: lm(formula = adhf ~ primer * applic, data = paint) Residuals: Min 1Q -0.40000 -0.16667 Coefficients:
Median 0.03333
3Q 0.21667
Max 0.33333
Estimate Std. Error t value (Intercept) 4.2667 0.1656 25.772 primer2 1.0333 0.2341 4.414 primer3 -0.4333 0.2341 -1.851 applicS 1.0333 0.2341 4.414 primer2:applicS -0.2667 0.3311 -0.805 primer3:applicS 0.3000 0.3311 0.906 --Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05
Pr(>|t|) 7.1e-12 0.000845 0.088949 0.000845 0.436265 0.382736
*** *** . ***
`.' 0.1 ` ' 1
Residual standard error: 0.2867 on 12 degrees of freedom Multiple R-Squared: 0.9079, Adjusted R-squared: 0.8696
80
F-statistic: 23.67 on 5 and 12 DF,
p-value: 7.89e-06
Data di atas menunjukkan nilai uji t dari masing-masing variabel. V.6. R dan Statistika Lanjut V.6.1. Pencocokan distribusi (Fitting Distribution)
Pencocokan distribusi adalah suatu cara untuk menentukan fungsi matematis yang diwakili dalam bentuk variabel-variabel statistika. Masalah yang sering dihadapi oleh statistikawan adalah, jika mempunyai suatu pengamatan/observasi dengan variabel kuantitatif x1, x2, …., xn dan ingin menguji jika pengamatannya itu, menjadi sample dari populasi yang tidak diketahui atau milik dari suatu populasi dengan pdf (fungsi densitas probabilitas) f(x, θ), dimana θ adalah vektor dari parameter yang akan diestimasi dengan data yang ada. Ada empat langkah utama dalam pencocokan distribusi: 1) Pemilihan model: Hipotesis distribusi 2) Estimasi/taksiran parameter 3) Pengukuran Goodnes of Fit 4) Uji Goodness of Fit Empat langkah ini akan dibahas pada sub-bagian berikut ini. V.6.1.1. Pemilihan Model
Langkah pertama dalam pencocokan distribusi adalah memilih model atau fungsi matematis yang mewakili data dengan baik. Semakin baik suatu model maka semakin baik pula keterwakilan data. (Catatan: baik buruknya model, salah satunya dapat diukur dengan error yang dihasilkan). Terkadang untuk pemilihan suatu model atau fungsi, teknik grafik seperti histogram dan lainnya dapat membantu. Namun secara grafik dapat mengakibatkan cenderung subjektif, oleh karena itu ada metode yang didasari pada ekspresi analitik seperti kriteria Pearson’s K. Memecahkan persamaan diferensial tertentu dapat dicapai dengan menggunakan kelompok fungsi yang mewakili distribusi empiris. Kurva dari fungsi tersebut hanya bergantung pada nilai rerata, variabilitas, skewness/kemiringan, dan kurtosis. Dengan menstandarisasi data, tipe kurva yang hanya bergantung pada pengukuran skewness dan kurtosis diformulasikan dalam fungsi berikut: γ 12 (γ 2 + 6) 2 K= 4(4γ 2 − 3γ 12 + 12)(2γ 2 − 3γ 12 ) dimana: n
γ1 =
∑ (x i =1
i
nσ 3
n
γ2 =
∑ (x i =1
− μ )3
i
adalah koefisien skewness Pearson’s
− μ )4
nσ 4
− 3 adalah koefisien kurtosis Pearson’s
81
Berdasarkan nilai K, yang diperoleh dari data yang ada, kita mempunyai suatu fungsi jenis tertentu. Berikut adalah beberapa contoh distribusi kontinu dan distibusi diskrit. Untuk setiap distribusi, terdapat bentuk grafik dan perintah R untuk membentuk grafik tersebut. Untuk data diskrit, dapat melihat distribusi Poisson, dengan fungsi mass probabilitas: f ( x, λ ) = e − λ
λx x!
dimana x = 0, 1, 2, ...
Contoh, penulisan: > x.poi <- rpois(n=200,lambda=2.5) > hist(x.poi,ylab="Frekuensi",xlab="x.poi",main="Distribusi Poisson")
menghasilkan gambar berikut
Gambar 5.27: Histogram distribusi Poisson Untuk data yang kontinu, distribusi yang digunakan antara lain: • Distibusi Normal (Gaussian), dengan fungsi: f ( x, μ , σ ) =
− 1 e 2π σ
1( x − μ ) 2 2σ 2
untuk x ∈ R
Sebagai contoh, dapat dituliskan perintah pembentukan kur va untuk model distribusi Normal (Gaussian): > curve(dnorm(x,m=10,sd=2), from=0,to=20,main="Distribusi Normal")
maka akan menghasilkan tampilan grafik seperti Gambar 5.28 sebagai berikut:
82
Gambar 5.28: Kurva distribusi Normal •
Distribusi Gamma:
f ( x, α , λ ) =
λα α −1 − λx x e untuk x ∈ R + Γ(α )
Sebagai contoh, penulisan: > curve(dgamma(x, scale=1.5, shape=2),from=0, to=15, main="Distribusi Gamma")
Menghasilkan grafik sebagai berikut:
Gambar 5.29: Kurva distribusi Gamma
83
Distribusi Weibull: f ( x,α , β ) = αβ
−α
x
α −1
x [ − ( )α ]
e
β
untuk x ∈ R +
Sebagai contoh, penulisan: > curve(dweibull(x, scale=2.5, shape=1.5),from=0, to=15, main="Distribusi Weibull")
akan menghasilkan grafik seperti Gambar 5.30 sebagai berikut:
Gambar 5.30: Kurva distribusi Weibull Indeks kemiringan dan kurtosis dihitung dengan menggunakan perintah skewness()dan kurtosis() yang terdapat dalam paket fBasics (dapat didownload dari website CRAN). Perintah untuk menghitungnya adalah sebagai berikut: > library(fBasics) ## load paket fBasics > skewness(x.norm) ## kemiringan(skewness) distribusi normal [1] 0.1242952 > kurtosis(x.norm) ## kurtosis distribusi normal [1] 0.01372539 > skewness(x.wei) ## skewness distribusi Weibull [1] 0.7788843 > kurtosis(x.wei) ## kurtosis distribusi Weibull [1] 0.4331281
V.6.1.2. Taksiran parameter
Setelah pemilihan model yang merepresentasikan data, kita perlu melakukan penaksiran parameter dari model yang telah dipilih. Dalam literatur statistik, ada beberapa metode penaksiran parameter namun dalam buku ini memfokuskan pada metode berikut:
84
1) analogi 2) moment 3) maximum likelihood. Metode analogi terdapat dalam penaksiran model parameter yang mengaplikasikan fungsi yang sama untuk data empiris, yaitu: kita estimasi rerata yang tidak diketahui dari populasi normal menggunan rerata sample. > mean.hat<-mean(x.norm) > mean.hat [1] 0.02646597
Metode moment adalalah teknik untuk membentuk penaksir parameter berbasis pada pencocokan moment sample yang berhubungan dengan moment distribusi. Metode ini membandingkan moment terhadap populasi (secara teori). Apabila terdapat metode momen maka keuntungannya adalah terdapat pula bentuk yang sederhana. Kita mendefinisikan moment sample (secara empiris) dengan cara tersebut.
Pendefinisian moment (empiris) suatu sampel adalah sebagai berikut: • Moment sample ke-t sekitar 0 (nol): n
mt = ∑ xit yi
, t = 0,1,2,...
i =1
•
Moment sample ke-t sekitar rerata (mean): n
mt' = ∑ ( xi − μ )t yi
, t = 0,1,2,...
i =1
dimana moment populasi dari tinjauan teori adalah: • Moment populasi ke-t sekitar 0 (nol): α
mt* = ∫ x t f ( x,θ )dx , t = 0,1,2,... β
•
Moment populasi ke-t sekitar rerata: α
m = ∫ ( x − μ )t f ( x,θ )dx , t = 0,1,2,... '* t
β
dimana (β – α) adalah range dimana f(x,θ) didefinisikan, μ adalah rerata dari distribusi, dan yi adalah frekuensi relative empiris, yaitu: kita akan menaksir parameter distribusi gamma menggunakan metode moment dengan mempertimbangkan moment pertama sekitar 0 (maupun rerata) dan moment kedua terhadap rerata (maupun variansi):
α =x λ
α = s2 λ2
85
dimana pada sisi kiri adalah rerata dan variansi distribusi gamma dan sisi kanan adalah rerata sample dan variansi sample terkoreksi. Dengan memecahkan persamaan sebelumnya di atas, didapat: x λˆ = 2 s x2 ˆ α= 2 s Penulisan untuk kasus di atas dengan R adalah sebagai berikut: > x.gam<-rgamma(200,rate=0.5,shape=3.5) # sampling dari distribusi gamma dengan λ = 0.5 dan α = 0.35 (parameter bentuk) > med.gam<-mean(x.gam) # rerata sampel > var.gam<-var(x.gam) # variansi sample > l.est<-med.gam/var.gam # penaksiran lambda (berhubungan dengan rata-rata) > a.est<-((med.gam)^2)/var.gam # penaksiran alfa > l.est [1] 0.579852 > a.est [1] 4.153633
Metode maximum likelihood digunakan dalam inferensi statistic untuk menaksir parameter. Misal kita mempunyai variabel random dengan diketahui pdf f(x,θ) yang menggambarkan karakter kuantitatif dalam populasi. Untuk itu kita harus menaksir vektor konstanta dan parameter tidak diketahui (unknown) θ sesuai data sample: x1, x2, …, xn .
Penaksiran maximum likelihood dimulai dengan model matematika yang diketahui sebagai fungsi likelihood dari data sample. Singkatnya, likelihood dari himpunan data adalah probabilitas untuk memperoleh himpunan data dengan yang sudah diberikan model probabilitas yang dipilih. Ekspresi ini mengandung parameter tidak diketahui (unknown). Nilai-nilai parameter yang memaksimumkan likelihood suatu sampel dikenal sebagai penaksiran maximum likelihood (MLE = Maximum Likelihood Estimate). Definisi fungsi likelihood adalah sebagai berikut: n
L( x1 , x2 ,..., xn ,θ ) = ∏ f ( xi ,θ ) i =1
Selanjutnya kita dapat menggunakan metode analisis matematik (turuan parsial sama dengan nol) bila fungsi likelihoodnya cukup sederhana, namun seringnya kita mengoptimasi L(x1, x2, …, xn, θ) menggunakan metode iterasi. MLE mempunyai beberapa sifat statistik dan beberapa keuntungan. Misalkan, dalam kasus distribusi gamma, fungsi likelihoodnya adalah:
86
n
−λ ∑ x λα α −1 − λx λα n n L( x1 , x2 ,..., xn ,θ ) = ∏ f ( xi ,α , λ ) = ∏ xi e ) (∏ xi )α −1 e =( Γ(α ) i =1 i =1 i =1 Γ (α ) n
n
i
i =1
i
dan fungsi logaritmanya: n
n
i =1
i =1
log( L) = nα log(λ ) − n log(Γ(α )) + (α − 1)∑ log xi − λ ∑ xi
R menyediakan fungsi untuk menghitung MLE dalam dua statement berikut: 1) mle() yang termasuk dalam paket stats4 2) fitdistr() yang termasuk dalam paket MASS mle() mencocokkan (fit) parameter dengan metode maximum likelihood yang menggunakan metode iterasi kalkulus numeric untuk meminimumkan negative loglikelihood ekspresi analitik sebagai argumen dan memberikan nilai penaksiran parameter awal. Penulisan di R untuk kasus distribusi gamma adalah sebagai berikut: > library(stats4) # loading paket stats4 > ll<-function(lambda,alfa) {n<-200 x<-x.gam n*alfa*log(lambda)+n*log(gamma(alfa))-(alfa1)*sum(log(x))+lambda*sum(x)} # fungsi negative log-likelihood > est<-mle(minuslog=ll, start=list(lambda=2,alfa=1)) > summary(est) Maximum likelihood estimation Call: mle(minuslogl = ll, start = list(lambda = 2, alfa = 1)) Coefficients: Estimate Std. Error lambda 0.5290189 0.05430615 alfa 3.6829126 0.35287672 -2 log L: 1044.282
Pertama ditentukan nilai awal parameter penaksir secara acak, tetapi dapat pula digunakan metode moment untuk menentukan nilai awal parameter penaksir tersebut. Perintah mle( ) digunakan untuk menaksir parameter setiap jenis pdf. Untuk hal ini perlu diketahui bahwa ekspresi analitik likelihood perlu diketahui. Dalam paket MASS tersedia fungsi fitdistr() untuk pencocokan maximum likelihood distribusi univariate tanpa informasi tentang likelihood ekspresi analitik. Hal ini cukup dengan menspesifikasikan suatu vector data, tipe pdf (densfun) dan tentu saja daftar (list) nilai awal (start) untuk prosedur iterasi. > library(MASS) # loading package MASS > fitdistr(x.gam,"gamma") # fitting parameter pdf gamma shape 3.68320097 (0.35290545)
rate 0.52910229 (0.05431458)
87
> fitdistr(x.wei,densfun = dweibull, start = list(scale=1,shape=2))# fitting parameter pdf Weibull scale -1.04721828 (0.03814184)
shape 2.04959159 (0.11080258)
> fitdistr(x.norm,"normal") # fitting parameters pdf gaussian mean sd 9.9355373 2.0101691 (0.1421404) (0.1005085)
V.6.1.3. Pengukuran Goodness of Fit
Pengukuran goodness of Fit berguna untuk memasangkan frekuensi secara empiris dengan yang dicocokkan oleh model teoritis. Dalam hal ini terdapat pengukuran absolute dan relative. Diantara pengukuran absolute kita dapat memilih: n
ξ=
∑y i =1
− yi*
i
n n
ξ=
2
∑(y i =1
i
− yi* )
n
dimana yi adalah frekuensi empiric dan yi* adalah nilai yang dicocokkan. Berikut adalah beberapa pengukuran relative: n
δ=
ξ n
∑ yi n
=
∑y
i
i =1
i =1
− yi*
n
∑y
i
i =1
∑ (y n
δ=
ξ
2
2
n
∑ yi n
=
i
i =1
)
2
− yi* / n
n
∑ y /n
i =1
i =1
i
n
2 2
δ=
ξ
2 n
=
∑y i =1
2 i
/n
∑(y i =1
i
n
− yi* ) 2
∑y i =1
2 i
Keterangan: biasanya indeks tersebut merupakan persentase dari rerata yang sesuai. Berikut adalah contoh menggunakan R perhitungan data (berdistribusi Poisson): > > > >
lambda.est<-mean(x.poi) # estimasi lambda parameter tab.os<-table(x.poi) # tabel dengan frekuensi empiris tab.os x.poi
88
0 1 2 3 4 5 6 7 8 21 29 46 53 28 16 4 2 1 > freq.os<-vector() > for(i in 1: length(tab.os)) freq.os[i]<-tab.os[[i]]
#
vektor frekuensi empirik > freq.ex<-(dpois(0:max(x.poi),lambda = lambda.est)*200) # vektor frekuensi yang diharapkan atau fitted (expected) > freq.os [1] 21 29 46 53 28 16 4 2 1 > freq.ex [1] 15.0040080 38.8603808 50.3241931 43.4465534 28.1316433 14.5721912 6.2903292 [8] 2.3274218 0.7535028 > acc<-mean(abs(freq.os-trunc(freq.ex))) # index absolute dari goodness of fit > acc [1] 2.111111 > acc/mean(freq.os)*100 # persentase relative index goodness of fit [1] 17
Suatu teknik grafik untuk menghitung goodness of fit dapat menggambarkan kurva pdf dan histogram dalam satu kesatuan seperti pada gambar 5.31. Adapun penulisannya dalam R adalah sebagai berikut: > > > > > >
h<-hist(x.norm,breaks=15) xhist<-c(min(h$breaks),h$breaks) yhist<-c(0,h$density,0) xfit<-seq(min(x.norm),max(x.norm),length=40) yfit<-dnorm(xfit,mean=mean(x.norm),sd=sd(x.norm)) plot(xhist,yhist, type = "s", ylim = c(0,max(yhist, yfit)), main=”Normal pdf dan histogram”) > lines(xfit,yfit, col=”red”)
89
Gambar 5.31: Kurva dan histogram pdf Normal V.6.1.4. Uji kenormalan
Dalam analisis statitistika, statistikawan sering melakukan pengujian apakah kumpulan data berasal/tidak dari pupulasi Normal, oleh karena itu perlu melakukan uji kenormalan atas data tersebut. Beberapa literatur menyebutkan, ada beberapa uji yang berguna untuk menguji kemiringan (skewness) dan/atau kurtosis dari suatu distribusi berbasiskan pada b3 e b4 (atau gamma3 e gamma4). Salah satu uji yang paling baik dan ampuh untuk menguji kenormalan terutama untuk sample kecil adalah uji Shapiro-Wilk. Dalam uji Shapiro-Wilk, kenormalan diuji dengan mencocokan dua penaksiran variansi alternative, yaitu: penaksir non-parametrik didapat dari kombinasi linear nilai sample terurut dan penaksir parameter biasa. Bobot (ai) dapat dilihat di table statistik: 2
⎛ n ⎞ ⎜ ∑ ai x(i ) ⎟ ⎠ W = ⎝ni =1 ∑ ( xi − x )2 i =1
Fungsi R untuk uji Shapiro-Wilk adalah shapiro.test() yang akan menghitung nilai statitistik W dan p- value. Penulisan perintah di R adalah sebagai berikut: > shapiro.test(x.norm) Shapiro-Wilk normality test data: x.norm W = 0.9938, p-value = 0.5659
90
p-value lebih tinggi dibandingkan tingkat (level) signifikansi yang biasanya digunakan untuk menguji hipotesis statistik. Hipotesis nol akan diterima apabila sample data termasuk dalam distribusi Gaussian. Dalam Ekonometrik, uji Jarque-Bera sering digunakan untuk menguji kenormalan. Uji Jarque-Bera berdasarkan pada pengukuran kemiringan/skewness dan kurtosis dari distribusi dengan mempertimbangakn distribusi asimptotik dari b3 e b4 yang merupakan, dibawah hipotesa nol, suatu chi kuadrat dengan 2 derajat kebebasan. Uji Jarque-Bera di R berada dalam paket tseries (yang harus di download website CRAN) dengan perintah jarque-bera.test() yang akan menghitung nilai statistic, derajat kebebasan, dan p-value. > library(tseries) # loading paket tseries > jarque.bera.test(x.norm) Jarque Bera Test data: x.norm X-squared = 0.539, df = 2, p-value = 0.7638
Suatu teknik pengujian yang diajukan oleh Cucconi (ahli statistik Italia) menguji kenormalan tanpa minimbulkan masalah penaksiran parameter data sample. Misal x1 ≥ x2 ≥, … ≥ xn sample variabel kontinu dan ζ1, ζ2, ζn himpunan bilangan acak normal standard berukuran n, misalkan: n −1
r =ζn
eq=
∑ζ i =1
2 i
n −1
xi − x r + dimana x adalah rerata σˆ n sample dan σˆ adalah akar kuadrat variansi sample. Disini dapat dilihat jika xi berasal dari populasi normal dan yi berdistribusi normal standard maka kita dapat menggunakan uji Kolmogorov-Smirnov untuk menguji hipotesis tersebut. Berikut adalah contoh penulisan di R: kita pertimbangkan transformasi xi: yi = q
> > > > > > >
zz <-rnorm(n=200,m=0,sd=1) # bilangan random sampling dari N(0,1) r <-zz[200] q <-sd(zz[-200]) m <-mean(x.norm) s <-sqrt(var(x.norm)) y <-q*((x.norm-m)/s)+(r/sqrt(200)) ks.test(y,”pnorm”,m=0,sd=1) One-sample Kolmogorov-Smirnov test
data: y D = 0.0298, p-value = 0.9943 alternative hypothesis: two.sided
Paket nortest (harus di download dari situs CRAN) digunakan untuk melakukan uji kenormalan hingga 5 cara yang berbeda, yaitu: 91
1) sf.test()melakukan uji Shapiro-Francia: > library(nortest) #loading paket > sf.test(x.norm) Shapiro-Francia normality test data: x.norm W = 0.9926, p-value = 0.3471
2) ad.test() melakukan uji Anderson-Darling: merupakan modifikasi uji Kolmogorov-Smirnov dan memerlukan distribusi tertentu untuk menghitung nilai kritis. Pada saat ini tabel nilai kritis sudah mencakup distribusi normal, lognormal, exponensial, Weibull, nilai ekstrim tipe I dan logistik. Uji Anderson-Darling berdasarkan pada statistik ini: A2 = − n − S dimana, (2i − 1) [ln F ( xi ) + ln(1 − F ( xn + i +1 ))] , n adalah ukuran sample, dan F(x) adalah n i =1 fungsi distribusi kumulatif (CDF). R hanya menyediakan uji ini untuk cek kenormalan: n
S =∑
> library(nortest) # loading paket > ad.test(x.norm) Anderson-Darling normality test data: x.norm A = 0.4007, p-value = 0.3581
3) cvm.test() melakukan uji Cramer-Von Mises, yang didasari teori statistik: ∞
W2 =
∫ (F ( x) − F ( x) )
2
n
f ( x)dx
−∞
Penulisan uji ini dalam R adalah sebagai berikut: > library(nortest) # loading paket > cvm.test(x.norm) Cramer-von Mises normality test data: x.norm W = 0.0545, p-value = 0.4449
4) lillie.test() melakukan uji Lilliefors: Uji ini juga merupakan modifikasi dari uji Kolmogorov-Smirnov yang tidak bisa digunakan untuk kenormalan apabila rerata dan standar deviasi (yang diambil dari
92
data sample) dari hipotesis distribusi normal tidak diketahui. Uji ini cukup ampuh untuk data sample yang berukuran kecil. Uji Lilliefors mengevaluasi hipotesis bahwa X berdistribusi normal dengan suatu nilai rerata dan variansi berbanding hipotesis alternative bahwa X tidak berdistribusi normal. Uji ini membandingkan distribusi empiric X dengan distribusi normal dengan rerata dan variansi yang sama dengan X. Uji Lilliefors mirip dengan uji Kolmogorov-Smirnov, namun parameter distribusi normalnya ditaksir dari X. Penulisan dalam R adalah sebagai berikut: > library(nortest) # loading paket > lillie.test(x.norm) Lilliefors (Kolmogorov-Smirnov) normality test data: x.norm D = 0.0414, p-value = 0.5509
5) pearson.test() melakukan uji Pearson’s chi-square: Uji ini serupa dengan uji Chi-square χ 2 yang digunakan untuk uji Goodness of fit pada distribusi normal. Berikut adalah penulisan dalam perintah di R untuk uji chisquare: > library(nortest) # loading paket > pearson.test(x.norm) Pearson chi-square normality test data: x.norm P = 10.12, p-value = 0.753
Soal Latihan Bab V
1. Misalkan, tiap akhir tahun perusahaan akan memberikan bonus kepada pegawai berdasarkan penjualan dalam beberapa bulan terkahir dengan nilai (dalam juta) 12 0.4 5 2 50 8 3 1 4 0.25 Pertama buatlah objek penjualan dengan menggunakan fungsi scan() penjualan = scan(),kemudian carilah nilai mean, variansi, standard deviasi, median, minimum, maksimum dan quantile-nya.
93
2. Dengan menggunakan data yang sama, buatlah histogram untuk penjualan tersebut 3. Misalkan, gunakan data set pada R untuk data Orange. Gambarkan boxplot untuk masing-masing variabel (Tree, age, circumference) data tersebut. (petunjuk: > boxplot(nama_variabel, main=”title boxplo”t, horizontal=TRUE) 4. Masukkan data berikut 60 83 71 57 54 47 94 61 25 48 66 84 99 75 89 Buatlah plot stem (stem plot) dan plot daunnya (leaf plot)! 5. Bacalah plot stem dan plot daun berikut, masukkanlah data dan buatlah histogramnya!
6. Pada library (Packages ->Load package ->MASS) MASS, pilih data UScereal yang mengandung informasi tentang sarapan sereal yang populer . Attach data tersebut dengan cara berikut: > > > >
library(‘MASS’) data(‘UScereal’) attach(UScereal) names(UScereal)
Kemudian periksalah hubungan-hubungan berikut dan berik komentar atas hasil tersebut. Anda dapat menggunakan tables, scatterplots, barplots dan lain lain untuk memeriksa. a. Hubungan antara manufacturer dan shelf b. Hubungan antara fat dan vitamins c. Hubungan antara fat dan shelf d. Hubungan antara carbohydrates dan sugars e. Hubungan antara fibre dan manufacturer f. Hubungan antara sodium dan sugars Apakah terdapat hubungan lainnya yang dapat anda prediksi dan periksa? 7. Sebagai upaya meningkatkan kemampuan mengingat mahasiswa, beberapa perguruna tinggi mencoba program pembelajaran sistem block. Misalkan dari 100 mahasiswa dibagi menjadi dua grup masing-masing 50 orang. Satu setengah bagian mencoba program block dan setengah sisanya tidak menggunakan program (nonblock). Diketahui jumlah kehadiran tiap tahun. Akan diuji apakah program block membuat perbedaan pada daya ingat mahasiswa. Datanya sebagai berikut Program Non-Block Block
1 tahun 18 10
2 tahun 15 5
3 tahun 5 7
4 tahun 8 18
> 5 tahun 4 10 94
Lakukan uji hipotesis untuk menentukan apakah ada perbedaan antara dua tipe program tersebut terhadap daya ingat mahasiswa ? 8. Data set InsectSpray pada data built-in di R, berbicara tentang jumlah serangga dalam beberapa area yang diberi perlakukan dengan 6 jenis semprotan (spray) berbeda. Data sudah dalam format untuk dilakukan ANOVA satu arah- yaitu vektor dengan data(count), dan satu factor yang menggambarkan level (spray). Pertama, buatlah boxplot side-by-side untuk melihat apakah ada kesamaan mean. Kemudian lakukan ANOVA satu arah untuk melihat apakah terdapat kesamaan mean ?
95
BAB
VI Contoh & Studi Kasus R
Dalam bab ini akan diberikan contoh-contoh dan studi kasus, untuk menjelaskan funsgi dan perintah-perintah R yang digunakan. Bagian contoh kasus dasar merupakan studi kasus yang menggunakan perintah penulisan kode R yang sederhana, sedangkan untuk bagian kasus lanjut adalah studi kasus yang menggunakan perintah penulisan kode R yang lebih kompleks. A. Contoh kasus dasar A.1. Rerata (mean), variansi dan standar deviasi Sebagai contoh, data mengenai banyaknya mobil merek X (dalam satuan ribu) yang terjual di Indonesia pada periode tahun 1990 sampai 1999. yakni 74 122 235 111 292 111 211 133 156 7 selanjutnya, kita ingin menghitung mean, variansi dan standar deviasi data tersebut. Berikut adalah penulisan perintah R > mobilx = c(74, 122, 235, 111, 292, 111, 211, 133, 156, 79) > mean(mobilx) [1] 152.4 > var(mobilx) [1] 5113.378 > std(mobilx) Error: couldn't find function "std" > sqrt(var(mobilx)) [1] 71.50789 > sqrt(sum((mobilx - mean(mobilx))^2/(length(mobilx )-1))) [1] 71.50789
96
Pada proses penghitungan nilai standar deviasi (std), tertulis pesan error, dimana tidak dikenali fungsi/perintah std, namun error tersebut dapat kita tangani, mengingat standar deviasi adalah kuadrat variansi sehingga baris terakhir merupakan rumus/fungsi menghitung standar deviasi dari data mobil X yang ada. Dimana rumus matematis standar deviasi adalah: SD(X) =
1 n ∑ ( xi − x )2 n − 1 i =1
R juga menyediakan fungsi untuk mengitung standar deviasi untuk data yang sederhana yaitu: > std = function(x) sqrt(var(x)) > std(variabel random)
A.2. Data univariat Data dibagi menjadi tiga jenis utama, yaitu: kategori, diskrit dan kontinu. Data kategori Contoh, suatu survey yang menanyakan responden apakah mereka merokok atau tidak. Datanya adalah: Yes, No, No, Yes, Yes
Penulisan data tersebut dalam R adalah sebagai berikut: > x=c("Yes","No","No","Yes","Yes")
dan dengan menggunakan perintah table(x)akan membentuk tabel frekuensi data kategorik: > table(x) > x No 2
Yes 3
Data kategori biasa digunakan untuk mengklasifikasikan data ke dalam bentuk levelisasi atau faktor. Sebagai contoh, data perokok bisa merupakan bagian dari survey mengenai kesehatan pelajar. R akan secara otomatis mengenali suatu faktor atau tidak. Untuk membuat faktor digunakan perintah factor atau as.factor . Misalkan contoh berikut: > x=c("Yes","No","No","Yes","Yes") > x [1] "Yes" "No" "No" "Yes" "Yes"
# mencetak nilai X
97
> factor(x) # mencetak nilai dalam factor(x) [1] Yes No No Yes Yes Levels: No Yes # notice levels are printed.
A.3. Diagram batang (Bar chart) Diagram batang (bar chart) menggambarkan suatu bagian data baik proporsinya maupun frekuensinya. Contoh: Suatu survey pada suatu kelompok yang terdiri dari 25 orang mendata tentang tingkat kesukaan terhadap suatu produk sabun cuci. Kategorinya adalah (1) untuk merek A, (2) untuk merek B, (3) untuk merek C dan (4) untuk merek D. Data hasil survey adalah sebagai berikut: 3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1
Data tersebut akan dibuat bar chart untuk proporsi dan frekuensi berdasarkan kategori. Pertama, kita menggunakan fungsi scan() untuk menuliskan dan membaca data tersebut: > sabun = scan() 1: 3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1 26: Read 25 items > barplot(sabun) # masih salah > barplot(table(sabun)) # Benar, gunakan summarized data. > barplot(table(sabun)/length(sabun)) # dibagi dengan n untuk proporsi
dan barplotnya berturut-turut sesuai dengan penulisan R di atas:
Gambar 6.1: Barplot 1 data sabun [ > barplot(sabun)] 98
Gambar 6.2: Barplot 2 data sabun [ > barplot(table(sabun) ]
Gambar 6.3: Barplot 3 data sabun [ > barplot(table(sabun) /length(sabun)) ]
99
A.4. Pie chart Dengan menggunakan data yang sama seperti sebelumnya (data sabun) akan kita bentuk grafik pie chart, dengan perintah penulisan R sebagai berikut: > sabun.counts = table(sabun) # menyimpan hasil table > pie(sabun.counts) # pie pertama > names(sabun.counts) = c("merek A ", "merek B","merek C", "merek D") # memberi nama > pie(sabun.counts) # mencetak nama > pie(sabun.counts, col = c("purple","green2", "cyan", "white")) # memberikan warna
Grafik pie-chart dari masing-masing perintah tersebut adalah sebagai berikut:
Gambar 6.4: Piechart 1 [ > pie(sabun.counts) ]
Gambar 6.5: Piechart 2 [ > names(sabun.counts)=c(“merek A”, “Merek B”,“merekC”, “merek D”) ]
100
Gambar 6.6: Piechart 3 [ > pie(sabun.counts,col=c("purple", "green2", "cyan", "white"))] A.5. Membuat data kategorik dari data numerik Variabel kategori dapat dibentuk dari variabel numerik. Sebagai contoh, suatu gaji dapat dikategorikan dalam 0 – 1 juta, 1 – 5 juta, lebih dari 5 juta. Untuk membuat kategori tersebut, R menyediakan fungsi cut() dan fungsi table() . Misalkan daftar gaji adalah sebagai berikut: 12 0.4 5 2 50 8 3 1 4 0.25 dan akan dibagi menjadi kategori [0,1],[1,5],[5,50] Untuk menggunakan perintah cut, kita memerlukan cut point (titik potong). Dalam kasus ini 0, 1, 5, dan 50 (= max(gaji)). Berikut adalah penulisan sintaknya: > gaji = c(12, .4, 5, 2, 50, 8, 3, 1, 4, .25) # memasukkan data > kat = cut(gaji,breaks=c(0,1,5,max(gaji))) # menentukan breaks > kat # menampilkan nilai [1] (5,50] (0,1] (1,5] (1,5] (5,50] (5,50] (1,5] (0,1] (1,5] (0,1] Levels: (0,1] (1,5] (5,50] > table(kat) # pengelompokkan kat (0,1] (1,5] (5,50] 3 4 3 > levels(gaji) = c("miskin","kaya","sangat kaya") # mengganti label > table(gaji) > gaji miskin kaya sangat kaya 3 4 3
101
Catatan: Fungsi cut() dapat digunakan untuk menjawab pertanyaan “ pada interval yang mana suatu bilangan/data termasuk”, dimana outputnya adalah interval (sebagai suatu faktor). Dengan demikian perlu menggunakan fungsi table() untuk mensumarize hasil dari fungsi cut B. Contoh kasus lanjut B.1. Distribusi binomial Misalkan untuk 500 sampel berdistribusi binomial dari 20 kali percobaan, dengan probabilitas sukses sebesar 40%. Pertama-tama anda menggunakan metode rbinom dan melihat summarynya dengan fungsi summary(): > x <- rbinom(500,20,.4) > summary(x) Min. 1st Qu. Median Mean 3.000 6.000 8.000 8.066
3d Qu. Max. 10.000 14.000
B.2. Matrik dan Aljabar Linear R dapat juga digunakan untuk menghitung operasi pada matriks dan memecahkan solusi perkalian matriks. Misalkan kita mempunyai elemen matriks M: 35,14,11,1,4,11,3,0,12,9,38,4,2,5,12,2. > M <- c(35,14,11,1,4,11,3,0,12,9,38,4,2,5,12,2) > M [1] 35 14 11
1
4 11
3
0 12
9 38
4
2
5 12
# dalam bentuk matrik baris 2
> dim(M) NULL
Pada penulisan di atas, M tidak mempunyai dimensi, untuk itu kita perlu menambahkan dengan metode dim: > dim(M) <- c(4, 4) > M [,1] [,2] [,3] [,4] [1,] 35 4 12 2 [2,] 14 11 9 5 [3,] 11 3 38 12 [4,] 1 0 4 2 > dim(M) [1] 4 4
Sedangkan untuk mendapatkan transpose matriks M, dapat dituliskan perintah: > Mt <- t(M) > Mt
102
[1,] [2,] [3,] [4,]
[,1] [,2] [,3] [,4] 35 14 11 1 4 11 3 0 12 9 38 4 2 5 12 2
Untuk mendapatkan perkalian matriks, dua penulisan/statement akan menghasilkan masing-masing nilai yang berbeda: > M*M [,1] [,2] [,3] [,4] [1,] 1225 16 144 4 [2,] 196 121 81 25 [3,] 121 9 1444 144 [4,] 1 0 16 4
> M%*%M [,1] [,2] [,3] [,4] [1,] 1415 220 920 238 [2,] 748 204 629 201 [3,] 857 191 1651 517 [4,] 81 16 172 54
Untuk mencari solusi dari matrik M , kita memerlukan fungsi solve() dengan penulisan sebagai berikut: > solve(M) [,1] [,2] [,3] [,4] [1,] 0.034811530 -0.007095344 -0.02039911 0.1053215 [2,] -0.036807095 0.096674058 0.02793792 -0.3725055 [3,] -0.004545455 -0.018181818 0.07272727 -0.3863636 [4,] -0.008314856 0.039911308 -0.13525499 1.2200665 > solve(M)%*%M [,1] [,2] [,3] [,4] [1,] 1.000000e+00 -1.734723e-17 1.665335e-16 8.326673e-17 [2,] 1.665335e-16 1.000000e+00 0.000000e+00 0.000000e+00 [3,] -2.220446e-16 -2.775558e-17 1.000000e+00 -2.220446e-16 [4,] 2.220446e-16 5.551115e-17 8.881784e-16 1.000000e+00
Untuk memecahkan persamaan linear, misal untuk matrik A dan vector kolom B sedemikian hingga, b = Ax, adalah: > b <- c(1, 2, 3, 4) > (x <- solve(M, b)) [1] 0.3807095 -1.2496674 -1.3681818
4.5460089
menghasilkan nilai dengan x1 = 0.3807095, x2 = -1.2496674, x3 = -1.3681818, x4 = 4.5460089.
103
B.3. Bekerja dengan data kategori bivariate Perintah table akan menyimpulkan (summarize) data bivariate dengan cara yang sama pada data univariat. Misalkan survey pada pelajar mengenai apakah pelajar yang merokok, lebih sedikit belajarnya. Datanya sebagai berikut:
Tabel 6.1: Data pelajar (perokok vs waktu belajar) Pelajar
Merokok Waktu belajar (waktubel)
1 2 3 4 5 6 7 8 9 10
Y T T Y T Y Y Y T Y
< 5 jam 5 – 10 jam 5 – 10 jam > 10 jam > 10 jam < 5 jam 5 – 10 jam < 5 jam > 10 jam 5 – 10 jam
Untuk menulis data Tabel 6.1 di atas, kita buat menjadi dua vektor, kemudian gunakan fungsi table.Penulisannya adalah: > merokok = c("Y", "T", "T", "Y", "T", "Y", "Y", "Y", "T","Y") > waktubel = c(1,2,2,3,3,1,2,1,3,2) > table(merokok,waktubel) waktubel merokok 1 2 3 T 0 2 2 Y 3 2 1
Dari hasil R di atas, sepertinya terlihat adanya suatu hubungan. Langkah yang cukup baik jika kita mempunyai total margin dan proporsi data. Sebagai contoh, berapa proporsi perokok yang belajar selama 5 jam atau kurang dari 5 jam? Kita dapat menghitungnya secara manual dari 3/(3+2+1) = ½., namun bagaimana menulisnya di R?. Fungsi yang digunakan untuk menghitung proporsinya adalah prop.table. Berikut penulisan lengkap di R: > > > >
tmp=table(merokok,waktubel) # menyimpan data ke table old.digits = options("digits") # menyimpan bilangan digit options(digits=3) # mencetak 3 posisi desiman prop.table(tmp,1) # jumlah setiap baris sama dengan 1 waktubel merokok 1 2 3 T 0.000 0.500 0.500 Y 0.500 0.333 0.167
104
> prop.table(tmp,2) # jumlah setiap kolom sama dengan 1 waktubel merokok 1 2 3 T 0.000 0.500 0.667 Y 1.000 0.500 0.333 > prop.table(tmp) waktubel merokok 1 2 3 T 0.0 0.2 0.2 Y 0.3 0.2 0.1 > options(digits=old.digits) # restore the number of digits
B.4. Bekerja dengan data bivariate: data kategorik vs data numerik Misalkan anda mempunyai data numerik untuk suatu kategori. Sebagai contoh, untuk data pengujian efek suatu obat, yang terdiri dari dua kelompok, kelompok kendali dan kelompok eksperimen, seperti berikut: eksperimen: 5 5 5 13 7 11 11 9 8 9 kendali: 11 8 4 5 9 5 10 5 4 10 Pertanyaannya adalah, bagaimana cara untuk menampilkan kedua kelompok tersebut bersamaan. Pertanyaan tersebut dapat terjawab dengan menggunakan perintah boxplot. Penulisan dalam R adalah sebagai berikut: > x = c(5, 5, 5, 13, 7, 11, 11, 9, 8, 9) > y = c(11, 8, 4, 5, 9, 5, 10, 5, 4, 10) > boxplot(x,y)
Gambar 6.7: Boxplot slide by slide
105
Dari perbandingan boxplot di atas, terlihat variabel y (kelompok kendali, dengan label 2) sepertinya lebih kecil dibanding variabel x (kelompok eksperimen, dengan label 1).
Soal Latihan Bab VI 1. Buatlah histogram dan barplot untuk dataset yang built-in di R, yakni dataset Titanic, USAccDeaths, dan USArrest. Data manakah yang skew? Dan data mana yang mempunyai outlier, dan data manakah yang simetris? 2. Anggap, diketahui jumlah kegagalan tipe O dalam penerbangan pertama pesawat ruang angkasa Challenger yakni: 0 1 0 NA 0 0 0 0 0 1 1 1 0 0 3 0 0 0 0 0 2 0 1 (NA berarti not available(missing value): yakni peralatannya rusak) . Buatlah tabel untuk kategori yang mungkin, Carilah nilai mean. (Sebelumnya anda harus mencoba perintah mean(x, na.rm=TRUE) untuk menghindari nilai NA, atau lihat pembahasan mengenai x[!is.na(x) pada manual R.) 3. Misalkan, pada suatu sekolah akan dilakukan evaluasi belajar siswa oleh guru dengan skala Leichert 1-5. Anggap diketahui jawaban untuk 3 pertanyaan (Tanya) pertama ditunjukkan pada tabel berikut Siswa Tanya Tanya Tanya 1 2 3 1 3 5 1 2 3 2 3 3 3 5 1 4 4 5 1 5 3 2 1 6 4 2 3 7 3 5 1 8 4 5 1 9 3 4 1 10 4 2 1 Masukkan data untuk Tanya1 dan Tanya2 menggunakan read.table atau data.entry() a. Buatlah tabel hasil Tanya1 dan Tanya1 secara terpisah b. Buatlah tabel kontingensi Tanya1 dan Tanya2 c. Buatlah barplot Tanya2 dan Tanya3
c(), scan(),
106
4. Data mammals yang terintegrasi (built-in) dalam R terdiri dari variabel body weight vs. brain weight. Gunakan perintah cor untuk mendapatkan koefisien korelasi Pearson-Spearman. Apakah kedua variabel tersebut similar? Buatlah plot data menggunakan perintah plot , dan lihatlah apakah kedua variabel tersebut terlihat similar?. Jika anda tidak yakin dan terjawab dengan plot tersebut, maka lakukan plot logaritma (log) setiap variabel dan perhatikan apakah sudah terjadi perbedaan! 5. Data ToothGrowth yang built-in dalam R adalah hasil studi yang mengukur pertumbuhan gigi sebagai suatu fungsi dari jumlah konsumsi Vitamin C. Sumber Vitamin C berasal dari jus jeruk (orange juice) atau suplemen vitamin (vitamin supplement). Scatterplot dari variabel dosage vs length adalah sebagai berikut: > data(“ToothGrowth”) > attach(ToothGrowth) > plot(len ~ dose, pch=as.numeric(aupp)) ## klik mouse untuk menambahkan legend > tmp = levels(aupp) # menyimpan untuk sementara > legend(locator(1), legend=tmp, pch=1:length(tmp)) > detach(ToothGrowth)
Dari plot yang dihasilkan, apakah yang dapat anda simpulkan dari kedua variabel tersebut?
107
+ R Commander - Rcmdr
Seperti kita telah pelajari dan lihat sebelumnya, R adalah perangkat lunak statistik berbasiskan perintah (command driven), yang sepertinya dapat memberi kesulitan bagi pengguna pemula untuk mengingat serangkaian perintah ataupun formula. Hal ini sudah diantisipasi oleh perangkat lunak tersebut dengan menyediakan penggunaan Graphical User Interface (GUI) yang memudahkan pengguna tanpa harus mengingat serangkaian perintahperintah. GUI untuk R terbundel dalam paket yang bernama Rcmdr yang berisikan GUI untuk statistika dasar. Statistika dasar meliputi diantaranya pemodelan uji hipotesis, distribusi (normal, F, binomial, t, Chi-square, poisson), graph (histogram, scatterplot, boxplot, dan lain lain), statisik deskriptif. Namun sebagai open source yang memiliki banyak kontributor, dalam pengembangannya juga mendukung untuk statistik lanjut, seperti pemodelan linier dan generalized-linear. Secara arsitektur menu, R terdiri dari menu utama seperti File, Edit, Data, Statistics, Graphs, Models, Distributions, Tools, dan Help. A. Instalasi & Menu dalam Rcmdr 1. Instalasi Cara termudah melakukan instalasi R Commander pada sistem operasi Windows adalah jika anda terkoneksi dengan Internet, yakni melalui Menu RGui Packages> Install package(s). R secara otomatis akan meminta anda untuk memilih mirror tempat Rcmdr akan didownload dan diinstall.
108
R meminta koneksi internet
Gambar 1: Instalasi Rcmdr dengan koneksi Internet
Paket Rcmdr dan semua paket yang tidak terdapat (missing) yang sering terjadi jika instalasi tanpa koneksi internet, akan langsung di download dan diinstal secara otomatis. Sebagai contoh, jika hendak menginstall paket graf 3D graphics, anda memerlukan koneksi Internet untuk mendapatkan sumbernya (source). Pada Windows, Rcmdr hanya berfungsi pada SDI (Single-Document Rgui Interface). Untuk mengaktifkan SDI, buatlah copy ikon R desktop (klik-kanan pada ikon, seret dpada lokasi yang berbeda di desktop, pilih Copy Here dari menu context). Kemudian klik-kanan pada ikon yang baru dan pilih Properties. Tambahkan ---sdi (didahului oleh spasi) ke bagian/daerah Target pada tabulasi Shortcut dalam kotak dialog Properties. Bagian/daerah yang tadi dimaksud harus dapat membaca ekstensi alamat direktori seperti "C:\Program Files\R\rw2010\bin\Rgui.exe" - - sdi. Jika anda menginginkan , ubah nama ikon pada tabulasi General (misal , R2.1.0. SDI). Kemudian klik OK. Catatan: dalam instalasi Rcmdr untuk penulisan buku ini, kami menggunakan koneksi internet untuk mendownload dan menginstal file dan paket-paket yang diperlukan untuk instalasi lengkap.
2. Load/menampilkan Rcmdr Pada RGui, pilih menu Packages>Load package … Kemudian pilih Rcmdr pada tabel Select one
109
1
2
Loading Rcmdr
Gambar 2: Loading paket R commander (Rcmdr) 3. Tampilan & Menu Rcmdr
Script Window
Ouput Window
A
B
Warning Window
C
Gambar 3: Tiga sub window dalam Rcmdr 110
Dalam GUI Rcmdr, terdiri dari tiga sub window (layar) utama, yakni: A. Script Window: Layar yang menampilkan perintah (command) R. Perintah dalam bagian ini dapat di edit dan di eksekusi dan di eksekusi ulang (dengan menekan tobol submit) B. Output Window: Layar yang menampilkan hasil perhitungan yang di eksekusi dari Script Window C. Warning Window: Layar yang menampilkan peringatan seperti pesan error, data missing, atau adanya paket yang belum diinstall. Berikut adalah menu utama dan submenu dalam Rcmdr: − Menu File untuk loading dan menyimpan file script; untuk menyimpan output dan R workspace (ruang kerja R); dan untuk keluar aplikasi Rcmdr dan atau keluar aplikasi Rcmdr sekaligus R. − Menu Edit (Cut, Copy, Paste, dll.) untuk penyuntingan (editing) konten dari script dan output windows. Klik kanan pada script atau output window akan menampilkan menu edit “konteks”. − Submenu Data terdiri atas item untuk membaca dan memanipulasi data, seperti import data dari file ber-ekstensi Text, SPSS, minitab atau STATA. − Submenu Statistics terdiri atas item-item berupa alat analisis statistika dasar. − Menu Graphs untuk membuat grafik statistic dasar, seperi histogram, scatterplot, Boxplot, Pie chart, 3D dan lain lain. − Menu Models item dan submenu-nya digunakan untuk menghitung summary numeric, confidence intervals, hypothesis tests, diagnostics, dan graphs untuk model statistic dan untuk menambahkan kuantitas diagnostic, misalkan, − Residuals. − Menu Distributions terdiri dari submenu distribusi probabilitas, quantiles, dan grafik distribusi statistika standar, yaitu distribusi Normal, Chi-Square, t, F, binomial dan Poisson. − Menu Tools untuk loading paket R yang tidak berelasi dengan paket Rcmdr (misal, untuk mengakses data yang tersimpan dalam paket lain), dan untuk men-setting beberapa option. − Menu Help yang berisikan informasi mengenai R dan R Commander termasuk manualnya. Setiap kotak dialog (dialog box) mempunyai tombol Help button. Cuplikan gambar (screenshot) menu dalam Rcmdr, disajikan pada gambar-gambar berikut ini.
111
Gambar 4:. Menu File
Gambar 5:. Menu Data
Gambar 6: Menu Statistics
112
Gambar 7: Menu Graphs
Gambar 8: Menu Models
Gambar 9: Menu Distributions
113
Gambar 10: Menu Tools
Gambar 11: Menu Help
B. Contoh kasus menggunakan Rcmdr. 1. Menggunakan data yang ada dalam R. a) Pada menu utama, pilih data yang tersedia Data> Data in packages>List data set in packages kemudian pilih data women (gunakan versi R 2.3.1. dan Rcmdr Version 1.1-7) dengan menuliskan pada script window data(women). Maka data women sudah termasuk dalam active data set yang sewaktu-waktu dapat digunakan manakala diperlukan. Untuk menambahkan data lainnya dalam active data set, cukup menuliskan perintah data(nama data) yang diinginkan. Untuk menampilkan data set yang termasuk dan memilih data yang akan digunakan dalam active data set, pilih Data>Active data set> Select active data set.
Gambar 12: Tampilan Active data set b) Menampilkan rincian data. Untuk data yang dipilih (women) cara menampilkannya cukup menuliskan kata women, maka data akan tampil di output window.
114
Gambar 13: Rincian data yang dipilih Selain cara di atas, dengan menekan tombol View data set juga dapat menampilkan rincian data pada window baru. c) Menentukan data yang akan digunakan sebagai data aktif, gunakan cara (a ) maka ikon Data set:
akan berubah menjadi (misal) Data set: women d) Mencari nilai statistic. Misalkan kita ingin melihat korelasi antara dua variabel dalam data(women)¸ maka pilih Statistics> Summaries> Correlation matrix> (Pilih variabel dan jenis korelasinya, misal) Pearson product-moment.
115
Gambar 14: Menu Statistics Matriks Korelasi Pearson Maka pada Output window nilai korelasi variabel adalah sebagai berikut:
Gambar 15: Output Statistics Matriks Korelasi Pearson untuk data(women) e) Menampilkan plot. Untuk membuat plot (misal scatterplot) akan data yang kita pilih, maka lakukan Graphs> Scatterplot> (Pilih kriteria yang diinginkan)
Gambar 16: Menu Graphs untuk scatterplot 116
maka akan hasil scatterplotnya adalah sebagai berikut:
Gambar 17: Scatterplot dengan kriteria yang ditentukan f) Distribusi probabilitas. Untuk mencari nilai probabilitas dari fungsi distribusi, Rcmdr dapat melakukannya. Misal untuk probabilitas distribusi normal, pilih menu Distributions> Normal distribution> Normal probabilities…> (Pilih nilai variabe mean, standar deviasi, dan kriteria lainnya) misalkan:
Gambar 18: Menu (Fungsi) Distribution untuk fungsi probabilitas Normal
Dengan kriteria nilai di atas, maka nilai probabiltas normal untuk data(women) adalah:
Gambar 19: Nilai probabiltas Normal data(women) 117
Untuk penjelasan statistika dasar lainnya, seperti Pemodelan statistik, Nonparametric test, Fitting models, Import data dari teks, SPSS, minitab, STATA, Fungsi Distribusi , Grafik (histogram, boxplot, dll), dan lain sebagainya akan kami jelaskan pada kesempatan khusus dalam buku yang membahas R Commander dan tools GUI untuk R lainnya.
118
+ Tanya Jawab Seputar R
Dalam tanya-jawab (FAQ) ini sebagian besar diambil dari [22] dan penambahan gambar/ilustrasi dari eksperimen penulis. FAQ ini menjelaskan mulai dari instalasi dan penggunaan, paket-paket, hingga membangun dari sumber kode pemrograman. Dilanjutkan dengan FAQ yang berkaitan dengan pesan kesalahan (error message(s)) ketika menuliskan perintah R, juga FAQ mengenai penulisan perintah dalam R (ref: RossiterRIntro-ITC.pdf) • •
1. Pendahuluan 2. Instalasi dan Penggunaan o 2.1. Dimana saya bisa mendapatkan versi terbaru R? o 2.2. Bagaimana cara menginstall R di Windows o 2.3. Bagaimana cara memeriksa corrupt/gagal atau tidaknya installasi? o 2.4. Bagaimana saya menjalankan R? o 2.5. Dapatkah saya menjalankan R dari CD atau drive USB? o 2.6. Bagaimana cara meng-uninstall R? o 2.7. Adapakah cara terbaik untuk men-upgrade R? o 2.8. Benarkah ada pembatasan memori yang digunakan! o 2.10. Bagaiamana cara mencetak /print file dari R? o 2.11. Dapatkah saya menggunakan R CMD BATCH? o 2.12. Dapatkah saya menggunakan versi R dengan ESS dan (X)emacs? o 2.13. Apa yang menjadi HOME dan direktori kerja? o 2.14. Bagaimana cara mengatur/set variabel lingkungan (environment variables)? o 2.16. Apakah R menggunakan Registry? o 2.17. Apakah R menunjang/support automasi (OLE, COM)? o 2.18. Mengapa fungsi download internet gagal! o 2.19. Memasukkan karakter tertentu, Rgui menjadi crash!. o 2.20. Kejadian crash lainnya.
119
•
3. Paket o 3.1. Cara menginstall paket di R? o 3.2. Apa dan bagaimana jika saya tidak mempunyai hak untuk mengakses/ (hak tulis) ke dalam direktori rw#versi\direktori library. o 3.3. Paket yang saya instal tidak muncul dalam sistem help HTML. o 3.4. Fungsi yang saya miliki tidak dapat ditemui oleh fasilitas pencarian sistem help HTML. o 3.5. Loading a paket gagal! o 3.6. Paket TclTk tidak berfungsi. o 3.7. Kadang-kadang Hyperlinks di HTML tidak berfungsi. o 3.8. update.packages() gagal o 3.9. Bagaimana cara menambahkan dalam daftar repositori?
•
4. Fitur Windows o 4.1. Apa yang seharusnya saya harapkan kebiasaan yang ada di Unix ketika di Windows? o 4.2. Sepertinya ada fitur-fitur yang bagus, bisa tolong jelaskan! o 4.3. Lingkaran nampak pada layar menjadi oval o 4.4. Bagaimana cara memindahkan fokus ke dalam window grafik atau konsol?
•
5. Workspaces/ruang kerja o 5.1. Workspace saya malah tersimpan dalam ruang yang saya sendiri tidak tahu; bagaimana cara mengehentikannya? o 5.2. Bagaimana cara menyimpan workspace saya dalam tempat yang berbeda? o 5.3. Can I load workspaces saved under Unix/GNU-Linux or MacOS?
•
6. Konsol R and Fonts o 6.1. Apakah R mendukung tulisan/huruf (font) Jepang? o 6.2. Saya tidak dapat melihat karakter dengan aksen di konsol R, contoh saja dalam?text o 6.3. Ketika menggunakan Rgui output yang diproses dalam konsol seperti lambat, ada penundaan (delay). o 6.4. Mengapa garis panjang dalam konsol sepertinya terpotong?
120
1. PENDAHULUAN Tanya-jawab (FAQ) dibuku ini ditekankanpada penggunaan R pada sistem operasi Windows, dan berlaku untuk R versi 2.1.0 atau yang terbaru. Untuk FAQ lebih lengkap bisa dilihat di situs: http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html. 2. INSTALASI DAN PENGGUNAAN 2.1. Dimana saya bisa mendapatkan versi terbaru R? Anda dapat ke situs CRAN (lihat http://cran.r-project.org/mirrors.html) , dan pilih menu download R platform Windows. Atau lihat pembahasan III.1 2.2 . Bagaimana cara menginstal R di Windows Untuk instalasi, lihat sub bab III.2. 2.3. Bagaimana cara memeriksa corrupt/gagal atau tidaknya installasi? Jalankan program bin\md5check.exe . Program tersebut akan membandingkan checksum pada semua file yang terinstall dan akan memberi laporan apabila ada perubahan atau file yang hilang. 2.4. Bagaimana saya menjalankan R? Untuk menjalankannya, klik dua kali ikon shotcut R yang terinstall. Anda juga dapat menjalankan R pada command prompt, sebagai contoh pada ‘MS-DOS’ (Windows 9x/ME) 2.5. Dapatkah saya menjalankan R dari CD atau drive USB? YA, anda dapat menjalankan R dari CD atau drive USB. Instalasi dasar dapat direlokasi, jadi anda dapat membakar (burn) image pada instalasi R di harddisk anda atau menginstal langsung pada removable storage (misal USB flashdisk). Catatan: Menjalankan R tidak mengharuskan akses ke direktori temporary dan direktori home. 2.6. Bagaimana cara meng-uninstall R? Untuk uninstalasi, lihat sub bab III.2.2 2.7. Adakah cara terbaik untuk men-upgrade R? Relatif adalah jawabannya, perbedaanya adalah masalah selera dan kebiasaan. Untuk kebanyakan orang yang dilakukan adalah meng-uninstal nya, kemudian install versi terbaru, lalu men-copy semua paket yang terinstal ke folder library di instalasi yang baru, kemudian jalankan update.packages() dalam instalasi R atau ‘Update packages’ di menu R pada gambar berikut:
121
Gambar 1: Menu Update paket kemudian delete/hapus semua sisa file yang ada di folder instalasi yang lama. 2.8. Benarkah ada pembatasan memori yang digunakan! YA, benar ada pembatasan memori. Hal tersebut diatur oleh command-line flag --max-memsize -- yang defaultnya akan lebih kecil dari RAM fisik dalam mesin dan 1 Gb. Juga dapat diatur lebih besar dari 16 M. Perlu diperhatikan, biasanya Windows punya batasan maksimum memory virtual untuk penggunanya sekitar 2 GB. Ketik ?Memory dan ?memory.size untuk memeriksa penggunaan memory. Pembatasan /limit bisa ditingkatkan dengan menuliskan memory.limit pada saat menjalakan sesi R. R dapat dikompilasikan untuk menggunakan different memory manager yang akan membuatnya lebih baik pada penggunaan memory yang besar, namun secara substansi akan lebih lambat (membuat R lebih lambat ketika mengerjakan beberapa perintah). 2.10. Bagaimana cara mencetak /print file dari R? Tergantung apa yang akan anda cetak. • Untuk mencetak grafik windows dari menu atau dengan menggunakan perintah dev.print dengan argument yang sesuai (lihat halaman help: bisanya dev.print(win.graph) dapat bekerja dengan baik). • Anda dapat mencetak dari konsol R atau ke menu File | Print. • And dapat mencetak file help dari pager atau browser HTML. • Jika anda telah mengkonfigurasi RHOME\bin\helpPRINT.bat dan sudah menginstal and have LaTeX installed, anda dapat file help dengan menuliskan perintah help(fn_name, offline=TRUE). 2.11. Dapatkah saya menggunakan R CMD BATCH? YA: gunakan R CMD BATCH --help or ?BATCH untuk lebih jelas. Anda juga dapat mengatur atau menaikkan batch file dengan menggunakan Rterm.exe. Suatu sample batch file kemungkinanan mengandung (suatu baris) path_to_R\bin\Rterm.exe --no-restore --no-save < %1 > %1.out 2>&1 Maksud dari 2>&1 adalah untuk redirect warnings dan errors ke file yang sama sebagai output normal output, dan pengguna Windows 95/98/ME's default command.com `shell' akan 122
membutuhkannya mengacuhkannya. (Program tersebut tidak bermaksud untuk men- redirect stderr, dan Rterm.exe mengirim peringatan dan error ke file output normal pada systems.) 2.12. Dapatkah saya menggunakan versi R dengan ESS dan (X)emacs? YA. Versi terakhir ESS (e.g. 5.2.x) mendukung versi R ini, dan terdapat dukungan untuk menginterupsi proses R dari ESS (dengan C-c C-c). Untuk bantuan dengan ESS, kirim email ke [email protected].
2.13. Apa yang dimaksud dengan HOME dan direktori kerja? Beberapa dokumentasi menggunakan pengertian dan terminologi berikut. Direktori kerja (working directory) adalah direktori pada saat Rgui atau Rterm dijalankan, kecuali menjalankan shortcut pada menu ‘Start’. Untuk memanggil working directory gunakan getwd(). Home directory adalah kumpulan dari hal berikut: jika variabel lingkungan R_USER di-set, maka nilainya (user) digunakan. Lain hal, jika variabel HOME di-set, maka nilai di HOME tersebut yang digunakan. Dari dua user-controllable setting, maka R akan mencari direktori home yang didefiniskan sebelumnya. Langkah pertama, R akan menggunakan direktori “pribadi” Windows (misal C:\Documents and Settings\username\My Document di Windows XP) . Jika langkah pertama gagal, namun jika dua variabel lingkungan HOMEDRIVE dan HOMEPATH di-set (dan biasanya variabel tersebut berbasis Windows NT/2000/XP/2003), nilainya adalah ${HOMEDRIVE}${HOMEPATH}. Dan jika semua langakah sebelumnya masih gagal, direktori kerja yang terakhir dipakai yang digunakan.. Anda dapat mencarinya dari kode R dengan perintah Sys.getenv("R_USER"). 2.14 Bagaimana cara mengatur/set variabel lingkungan (environment variables)? Variabel lingkungan dapat di-set untuk RGui.exe dan Rterm.exe dengan tiga cara yang berbeda. Pada baris perintah yakni sebagai pasangan name=value. Sebagai contoh dalam shortcut untuk RGui anda mempunyai path berikut: "path_to_R\bin\Rgui.exe" HOME=p:/ R_LIBS=p:/myRlib Dalam file lingkungan (environment). Renviron dalam direktori kerja atau direktori home, sebagai contoh pada baris berikut: R_LIBS=p:/myRlib Jika anda punya hak akses untuk melakukan hal tersebut, anda juga dapat membuat file lingkungan etc\Renviron tentukan lokasi dan atur variabel lingkungan dalam file tersebut dengan cara yang sama. Variabel tersebut harus diatur untuk semua user dan semua penggunaannya pada saat instalasi R. Untuk lebih rinci mengenai file lingkungan, lihat ?Startup.
123
Untuk pengguna di Windows, untuk setting variable lingkungan pada Windows 9x dapat mengesetnya dalam file autoexec.bat atau dalam window MS-DOS tempat anda menjalankan aplikasi Rgui / Rterm. Untuk sistem Windows NT/2000/XP/2003, anda dapat menggunakan control panel atau klik kanan dan pilih properties pada `My Computer'. Pada Windows ME, anda dapat menggunakan System Configuration Utility (klik Start Menu>Programs>Accessories>System Tools). Kemudian anda harus log off atau reboot agar perubahan penyetting berfungsi. 2.16 Apakah R menggunakan Registry? TIDAK. Installer mengatur beberapa entri untunk melakukan dan memberi akses untuk uninstalasi. Sebgai tambahan (secara default, namun bisa juga tidak dipilih defaultnya), installer akan menset Registry key LOCAL_MACHINE\Software\R-core\R sesuai dengn versi R yang digunakan dan path instalasi. Untuk lebih lengkap mengenai penjelasan ini lihat http://cran.rproject.org/other-software.html). Anda dapat menambahkan entri Registry dengan menjalankan file RSetReg.exe yang ada dalam folder bin dan menghapus registry dengan menjalan argument /U. Sebagai catatan, semua setting/pengaturan tersebut adalah untuk per mesin dan bukan untuk per user. 2.17 Apakah R menunjang/support automasi (OLE, COM)? TIDAK secara langsung. Terdapat server (D)COM server yang dibuat oleh Thomas Baier dan bisa didapat di situs CRAN (http://cran.r-project.org/other-software.html) yang bekerja dengan Rproxy.dll (dalam distribusi R) dan R.dll untuk menunjang transfer data ke dan dari R dan mengendalikan dari jarak jauh eksekusi perintah-perintah R, dan terdapat dalam window R. Antar muka /interface R-Excel membuat penggunaan server DCOM termasuk dalam distribusi R. Server (D)COM lainnya bisa didapat di situs http://www.omegahat.org/, yang mempunyai fitur yang mengijinkan mengekspor objek R sebagai nilai COM. Di situs tersebut juga tersedia paket RDCOMClient dan SWinTypeLibs yang memungkinkan R bekerja sebagai (D)COM client. 2.18 Mengapa fungsi download internet gagal! Sebagai contoh, untuk menu yang ada dalam paket menu yakni update.packages() jika tidak koneksi dengan internet atau pun gagal untuk mendownload. Ada bebrapa laporan yang kami terima diantaranya adalah (berikut solusinya): (a) Periksa koneksi Internet anda, apakah kabel Internet terpasang (dengan baik) atau periksa apakah koneksi internet dalam status terhubung. (b) Gunakan cara internet2.dll dengan memulai menjalankan R dengan flag – yang menggunakan browser internet internal (misal Internet Explorer 4 atau terbaru). Catatan: hal ini tidak bekerja dengan proxies yang membutuhkan autentikasi. (b) Anda perlu mengatur/menset proxy: lihat ?download.file. Adapun gambarnya sebagai berikut:
124
Gambar 2: Deskripsi download.file
dan berikut ini adalah dua versi suatu contoh baris perintah pada shortcut: "path_to_R\bin\RGui.exe" http_proxy=http://user:pass@gannet:80/ "path_to_R\bin\RGui.exe" http_proxy=http://gannet/ http_proxy_user=ask Versi kedua akan mem- prompt pengguna untuk proxy username dan password pada saat pertama kali digunakannya download HTTP. 2.19 Mengapa ketika saya memasukkan karakter tertentu, Rgui menjadi crash!. Hal tersebut biasanya jarang terjadi. Namun apabila terjadi biasanya berkaitan dengan masalah msvcrt.dll dan telah dilakukan perbaikan pada versi R terbaru. Namun apabila tetap terjadi, cobalah mengekstrak msvcrt.dll agar dapat ditemukan dalam self-extracting archive ftp://ftp.microsoft.com/softlib/mslfiles/msvcrt.exe dan letakkan dalam direktori in the rw2011\bin . Pindahkan msvcrt.dll dari direktori tersebut dan set ke dalam keadaan standar. Dan sepertinya dalam beberapa versi Windows (tidak termasuk Windows 2000/XP/2003) anda juga perlu meletakkan direktori the rw2011\bin pada path anda. Halphal di atas biasanya akan bekerja dengan baik. Namun apabila masih terjadi masalah, hal yang sering dilakukan adalah menginstall ulang Windows anda. ☺ 125
3. PAKET 3.1 Apakah saya dapat menginstall paket di R? YA. Untuk lebih jelas caranya, silakan melihat di situs r-project pada alamat berikut: http://cran.rproject.org/bin/windows/contrib/ReadMe, atau http://www.murdoch-sutherland.com/Rtools/ untuk mendapatkan tools install paket serta untuk manual dalam pdf/HTML anda dapat melihat Writing R Extensions pada menu windows R anda. Atau anda bisa merujuk pada Bab III tentang Menu dalam R di buku ini. 3.2 Apa dan bagaimana jika saya tidak mempunyai hak untuk mengakses/ (hak tulis) ke dalam direktori rw#versi\direktori library? Anda dapat meng-install paket dimana saja yang anda mau dan menggunakan variabel lingkungan R_LIBS (lihat bagian Bagaimana cara mengatur variabel lingkungan) untuk menentukan lokasi library. Anggap saja paket anda ter-instal di p:\myRlib. Kemudian anda dapat melakukan pengaturan varibael R_LIBS ke path p:\myRlib sebelum memulai menjalankan R atau anda dapat juga menggunakan suatu paket, seperti paket library(mypkg, lib.loc="p:/myRlib") 3.3 Paket yang saya instal tidak muncul dalam sistem help HTML! Untuk memperbaharui/update menuliskan.
HTML help, jalankan perintah di prompt R dengan
>link.html.help() Perintah di atas biasanya secara otomatis ada ketika anda meng-instal dari Menu Packages atau dengan menuliskan install.packages(), dan ketika menjalankan perintah help.start, perintah-perintah tadi memungkinkan anda untuk mempunyai hak tulis di rw2011. Berikut adalah gambar ketika penulisan install.packages():
126
Gambar 3: Mirror CRAN
Namun apabila anda tidak memiliki hak tulis di R, maka anda akan ada peringatan dan paket yang anda install sebelumnya tidak akan muncul dalam daftar paket-paket ataupun pada system pencarian (search). 3.4 Fungsi yang saya miliki tidak dapat ditemui oleh fasilitas sistem pencarian help HTML! Apabila hal tersebtu terjadi, anda harus memeriksa apakah kondisi berikut ini sudah terpenuhi, yaitu: • Suatu paket mengandung file CONTENTS dalam direktori paling tinggi (top-level directory). • Anda telah memperbaharui (update) indikasi-indikasi sebagaimana dijelaskan dalam pertanyaan sebelumnya (lihat pertanyaan Paket yang saya instal tidak muncul dalam sistem help HTML) Jika dua hal tersebut terpenuhi, maka pertanyaan bagian ini sudah terjawab. 127
Sebagai catatan: jika anda tidak dapat memperbaharui (update) indikasi-indikasi (dimana anda memerlukan hak tulis dalam direktori rw2011), hanya fungsi dalam paket yang ter-instal dalam library utama yang akan muncul, selainnya tidak. Kasus lain, jika system pencarian help tidak berfungsi sama sekali, kemungkinan bahwa Java support tidak ter-instal atau status un-enable pada browser anda. Halawan web pencarian (search page) mengandung link ke bagian manual R Installation and Administration. Contoh pada gambar berikut:
Gambar 4: Menu manual instalasi dan administrasi R
3.5 Loading paket gagal! Sebelumnya, periksa dahulu apakah paket dikompilasi dari versi R yang sama? Karena kebanyakan paket harus dikompilasi untuk R versi terbaru. Anda dapat melihat versi dari paket yang terkompilasi dengan menggunakan perintah Built: line in its DESCRIPTION file atau pada tab Version file DLL-nya dalam direktori libs. Atau yang paling mudah dengan meng-klik kanan pada file DLL di Windows Explorer dan pilih tab Version di Properties seperti pada gambar berikut:
128
Klik kanan
Gambar 5: Versi property R (selain prosedur di atas anda ada dapat menggunakan fungsi DLL.version di R.)
3.6 Paket TclTk tidak berfungsi! Supaya paket tcltk dapat berfungsi (coba tuliskan perintah demo(tkdensity) atau demo(tkttest) setelah anda menuliskan perintah library(tcltk) di R windows) anda harus memastikan Tcl sudah terinstal. Tahap ini adalah bagian pilihan (optional) dari proses instalasi dan biasanya merupakan default ketika anda meng-instal. Apabila anda menjumpai pesan berikut: Tcl/Tk support files tidak terinstal Maka file pilihan tidak ter-instal dan anda harus kembali ke installer dan meng-instalnya kembali. Cara lainnya, jika anda memiliki variabel lingkungan MY_TCLTK maka atur/set ke bentuk nilai non-empty, dan hal ini diasumsikan bahwa anda ingin menggunakan instalasi Tcl/Tk 8.4.x 129
yang berbeda, dan hal ini akan diatur/set up secara benar (dengan file DLLs dalam path anda dan pengaturan pada TCL_LIBRARY ). Dan apabila anda tidak memerlukan file pendukung Tcl/Tk ter-instal , sebagai catatan anda tidak memerlukan file 8.4.x dan file 8.3.x. 3.7 Kadang-kadang Hyperlinks di HTML tidak berfungsi? Hyperlink tidak berfungsi dikarenakan paket di-install di dalam library yang berbeda. Masalah tersebut dapat diatasi dalam system operasi Unix menggunakan simbol links (dimana pada Windows hal tersebut tidak dapat dilakukan). Untuk membetulkan link HTML, help.start() akan membetulkannya ke dalam paket umum standar dengan syarat anda mempunyai hak tulis system. Berikut adalah gambaran dalam R:
Gambar 6: Hyperlinks HTML
dan akan muncul dalam browser seperti gambar berikut:
130
Gambar 7: Browser Help dalam format HTML Sampai saat ini, link ke paket base, datasets, utils, grDevices, graphics dan stats telah diperbaiki. 3.8. update.packages() gagal ! Anda tidak dapat memperbaharui paket pada saat digunakan: Windows secara otomatis akan `mengunci' paket DLL pada saat proses load. Oleh karena itu gunakan perintah update.packages() untuk sesi yang baru. Jika anda meletakkan library(foo) di dalam .Rprofile , anda harus memulai R untuk memperbaharui/update paket foo. Jika anda mengatur R_DEFAULT_PACKAGES untuk memasukkan foo, anda perlu meng-unset nya sementara. 4. Fitur Windows 4.1. Apa yang seharusnya saya biasakan untuk melakukan hal yang biasanya ada di Unix ketika mengoperasikannya di Windows? Perintah R dapat di interupsi dengan menekan tombol <Esc> dalam Rgui.exe dan tombol atau dalam Rterm.exe: digunakan untuk melakukan pengcopy-an dalam versi GUI. Penyuntingan baris perintah selalu tersedia, namun lebih mudah dibandingkan dengan penyuntingan berbasis garis baca (readline-based) di Unix. Item menu `Help | Console' akan menjelaskan Rgui.exe lebih rinci. Sedangkan rincian keterangan tentang Rterm.exe dapat dilihat file README.rterm. 131
Jika anda menggunakan perintah help.start() dan tidak secara otomatis mengirim permintaan help ke browser, maka gunakan perintah options(htmlhelp=TRUE) untuk mengaktifkannya. Sistem help HTML mempunyai batasan dalam mendukung cross-library links. Spesifikasi path ke suatu file (misal dalam source()) dapat dilakukan dengan menggunakan symbol "/" atau "\\". 4.2 Sepertinya ada fitur-fitur yang bagus, bisa tolong jelaskan! Apakah anda telah membaca file README.rw2011? Di sana terdapat menu file pada konsol R, pager dan windows grafik. Anda dapat mengambil source dan menyimpannya dari menumenu tersebut ke dalam bentuk standar seperti png, jpeg, bmp, postscript, PDF atau metafile. Untuk mempermudah penyimpanan, anda dapat melakukan klik kanan pada tombol mouse untuk melihat pilihan shortcut yang tersedia. Jika anda mengubah ukuran konsol R, options(width=) secara otomotis mengatur lebar konsol (kecuali anda men-disabled dalam file konfigurasi). Grafik dalam R mempunyai mekanisme history. Dalam README.rw2011 tertulis: `Menu History memungkinkan anda untuk merekam , anda dapat ditampilkan lagi dengan menggunkan tombol dan pada keyboard, menyimpannya dan menggantikannya (saved dan replaced). Perekaman secara otomotas dapat dinyalakan (lihat item Recording pada daftar) atau suatu plot dapat langsung ditambahkan (gunakan tombol Add atau pada keyboard). Keseluruhan history plot dapat disimpan atau diambil kembali dari variabel R dalam lingkungan global. Format dari plot terekam dapat berubah untuk tiap-tiap versi R dan sebaiknya tidak digunkan sebagai format penyimpan permanent untuk plot R. Olehkarena itu hanya terdapat satu graphics history shared dari semua windows devices.' Konsol R dan windows grafik mempunyai file konfigurasi yang tersimpan dalam direktori RHOME\etc disebut Rconsole dan Rdevga; Anda dapat menyimpan copy pribadi dalam direktori HOME anda. Untuk lebih jelasnya lihat: ?Rconsole. Gambarnya adalah sebagai berikut:
132
Gambar 8: Rconsole Terdapat penyunting preferensi dari menu Edit yang dapat digunakan untuk menyunting/edit file Rconsole. Menu klik kanan akan nampak seperti contoh gambar berikut ini:
Klik kanan pada gambar
Gambar 9: Copy dan/ menyimpan gambar/grafik
133
4.3 Lingkaran pada layar berubah menjadi oval Sistem grafik R akan menanyakan sistem Windows tentang berapa banyak pixels per inch di sumbu X dan Y, dan menggunakannya untuk menentukan ukuran grafik (dimana ukuran grafik di R dalam satuan inchi). Kadang kala, jawaban system Windows tidak selalu pas, karena Windows tidak mengetahui secara tepat seberapa ukuran yang diatur pada CRT untuk ukuran sumbu horizontal dan vertikal. Anda dapat menentukan nilai yang tepat secara manual dengan cara menggunakan fungsi windows atau untuk rincinya: lihat ?windows. Berikut adalah gambar dari argument ?windows:
Gambar 10: perintah ?windows
4.4 Bagaimana cara memindahkan fokus ke dalam window grafik atau konsol? Anda dapat memindahkan focus dengan beberapa cara, misalkan untuk memanggil identify atau readline anda dapat menggunakan fungsi bringToTop(). Argument defaultnya akan membawa grafik yang aktif ke paling atas dan mengatur fokusnya secara otomatis. Sedangkan argument -1 akan membawa konsol ke posisi paling atas dan mengatur fokus secara otomatis. Hal tersebut berfungsi pada Rgui.exe di mode MDI dan SDI, dan dapat digunakan untuk windows grafik dari Rterm.exe (walaupun Windows tidak selalu berfungsi pada mode di atas).
134
5 WORKSPACE (RUANG KERJA) 5.1 Workspace saya malah tersimpan dalam ruang yang saya sendiri tidak tahu; bagaimana cara mengatasinya? 5.2 Bagaimana cara menyimpan workspace saya dalam tempat yang berbeda? 5.3 Dapatkah saya memuat ruang kerja (loading workspace) yang sudah disimpan untuk sistem operasi Unix/GNU-Linux atau MacOS? 6 KONSOL R DAN FONTS 6.1 Apakah R mendukung tulisan/huruf (font) Jepang? 6.2 Saya tidak dapat melihat karakter dengan aksen di konsol R, contoh saja dalam text 6.3 Ketika menggunakan Rgui output yang diproses dalam konsol seperti lambat, ada penundaan (delay). 6.4 Mengapa garis panjang dalam konsol sepertinya terpotong?
135
...
. Penutup
Demikianlah buku pengantar analisis statistika dengan menggunan perangkat lunak R. Dimana telah dijelaskan bagaimana menggunakan fitur-fitur dalam perangkat lunak R yang terkait dengan proses analisis statistik. Buku ini juga telah memberikan beberapa contoh kasus sederhana yang dapat memberikan sedikit wacana pemanfaatan alat pengolahan data statistik. Diharapkan setelah membaca buku ini, Anda dapat menggunakan perangkat lunak R ini sebagai alat bantu yang efisien dan efektif dalam melakukan analisis statistik, yang seperti kita ketahui juga tersedia di beberapa perangkat lunak pengolahan statistik yang berbayar. Kami sangat mengharapkan peran dan bantuan pembaca untuk ikut memperbaiki dan memperkaya apa yang sudah dijelaskan dalam buku ini bahkan fitur perangkat lunak R. Sehingga kontribusi komunitas open source (khususnya untuk aplikasi statistik) dapat meningkatkan kualitas perangkat lunak open source. Buku ini juga akan dilanjutkan untuk seri yang lebih advance, khususnya penggunaan fitur R untuk analisis statistik lanjut. Sehingga semua fitur dalam R sudah dapat digunakan untuk beragam keperluan analisis statistik yang lebih komprehensif lagi dan menjangkau semua keperluan dari analisis statistik sederhana hingga yang kompleks.
Terima kasih,
136