Introduction t R: R in the library Dasapta Erwin Irawan
26/05/2015
Pendahuluan
Siapa saya?
I
Dosen KK Geologi Terapan, FITB, ITB
I
Mengajar di: Prodi S1 Teknik Geologi dan S2 Teknik Air Tanah
I
Media sosial: @dasaptaerwin, +Dasapta Erwin Irawan
Lisensi dokumen
Dengan menyebutkan penulis dan dokumen ini dalam Daftar Pustaka, anda boleh: memperbanyak, menyebarkan, memodifikasi sebagian atau seluruh dokumen ini, untuk kegiatan non-komersial.
Sumber
Beberapa bagian dari paparan ini diadaptasi dari: I
Slide Coursera RD.Peng: R.D. Peng on Github
I
Slide Coursera Data Specialization oleh J.T. Leek: Data Specialization
I
Slide tutorial Kevin Markham: Kevin Markham on Github
I
Website Quick R Tutorial
I
Website R Introduction to Statistics
I
Website saya R from Dummies
I
dll
Data
I
Data yang disertakan dalam tutorial ini adalah BandungData.csv.
I
Berisi data kualitas air (major element) air S. Cikapundung dan air tanah di bantaran sungainya.
Apakah R?
Apakah R?
I
Alfabet ke-18
Apakah R?
I
R adalah bahasa pemrograman (statistik) yang dikembangkan dari Bahasa S.
I
S ditulis pada tahun 1976 (saya lahir) oleh John Chambers dkk di Bell Labs.
I
S awalnya ditulis sebagai library statistik Bahasa Fortran.
I
S pada tahun 1988 mulai ditulis ulang dengan Bahasa C++, hingga kemudian menjadi R yang kita kenal sekarang.
Mengapa R?
I
Free dan Lightweight: free as breathing yang diperlukan hanya koneksi internet, ukuran installer R base < 70 MB, R Studio < 60 MB. (Bandingkan dengan SPSS, Matlab) (Bandingkan dengan SPSS, Matlab)
I
Cross platform: R tersedia untuk Linux, Mac, dan (tentunya) Windows. (Sebagian besar Windows only)
I
Peran komunitas open source: sangat aktif, mailing lists, R Stack Overflow, Youtube, dll.
Mengapa R cocok untuk engineer?
I
Reproducibility: semua yang ditulis dengan R bisa diulang oleh orang lain untuk diperbaiki dan dikembangkan. Karena basisnya open source, maka semangat saling berbagi diantara pemakai R sangat tinggi.
I
Terstruktur: basis command line, memang sulit pada awalnya, tapi membuat analisis lebih terstruktur, tiap langkah dapat didokumentasikan dengan memberi komentar dll.
I
Visualisasi: R dapat menghasilkan grafis yang sangat bagus dan plot yang fully-customizeable. Banyak output grafik yang tidak dapat dibuat dengan piranti lunak spreadsheet konvensional.
Mengapa R cocok untuk non-programmer?
I
Mudah: sudah banyak tutorial dilengkapi codenya di internet, tinggal mengetik how to .... in R.
I
Sederhana: syntax penulisan kode sederhana, berbasis obyek.
I
Pengembangan intensif: R dapat dikembangkan melalui > 4000 R packages, bahkan untuk web-authoring, web-scraping, analisis spasial, dll.
Memulai R
Karakter R
I
case sensitive
I
command line
I
what you mean is what you get
Karakter R 2
I
R base telah memiliki perbendaharaan fungsi yang sangat kaya
I
Beberapa package juga telah dimasukkan ke dalam R base
I
Pengembangan package tujuannya untuk:
I
memudahkan dan menyingkat kode, misal: dari 10 baris menjadi tiga baris saja
I
meningkatkan kualitas grafis
Karakter R 3
Jadi jangan heran kalau anda telah fasih menjalankan satu proses, kemudian dengan perkembangan baru, baris kode anda menjadi tidak optimal (terlalu panjang).
Komponen R
Sebelum ke tahap instalasi, kita kenali dulu komponen R yang terdiri dari: I
R base atau R core
I
R IDE
I
R packages
R base atau R core
I
Inti dari R, full functionality.
I
Jendela script, console, proses, dan output terpisah.
I
Unduh installer dari Server CRAN. Mirrors di Indonesia:
I
Mirror BPPT
I
Mirror Uni Jember
R IDE (Integrated Development Environment)
I
Ada R Studio atau R Commander.
I
Jendela script, console, proses, dan output menyatu.
I
Unduh installer dari Website RStudio
Jendela R base
Jendela R Studio
R packages
I
Pengembangan dari fungsi-fungsi R base dikemas sebagai R packages.
I
Saat ini ada lebih dari 4000 packages di sini yang telah terklasifikasi klik menu Task Views, diantaranya:
I
Spasial
I
Timeseries
I
Lingkungan
I
bahkan Medis
R packages 2
I
Beberapa packages yang sangat fungsional dari pengembang individu dapat dimasukkan ke dalam fungsi dasar R base versi berikutnya, misal: utils, stats, datasets, graphics, grDevices, grid, methods, tools, parallel, compiler, splines, tcltk, stats4.
R packages 3
I
Beberapa packages yang sering saya pakai, diantaranya: cluster, foreign, mgcv, rpart, spatial, dll.
I
Beberapa package yang dikembangkan oleh ahli biologi dan lingkungan, dapat diunduh dari Website Bioconductor Project
I
Atau dari individu langsung via repo Github. Perlu menginstalasi devtools package
R packages 4
Package harus diunduh dan diinstalasi terlebih dahulu dengan perintah: install.packages("packageName") Kemudian package harus dimuat ke memory dengan perintah: library(packageName) atau require(packageName)
Instalasi Sekarang mulailah “pekerjaan kotor kita”, yaitu menginstalasi R ke dalam PC atau laptop kita. Untuk itu coba perhatikan beberapa hal berikut ini: I
Spesifikasi komputer/laptop: Tidak ada spesifikasi khusus untuk R, tetapi prinsip utamanya adalah makin besar data yang anda gunakan, makin kompleks analisis yang anda lakukan, akan memerlukan spesifikasi prosesor dan RAM yang makin besar. Jadi ini akan sangat bergantung kepada kebutuhan anda. Untuk keperluan pembelajaran gunakan saja komputer yang anda miliki sekarang.
I
Sistem operasi (OS): Seperti yang telah saya sampaikan sebelumnya, R berjalan di semua OS: Linux (bisa Ubuntu, Fedora dll), Mac OS, dan tentunya Windows. Jangan kuatir, yang manapun OS yang anda pakai, spesifikasi R nya akan sama persis.
Instalasi 2
I
Apa saja yang perlu anda unduh dan install:
I
R base: Inti dari R.
I
Kunjungi Situs R Project
I
Pilih mirror server. Pilih server yang ada di Indonesia. Klik CRAN mirror di dalam kotak “Getting Started”. Cari server di Indonesia. Ada dua, silahkan anda pilih:
I
Server BPPT
I
Server Universitas Jember
I
Setelah server CRAN-BPPT terbuka, klik versi R sesuai dengan OS yang anda miliki.
Instalasi 3
I
R Studio: lingkungan pemrograman.
I
Kunjungi Situs R Studio
I
Klik menu Products > RStudio > klik tombol Download RStudio Desktop. Secara otomatis R Studio akan membaca OS yang anda pakai dan proses pengunduhan akan segera dimulai.
Instalasi 4 Atau anda bisa langsung buka halaman http://www.rstudio.com/products/rstudio/download/, Pilih versi RStudio. I
Pilihan installer yang ada per tanggal 04 September 2014 adalah:
I
RStudio 0.98.1049 - Windows XP/Vista/7/8 ukuran file 48.2 MB tanggal update 2014-09-02
I
RStudio 0.98.1049 - Mac OS X 10.6+ (64-bit) ukuran file 37.8 MB tanggal update 2014-09-02
I
RStudio 0.98.1049 - Debian 6+/Ubuntu 10.04+ (32-bit) ukuran file 56.3 MB tanggal update 2014-09-02
Instalasi 5
I
RStudio 0.98.1049 - Debian 6+/Ubuntu 10.04+ (64-bit) ukuran file 58 MB tanggal update 2014-09-02
I
RStudio 0.98.1049 - Fedora 13+/openSUSE 11.4+ (32-bit) ukuran file 56.6 MB tanggal update 2014-09-02
I
RStudio 0.98.1049 - Fedora 13+/openSUSE 11.4+ (64-bit) ukuran file 57.9 MB tanggal update 2014-09-02
Instalasi 6
Setelah proses pengunduhan selesai, jalankan file program instalasinya: I
Untuk Linux: jalankan file xRstudioxx.deb dan ikuti perintahnya
I
Untuk Mac OSX: jalankan file xRstudioxx.dmg dan ikuti perintahnya
I
Untuk Windows: jalankan file xRstudioxx.exe dan ikuti perintahnya
Bekerja dengan R
Format data
I
format database:
I
kasus/sampel dalam baris
I
variable/parameter/pengukuran dalam kolom
I
tanpa judul tabel dan aksesori lainnya
Format data 2
I
dulu data harus format text/ASCII bukan binary (xls, xlsx, dll), misal:
I
txt
I
csv (comma separated values)
I
dengan fungsi dasar R
Format data 3
I
sekarang dengan fungsi dari package tambahan, seperti foreign, read.table, readxl, R dapat meng-import berbagai format file text maupun binary, misal:
I
xls, xlsx (Ms Office)
I
sav (SPPS)
I
dta (Stata)
I
odt (LibreOffice)
Format data 4
Memuat data ke dalam R
data <- read.csv("BandungData.csv", header = TRUE) attach(data) ## The following object is masked from package:datasets: ## ## CO2
Dimensi data
dim(data) ## [1] 295
34
Jenis data str(data)
## 'data.frame': 295 obs. of 34 variables: ## $ no : int 16 22 263 17 12 18 13 19 14 20 ... ## $ code : int 116 122 8 117 112 118 113 119 114 120 . ## $ year : int 1997 1997 1997 1997 1997 1997 1997 1997 ## $ type : Factor w/ 2 levels "groundwater",..: 1 1 2 1 ## $ x : num 785175 785168 799275 785175 785181 ... ## $ y : num 10752836 10752843 10753680 10752840 107 ## $ distx : num 6897 6904 0 6897 6891 ... ## $ elv : int 1338 1336 1336 1320 1300 1247 1240 1230 ## $ aq : Factor w/ 3 levels "breccias","clay",..: 3 3 ## $ zone : Factor w/ 2 levels "eff","inf": 1 1 1 1 1 1 ## $ ec : num 71.9 71.9 77 71.9 71.9 71.9 71.9 71.9 7 ## $ ph : num 6.89 6.89 6.39 6.89 6.89 ... ## $ hard : num 11 11 26.4 11 11 11 11 11 11 11 ... ## $ tds : num 58.7 58.7 50 58.7 58.7 ... ## $ temp : num 21 21 16.1 21 21 ...
Beberapa contoh visualisasi dan analisis dengan fungsi dasar R
Scatter plot plot(tds, temp, xlab = "tds (ppm)", ylab = "temp (^oC)", bg = "lightblue", col = "black", cex = 1.1, pch = 21, frame = FALSE) abline(lm(tds~temp), col="red") # regression line (y~x) lines(lowess(tds,temp), col="blue") # lowess line (x,y) Note: semua yang diketik di belakang simbol # tidak dieksekusi oleh R, disebut comment. Biasa digunakan untuk memberi penjelasan baris atau kelompok baris kode.
30 25 15
20
temp (C)
35
Scatter plot 2
0
200
400
600
800
tds (ppm)
Mengapa garis regresi tidak diagonal?
1000
1200
Histogram hist(tds, col="red")
60 40 20 0
Frequency
80
Histogram of tds
0
200
400
600 tds
800
1000
1200
Multiple Histogram 2 par(mfrow=c(1,3)) hist(tds, col="red") hist(ph, col="green") hist(hard, col="blue") Histogram of ph
150 50
100
60 40
Frequency
Frequency
80
80 60 40 0
400 tds
1000
0
0
20
20 0
Frequency
Histogram of hard
100
Histogram of tds
5
6
7 ph
8
9
0
40 hard
80
Multiple Histogram 3 par(mfrow=c(2,2)) hist(tds, col="cyan") hist(ph, col="magenta") hist(hard, col="yellow") hist(eh, col="blue")
600
0 60
1000
5
6
7
8
ph
Histogram of hard
Histogram of eh
0
80
tds
Frequency
0
150
0 200
Frequency
Histogram of ph Frequency
60 0
Frequency
Histogram of tds
9
Analisis regresi
Berikut contoh perintah untuk mengetahui koef dan intercept persamaan regresi. fit <- lm(tds ~ temp, data = data) coef(fit)
Analisis regresi 2
fit <- lm(data$tds ~ data$temp, data = data) coef(fit) ## (Intercept) ## -650.96402
data$temp 37.93123
Pairs analysis Untuk memvisualisasikan matriks korelasi. group1 <- data[,c("x", "y", "elv", "aq", "ec", "ph", "hard", "tds", "temp", "eh", "Q")] pairs(group1,labels=colnames(group1), main="Physical parameter", pch=21, bg=c("red", "blue") [unclass(data$type)], upper.panel=NULL) legend(x=0.6, y=0.8, levels(data$type), pt.bg=c("red", blue"), pch=21, bty="n", ncol=2, horiz=F)
Pairs analysis 2 Physical parameter
1000
700
900
1100
1300
700
elv
8
groundwater
river
80
5
6
7
ph
1000
0
40
hard
35
0
400
tds
8
8
15
25
temp
4 0
0
4
Q 700
900
1100
1300
5
6
7
8
0
20
40
60
80
0
400
800
1200 15
20
25
30
35
0
2
4
6
8
10
Multiple linear regression
Misal: I
Apakah tds merupakan fungsi linear dari unsur Ca, Mg, dan Fe?
I
atau tds adalah fungsi dari unsur HCO3, CO3, SO4, Cl?
Multiple linear regression 2 fit <- lm(tds ~ Ca + Mg + Fe, data=data) summary(fit) ## ## ## ## ## ## ## ## ## ## ## ## ## ##
Call: lm(formula = tds ~ Ca + Mg + Fe, data = data) Residuals: Min 1Q -352.11 -57.96
Median -29.36
3Q 36.98
Max 835.27
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 77.7128 12.3875 6.273 1.28e-09 *** Ca 2.8913 0.4657 6.209 1.84e-09 *** Mg 11.2824 1.2024 9.384 < 2e-16 *** Fe -43.5776 33.5691 -1.298 0.195
Multiple linear regression 3 fit2 <- lm(tds ~ HCO3 + CO3 + SO4 + Cl, data=data) summary(fit2) ## ## ## ## ## ## ## ## ## ## ## ## ## ##
Call: lm(formula = tds ~ HCO3 + CO3 + SO4 + Cl, data = data) Residuals: Min 1Q -369.64 -37.61
Median -23.53
3Q 24.36
Max 688.83
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 55.08578 10.67173 5.162 4.55e-07 *** HCO3 0.77447 0.06993 11.075 < 2e-16 *** CO3 1.13775 0.73530 1.547 0.123 SO4 1.47805 0.25607 5.772 2.01e-08 ***
Multiple linear regression 4
anova(fit, fit2) ## ## ## ## ## ## ## ## ##
Analysis of Variance Table
Model 1: tds ~ Ca + Mg + Fe Model 2: tds ~ HCO3 + CO3 + SO4 + Cl Res.Df RSS Df Sum of Sq F Pr(>F) 1 291 4246450 2 290 2778559 1 1467891 153.2 < 2.2e-16 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1
PCA
# Prepare Data mydata <- data[,c("elv", "ph", "hard", "tds", "temp", "Q")] mydata <- na.omit(mydata) # listwise deletion of missing mydata <- scale(mydata) # run PCA fit <- princomp(mydata, cor=TRUE)
PCA 2
summary(fit) # print variance accounted for ## ## ## ## ## ## ## ## ##
Importance of components:
Comp.1 Comp.2 Comp.3 Standard deviation 1.3597606 1.1297573 0.9700609 0.8 Proportion of Variance 0.3081582 0.2127253 0.1568364 0.1 Cumulative Proportion 0.3081582 0.5208834 0.6777198 0.8 Comp.6 Standard deviation 0.66931040 Proportion of Variance 0.07466273 Cumulative Proportion 1.00000000
PCA 3 loadings(fit) # pc loadings ## ## ## ## ## ## ## ## ## ## ## ## ## ##
Loadings: Comp.1 elv 0.488 ph -0.111 hard 0.250 tds -0.605 temp -0.561 Q
Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 -0.133 0.800 0.132 -0.294 0.687 0.709 0.368 -0.791 -0.395 0.141 -0.206 0.130 -0.153 -0.737 -0.101 0.558 -0.111 0.589 -0.598 -0.568 -0.159 0.537
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 SS loadings 1.000 1.000 1.000 1.000 1.000 1.000 Proportion Var 0.167 0.167 0.167 0.167 0.167 0.167 Cumulative Var 0.167 0.333 0.500 0.667 0.833 1.000
PCA 4 plot(fit,type="lines") # scree plot
1.2 1.0 0.8 0.6 0.4
Variances
1.4
1.6
1.8
fit
Comp.1
Comp.2
Comp.3
Comp.4
Comp.5
Comp.6
PCA 5 fit$scores # the principal components ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
1 2 4 5 6 7 8 9 10 11 12 13 14 16
Comp.1 Comp.2 2.555170709 4.137174e-01 2.550748586 4.149192e-01 2.515371607 4.245332e-01 2.471150383 4.365508e-01 2.353964139 4.683973e-01 2.338486711 4.726035e-01 2.316376099 4.786123e-01 2.311953977 4.798140e-01 2.305320793 4.816167e-01 2.250044263 4.966386e-01 2.227933651 5.026474e-01 1.867410026 -2.616254e-01 1.645181935 -7.239144e-01 1.105647572 -1.059011e+00
Comp.3 -0.401835894 -0.401556057 -0.399317361 -0.396518992 -0.389103312 -0.388123883 -0.386724698 -0.386444861 -0.386025106 -0.382527144 -0.381127959 -0.089218290 1.219284576 1.265951112
Comp.4 0.692409628 0.685160307 0.627165736 0.554672522 0.362565505 0.337192881 0.300946274 0.293696952 0.282822970 0.192206453 0.155959846 0.321085216 0.021630346 0.539519751
PCA 6 biplot(fit) −10
0.2
−15
−5
0
5
10
ph 10
104
167110 111
112 108 hard 100 157 82 89154 145 275 109 282 276 229 168 40 176 46 162 283 122 106 113 165 164 169 117 170 156 160 69 174 274 182 175 50 151 234 213 231 226 36 278 221 149 96 95 94 93 212 209 219 34 163 204 158 140 141 79 155 126 196 136 195 77132 280 292 49 223 137 161 190 186 73 130 12 129 11 128 10 68 9 67 87 127 184 70 65 660 tds 64 139 542 123 181 47 120 119 1 285 152 224 43 210 33 287 51 198 250 238 81 205 289 259 273 171 230 105 30159 45 235 211 247 52 237 293 264271 218 269 203 86 146 53 153 288 125 277 23 38 254 115 263248 233 200 134 193 270 245 13 71 35 98 183 266 21 268 102 28 44 262 244 290 63 253 131 99 temp 66 87 144 27 215 255 187 214 91 199227 31 216 80 18 243 258 240 189 97 286 32 191 14 257 57 252 197 20 124 222 103 92 241 41 56 78 150 135 178 22 228 207 272 26 256 267 281 279294 54 16 188 249 72 58 179 61 246 172 85 138 19 220 185 217 42 148 90 17 75 39 208
5 0 −5
elv
−10
−0.1
Comp.2
0.0
0.1
116
76
−0.3
−15
−0.2
Q
242 −0.3
−0.2
101 37
194
−0.1
0.0 Comp.1
0.1
0.2
Cluster analysis
# Ward Hierarchical Clustering d <- dist(as.matrix(mydata), method="euclidean") # distance fit <- hclust(d, method="complete", members=NULL)
2
242 37194 101 286 289 288 270 287 2 57 279 281 278 282 283 292 293 46116 213 162 164 112 110 111 151 145 40 229 100 154 109 157 167 89 165 82 108 117 170 168 174 175 155 156 160 275 276 113 106 176 171 269 44 35 98 274 163 36 34 219 230 30 105 50 49 223 285 51 205 161 169 259 280 268 256 272 255 258 262 266 290 294 273 264 277 263 271 231 234 226 221 209 212 96 95 93 94 79 196 195 77 136 204 140 141 153 159 81 33 210 38 200 139 198 149 47 158 54 56 203 28 102 148 220 285 6 228 19 138 78 135 20 197 32 216 41 103 215 9222 222 57 31 91 214 115 152 58 233 52 218 199 27 87 21 23 146 99 150 97 207 125 248 122 137 17 75 72 188 63 124 14178 191 16 61 179 71 183 66 131 64 70 190 126 186 185 252 187 189 246 249 245 247 69 182 13 134 193 5 123 4 181 119 1 60 2 120 10 128 8 67 127 9 68 6 65 7 184 73 132 11 129 12250 130 243 253 254 237 241 238 240 244 172 76 39 208 90 42 217 18 8086 144 227 53 43 224 235 45 211
0
4
6
267
Height 8 104
10
12
Cluster analysis 2 plot(fit) # display dendogram Cluster Dendrogram
d hclust (*, "complete")
Coba tweak grafik ini agar id sampel terbaca.
Penutup
Workshop selanjutnya
I
tematik: basic stats, multivariate stats, plotting, exploratory data analysis
I
sharing session dari pengguna: kasus, data, kode
Slide dan kode
I
Slide:
I
format pdf tersedia di SlideShare
I
format ioslide tersedia di Rpubs
I
Kode: tersedia di Github
Media sosial
I
Facebook Group Indonesia R User
I
Me on Twitter: @dasaptaerwin
I
Me on G+: +Dasapta Erwin Irawan
I
Me on ResearchGate: www.researchgate.net/profile/dasapta_irawan
I
I used Ubuntu 14.04 and R Markdown
Terimakasih