download

Pengenalan Bahasa R
I G.A. Anom Yudistira
E-mail: [email protected]
Websites
• SimpleR
www.math.csi.cuny.edu/Statistics/R/simpleR/Simple
– package, data, dan dokumen
• R www.r-project.org
– software;  cran.r-project.org
– dokumen;
– packages
– RNews.
Bahasa R: Selayang Pandang
• Open source dan open development.
• Merupakan sofware yang dirancangan dan
penyebarannya bersifat portable, extensible, dan
scalable.
• Interoperability dengan bahasa lain: C, XML, FORTRAN.
• Disediakan untuk berbagai metode statistik dan numerik.
• Memiliki tools graphics dan visualisasi dengan kualitas
tinggi.
• Memiliki user interface yang efektif, dan extensible
• Didukung dengan creation, testing, dan distribusi
software dan data modul: packages.  gratis
Pemrograman Berorientasi Objek
(OOP)
Class
• abstraksi software
mengenai objek
dalam dunia nyata.
• refleksi dari
bagaimana kita
memandang objek
dan informasi apa
yang dikandungnya.
Method
• fungsi melakukan aksi
terhadap data (objects).
• aksi fungsi tergantung
pada class dari argumenargumennya.
• sebuah fungsi generic
dapat segera digunakan.
R antarmuka pengguna
• Pemrosesan baris perintah (command line processing)
Klik R
> q()
mulai
keluar; quit
• Graphik windows
> X11() atau > window()
> postscript()
> dev.off()
• File path terhadap working directory
> getwd()
> setwd()
• meload a package library dengan library()
• GUIs, tcltk
Memperoleh Bantuan (Help)
o Detail tentang perintah spesifik yang namanya
anda ketahui:
> ? t.test
> help(t.test)
o Teladan penggunaan:
> demo(graphics)
> example(mean)
mean> x <- c(0:10, 50)
mean> xm <- mean(x)
mean> c(xm, mean(x, trim = 0.1))
[1] 8.75 5.50
Memperoleh Bantuan (Help)
o Mesin pencari HTML membantu anda mencari
topik tertentu:
> help.search(“mean”)
o Mencari perintah yang mengandung ekspresi atau
nama objek tertentu:
> apropos("var")
[1] "var.na"
".__M__varLabels:Biobase"
[3] "varLabels"
"var.test"
[5] "varimax"
"all.vars"
[7] "var"
"variable.names"
[9] "variable.names.default" "variable.names.lm"
Memperoleh Bantuan (Help)
o Melihat code suatu fungsi, ketik nama
fungsi tanpa parentheses/() or
arguments:
> plot
R sebagai Calculator
> log2(32)
[1] 5
> print(sqrt(2))
[1] 1.414214
> pi
[1] 3.141593
> seq(0, 5, length=6)
[1] 0 1 2 3 4 5
> 1+1:10
[1] 2 3
4
5
6
7
8
9 10 11
R sebagai alat pembuat Graphics
0.5
0.0
-0.5
-1.0
sin(seq(0, 2 * pi, length = 100))
1.0
> plot(sin(seq(0, 2*pi, length=100)))
0
20
40
60
Index
80
100
Variabel
> a <- 49
> sqrt(a)
[1] 7
numeric
> b <- "Saya sedang belajar R"
character
> sub("Saya","Kamu",b)
string
[1] "Kamu sedang belajar R"
> c <- (1+1==3)
> c
[1] FALSE
> is.character(c)
[1] "FALSE"
logical
Missing Values
Peubah setiap tipe data (numeric, character, logical) dapat mempunyai
nilai NA: not available.
o NA tidak sama dengan 0
o NA tidak sama dengan “”
o NA tidak sama dengan FALSE
o NA tidak sama dengan NULL
Opersi-operasi yang melibatkan NA bisa saja menghasilkan NA atau
tidak:
> NA==1
[1] NA
> 1+NA
[1] NA
> max(c(NA, 4, 7))
[1] NA
> max(c(NA, 4, 7), na.rm=T)
[1] 7
> NA | TRUE
[1] TRUE
> NA & TRUE
[1] NA
Vektor
vektor: suatu kumpulan data terurut dengan
tipe sama
> a <- c(1,2,3)
> a*2
[1] 2 4 6
Teladan: Nilai UTS statistik dan probabilitas
kelas 02PBT adalah sebuah vektor numeric
Pada R, sebuah vektor bisa saja hanya memilki
sebuah nilai tunggal.
Tipe-tipe vektor lain: character strings, logical
Matriks dan Array
matrix: table data berbentuk segi empat
dengan tipe sama
Teladan:
> mat <- matrix(1:10, nrow=5, ncol=2)
array: 3-,4-,.. matrix dimensional
Teladan: nilai-nilai foreground and background
merah dan hijau untuk 20000 spots pada 120
arrays adalah array 4 x 20000 x 120 (3D).
Himpunan (list)
list: kumpulan data terurut dari sembarang tipe.
Teladan:
> doe <- list(name="john",age=28,married=F)
> doe$name
[1] "john“
> doe$age
[1] 28
> doe[[3]]
[1] FALSE
Elemen-elemen vektor diakses dengan nilai
indexnya (integer) sedangkan elemen-elemen
list oleh $nama (suatu character string).
Data Frame
data frame: tabel segiempat dengan baris-baris dan kolomkolom; data didalam setiap kolom harus bertipe sama (mis.
angka, text, logikal), tetapi kolom berbeda bisa saja bertipe
tidak sama.
Teladan:
> a <data.frame(localization,tumorsize,progress,row
.names=patients)
> a
localization tumorsize progress
XX348
proximal
6.3
FALSE
XX234
distal
8.0
TRUE
XX987
proximal
10.0
FALSE
Apa tipe data saya?
class
Class from which object inherits
(vector, matrix, function, logical, list, … )
mode
Numeric, character, logical, …
storage.mode Mode used by R to store object
typeof
is.function
is.na
names
dimnames
attributes
(double, integer, character, logical, …)
Logical (TRUE if function)
Logical (TRUE if missing)
Names associated with object
Names for each dim of array
Names, class, etc.
Subsetting
Elemen-elemen individual sebuah vektor, matriks, array or data
frame diakses dengan “[ ]” dengan menentukan nilai indeksnya,
atau namanya
> a
localization tumorsize progress
XX348
proximal
6.3
0
XX234
distal
8.0
1
XX987
proximal
10.0
0
> a[3, 2]
[1] 10
> a["XX987", "tumorsize"]
[1] 10
> a["XX987",]
localization tumorsize progress
XX987
proximal
10
0
Teladan:
subset barisbaris dengan
vektor indeks
subset barisbaris dg. Vektor
logikal
subset kolomkolom
Hasil pembandingan
dalam vektor logikal
subset barisbaris yang
dipilih
>a
localization tumorsize progress
XX348
proximal
6.3
0
XX234
distal
8.0
1
XX987
proximal
10.0
0
> a[c(1,3),]
localization tumorsize progress
XX348
proximal
6.3
0
XX987
proximal
10.0
0
> a[-c(1,2),]
localization tumorsize progress
XX987
proximal
10.0
0
> a[c(T,F,T),]
localization tumorsize progress
XX348
proximal
6.3
0
XX987
proximal
10.0
0
> a$localization
[1] "proximal" "distal"
"proximal"
> a$localization=="proximal"
[1] TRUE FALSE TRUE
> a[ a$localization=="proximal", ]
localization tumorsize progress
XX348
proximal
6.3
0
XX987
proximal
10.0
0
Fungsi dan Operator
Fungsi melakukan sesuatu terhadap data
“Input”: argumen-argumen fungsi (0,1,2,…)
“Output”: hasil fungsi
Teladan:
add <- function(a,b) {
result <- a+b
return(result)
}
Operator: Penulisan cepat untuk fungsi-fungsi
yang sering digunakan dengan satu atau dua
argument.
Operator-operator yang sering
digunakan
<+
*
/
^
%%
%*%
%/%
%in%
Assign
Sum
Difference
Multiplication
Division
Exponent
Mod
Dot product
Integer division
Subset
|
&
<
>
<=
>=
!
!=
==
Or
And
Less
Greater
Less or =
Greater or =
Not
Not equal
Is equal
Fungsi-fungsi yang sering
digunakan
c
Concatenate
cbind,
rbind
min
max
length
dim
floor
which
table
Concatenate
vectors
Minimum
Maximum
# values
# rows, cols
Max integer in
TRUE indices
Counts
summary
Sort,
order,
rank
print
cat
paste
round
apply
Generic stats
Sort, order,
rank a vector
Show value
Print as char
c() as char
Round
Repeat over
rows, cols
Fungsi-fungsi Statistik
rnorm, dnorm,
pnorm, qnorm
Normal distribution random sample,
density, cdf and quantiles
lm, glm, anova
Model fitting
loess, lowess
Smooth curve fitting
sample
Resampling (bootstrap, permutation)
.Random.seed
Random number generation
mean, median
Location statistics
var, cor, cov,
mad, range
Scale statistics
svd, qr, chol,
eigen
Linear algebra
Fungsi-fungsi Grafik
plot
Generic plot eg: scatter
points
Add points
lines, abline
Add lines
text, mtext
Add text
legend
Add a legend
axis
Add axes
box
Add box around all axes
par
Plotting parameters (lots!)
colors, palette Use colors
Percabangan
if (logical expression) {
statements
}
else {
alternative statements
}
else branch is optional
{ } are optional with one statement
ifelse (logical expression, yes
statement, no statement)
Loops
Bila perintah yang sama diperlukan beberapa
kali; untuk semua elemen dalam sebuah list;
semua kolom dalam sebuah array; dsb.
for(i in 1:10) {
print(i*i)
}
i<-1
while(i<=10) {
print(i*i)
i<-i+sqrt(i)
}
Lihat juga: repeat, break, next
Expressi Regular
Perintah untuk pencocokan text dan replacement yang juga tersedia
dalam bentuk yang sama dengan kebanyakan bahasa pemrograman
(Perl, Unix shells, Java)
> a <- c("CENP-F","Ly-9", "MLN50", "ZNF191", "CLH-17")
> grep("L", a)
[1] 2 3 5
> grep("L", a, value=T)
[1] "Ly-9"
"MLN50" "CLH-17"
> grep("^L", a, value=T)
[1] "Ly-9"
> grep("[0-9]", a, value=T)
[1] "Ly-9"
"MLN50" "ZNF191" "CLH-17"
> gsub("[0-9]", "X", a)
[1] "CENP-F" "Ly-X"
"MLNXX"
"ZNFXXX" "CLH-XX"
Menyimpan Data
Setiap objek R dapat disimpan dan dipanggil
kembali dari sebuah file dengan menggunakan
perintah:
“save” and “load”.
Menggunkan standard XDR (external data
representation) dari Sun Microsystems dan
mempunyai keseuaian terhadap MS-Windows,
Unix, Mac.
> save(x, file=“x.Rdata”)
> load(“x.Rdata”)
Importing dan Exporting Data
Ada banyak cara untuk mengambil dan
mengirim data.
Kebanyakan program (seperti Excel), disimpan
dalam bentuk tabel segiempat berbentuk tabdelimited text files.
> x <- read.delim(“filename.txt”)
Lihat juga: read.table, read.csv, scan
> write.table(x, file=“x.txt”, sep=“\t”)
Lihat juga: write.matrix, write
Importing dan Exporting Data
• Mengambil data dari format minitab, SAS,
STATA dapat dilakukan dengan
menggunakan package foreign
> library(foreign)
> read.mtp(“file.mtp”) # format
minitab
Simulasi
• Teorema Limit Pusat
> n<-10; p<-.25; S<-rbinom(100,n,p)
> X<-(S-n*p)/sqrt(n*p*(1-p)) # ada 100 angka
acak
> hist(X,prob=TRUE)
> xval=seq(-3,3,.01)
> points(xval,dnorm(xval),type="l")
0.4
0.2
0.0
Density
0.6
Histogram of X
-2
-1
0
1
X
2
3
Simulasi
• 200 sampel diambil dari populasi N(10,5)
masing-masing berukutan 100
samp<-numeric(0)
mu<-10;sigma<-5
for (i in 1:200) {
x<-rnorm(100,mu,sigma) # bangkikan 100 data
samp[i]<-(mean(x)-mu)/(sigma/sqrt(100))
}
hist(samp,prob=T,col=gray(0.85))
xval=seq(-3,3,.01)
points(xval,dnorm(xval),type="l")
0.0
0.1
0.2
0.3
Histogram of samp
Density
>
>
>
+
+
+
>
>
>
-4
-3
-2
-1
0
samp
1
2
3
QQ-Plot
• Plot quantil-quantil adalah plot yang lebih
baik digunakan untuk memutuskan apakah
suatu data acak teraproksimasi normal
par(mfrow=c(1,4))
x<-rnorm(100);qqnorm(x,main="normal(0,1)"); qqline(x)
x<-rnorm(100,10,15);qqnorm(x,main="normal(10,15)")
qqline(x)
x<-rexp(100,1/10);qqnorm(x,main="exponensial mu=10")
qqline(x)
x<-runif(100);qqnorm(x,main="uniform(0,1)"); qqline(x)
norma l(10,15)
e x pone nsia l mu=10
uniform(0,1)
0.6
Sample Quantiles
0.4
20
Sample Quantiles
20
10
Sample Quantiles
0
0
-20
-10
0.2
10
-1
-2
0
2
Theoretical Quantiles
-2
0
2
Theoretical Quantiles
0.0
0
Sample Quantiles
30
1
30
0.8
40
40
2
1.0
norma l(0,1)
-2
>
>
>
>
>
>
>
-2
0
2
Theoretical Quantiles
-2
0
2
Theoretical Quantiles
Statistik Inferensia
> library(Devore6) # panggil package
Devore6
> xmp07.06 # lihat datanya
> names(xmp07.06) # apa saja variabelnya
> with(xmp07.06,mean(Voltage)+
+
c(1,-1)*qnorm(0.025)*
+ sd(Voltage)/sqrt(length(Voltage)))
[1] 53.22859 56.18807
Statistik Inferensia
• Uji t
> with(xmp07.06,t.test(Voltage))
One Sample t-test
data: Voltage
t = 72.4631, df = 47, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
53.18950 56.22716
sample estimates:
mean of x
54.70833
Statistik Inferensia
• Selang kepercayaan untuk ragam
> with(xmp07.15,(length(voltage)-1)*
+
var(voltage)/qchisq(c(0.975,0.025),
+
df=length(voltage)-1))
[1] 76171.31 318079.76
> with(xmp08.08,t.test(DCP,mu=30,alt="less"))
One Sample t-test
data: DCP
t = -0.7282, df = 51, p-value = 0.2349
alternative hypothesis: true mean is less than 30
95 percent confidence interval:
-Inf 31.61088
sample estimates:
mean of x
28.76154