Selain untuk analisis statistika secara formal, Software R menyediakan kemampuan yang kaya untuk visualisasi grafik. Tersedia dua sistem grafik dalam R, yaitu : sistem base (terdapat dalam package graphics, yang dipanggil secara default ketika memulai R) dan sistem trellis (tersedia dalam package lattice). Selain itu, terdapat berbagai package tambahan yang memperkaya kemampuan grafik R, seperti: misc3d (berbagai plot 3 dimensi), rgl (sistem device untuk visualisasi grafik 3 dimensi), scatter plot 3d (scatter plot 3 dimensi) dan beberapa package lain seperti grid, dan ggplot2. Selanjutnya akan dijelaskan beberapa fungsi-fungsi pada package graphics yang merupakan base dari grafik. Perintah dasar grafik pada package ini adalah plot.
Perintah grafik dasar adalah fungsi plot().
Syntax untuk menjalankan
plot():plot(x, y, ...).
Terdapat pilihan type yang digunakan untuk bentuk grafik:
type="p" –> titik (default)type="l" –> garistype="b" –> keduanya (garis dan titik)type="o" –> keduanya (garis dan titik) overlaidtype="n" –> nothingtype="s" –> tangga, segmen pertama horisontaltype="S" –> tangga, segmen pertama vertikaltype="h" –> garis vertikal dari sumbu-x ke titikIlustrasi:
x <-1:40
x
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
y <-rnorm(40,5,1)
y
## [1] 4.515582 4.829773 4.410271 3.083025 4.488169 6.900687 5.173453 4.549250
## [9] 4.886048 3.550378 6.513648 6.710789 5.288195 6.113235 5.938161 2.082367
## [17] 5.726405 5.125874 3.830109 5.208625 5.002412 5.950970 3.720925 6.132318
## [25] 4.607163 5.580988 3.997317 4.173671 6.805655 6.243409 4.632764 4.876963
## [33] 4.409953 3.308927 4.644746 3.896722 6.924388 3.836720 3.770497 4.566822
plot(x,y,type="p")
Membuat plot dengan type plot titik dari variabel x yang berisi nilai 1 sampai 10 dan variabel y yang berisi 40 bilangan dari pembangkitan bilangan acak normal dengan mean 5, dan simpangan baku 1.
plot(x,y,type="o")
Dengan nilai x dan y yang sama, dibuat plot dengan type garis dan titik overlaid.
plot(x,y,type="n")
Syntax di atas membuat plot dengan type nothing.
pch: plotting character, yaitu simbol untuk titik.cex: ukuran/size dari pch. Jika cex < 1 akan menjadikan simbol lebih kecil dan jika cex > 1 menjadikan simbol menjadi lebih besar.lty: tipe garis (1=solid, 2=small breaks , dll).lwd: lebar garis, semakin besar angka garisnya semakin tebalmain: label pada judul utama paling atassub : label pada sub judul paling bawahxlab: label sumbu xylab: label sumbu yBisa dilakukan dengan beberapa cara, diantaranya:
col=4col="red". Daftar warna dapat dilihat dengan menjalankan fungsi colors()rgb(), rainbow(), dll."colorspace", "colourpicker", "RColorBrewer“bg: warna lataraxes : boolean apakah sumbu axis pada sumbu x dan y digambarkan.xlim dan ylim : membatasi sumbu dengan batas nilai dari xlim atau ylim.las: orientasi nama sumbu.mar: ukuran margin.oma: ukuran margin luar.Fungsi
plot()akan menghapus grafik yang ada dan diganti dengan yang baru.
Berikut beberapa fungsi yang dapat digunakan apabila hendak menambahkan sesuatu pada grafik yang sudah ada: * points(x,y) : menambah tipe poin karakter * lines(x,y) : menambah tipe garis * abline (a,b), abline(h=y), abline(v=x) : menambahkan garis lurus berdasarkan: fungsi y=a+bx, horisontal, dan vertikal * segments(x1,y1,x2,y2) : menambahkan garis lurus dari titik (x1,y1) ke (x2,y2) * arrows(x1,y1,x2,y2) : menambahkan garis dan panah dari titik (x1,y1) ke (x2,y2) * poligons(x,y) : membuat poligon * text(x,y,teks) : menuliskan teks pada koordinat (x,y) * mtext : menuliskan label pada judul dan garis sumbu
Ilustrasi 1
plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=2,pch=16)
Dengan nilai x dan y yang sama, dibuat plot dengan type titik. Untuk mempermudah pembacaan grafik ditambahkan fungsi xlab untuk memberi nama sumbu x dan ylab untuk memberi nama sumbu y. Adapun main digunakan untuk memberi judul grafik.
plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=rainbow(40),
pch=16,cex=2,xlim=c(0,50),ylim=c(2.5,7.5))
Dalam ilustrasi ini digunakan rainbow (warna pelangi) untuk mewarnai plot dengan ukuran plot yang besar dimana plot ini memiliki sumbu x dengan batas nilai 0 sampai 50 dan sumbu y dengan batas nilai 2.5 sampai 7.5.
Ilustrasi 2
plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=rainbow(40),
pch=16,cex=2,xlim=c(0,50),ylim=c(2.5,7.5))
#Menambahkan Amatan
x1 <-41:50
y1 <-rnorm(10,5,1)
points(x1, y1, cex=2)
Dapat dilihat dari output di atas,
points digunakan untuk menambah amatan pada plot. Fungsi ini dapat digunakan bila sebelumnya plot yang telah ada dipanggil terlebih dahulu. Tambahan amatan dengan x dan y yang telah didefinisikan dapat dilihat berupa plot yang tanpa warna.
Ilustrasi 3
#menambahkan garis
plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=rainbow(40),
pch=16,cex=2,xlim=c(0,50),ylim=c(2.5,7.5))
x2 <-rep(40.5,20)
y2 <-seq(min(c(y,y1)),max(c(y,y1)),length=20)
lines(x2,y2,col=4,lwd=2,lty=2)
abline(h=mean(y),col="red",lwd=2.5)
abline(a=2,b=1/10,col="maroon3",lwd=2,lty=2)
Fungsi lines(x2,y2,col=4,lwd=2,lty=2) menambahkan garis pada grafik dengan koordinat vektor point yang digabungkan berdasarkan nilai pada variabel x2 dan y2 dengan tipe garis small breaks dan col 4 memberi warna biru pada garis.
Fungsi abline(h=mean(y),col="red",lwd=2.5) digunakan untuk menambahkan garis pada grafik dengan parameter h yang menandakan garis dengan nilai y untuk garis horizontal dimana nilai y didefinisikan dengan rata-rata variabel y. Warna garis merah dan ketebalan garis 2.5. lwd tidak disebutkan sehingga secara default tipe garis adalah garis lurus.
Fungsi abline(a=2,b=1/10,col="maroon3",lwd=2,lty=2) digunakan untuk menambahkan garis lurus pada grafik berdasarkan fungsi y=a+bx dengan a =2 dan b=1/10, garis berwarna maroon3, tipe small breaks (putus-putus) dan ketebalan 2.
Ilustrasi 4
#menambahkan tanda panah
plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=rainbow(40),
pch=16,cex=2,xlim=c(0,50),ylim=c(2.5,7.5))
arrows(x0=30,y0=3.5,x1=40,y1=mean(y)-.1,lwd=2)
Penambahan tanda panah pada grafik di atas dilakukan dengan penambahan fungsi
arrows(x0=30,y0=3.5,x1=40,y1=mean(y)-.1,lwd=2). x0 dan y0 digunakan untuk mendefinisikan koordinat awal untuk menggambar dan x1 dan y1 untuk mendefinisikan koordinat tujuan tanda panah.
Ilustrasi 5
#menambahkan tulisan
plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=rainbow(40),
pch=16,cex=2,xlim=c(0,50),ylim=c(2.5,7.5))
text(x=29,y=3.3,labels="Titik potong",cex=0.7)
text(x=3,y=7.3,labels="Data awal",cex=0.7)
text(x=46,y=7.3,labels="Data baru",cex=0.7)
Berdasarkan syntax dan output di atas dapat dilihat bahwa penambahan tulisan pada grafik dibuat dengan menggunakan fungsi
textkemudian teks yang akan ditampilkan disebutkan pada label dengan titik koordinat penyimpanan tulisan disesuaikan dengan nilai yang ditentukan.
Latihan 1
plot(sin,-pi, 2*pi)
Syntax di atas digunakan untuk membuat grafik dengan menentukan koordinat x adalah nilai sin, koordinat y adalah -pi, dan rentang pada grafik adalah 2*pi. Dimana pi adalah konstanta yang menunjukkan rasio keliling lingkaran dengan diameternya sehingga nilai pi adalah sekitar 3,14.
plot(table(rpois(100,5)),type="h",col="red",lwd=1,main="rpois(100,lambda=5)")
Syntax di atas digunakan untuk membuat grafik bertipe garis vertikal dari sumbu-x ke titik tertentu y. Dimana grafik di atas dibuat dari data tabel pembangkitan 100 bilangan acak berdistribusi poisson dengan lambda 5. Warna garis pada grafik berwarna merah dan diberi judul “rpois(100,lambda=5)”.
Latihan 2
a1 <- 1:25
a1
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Mendefinisika a1 sebagai variabel yang memiliki nilai 1 sampai 25.
a2 <- rnorm(25,4,2)
a2
## [1] 4.1844598 5.7465621 5.6849312 5.5539678 5.1360739 7.2671075 3.0991451
## [8] 5.5302696 4.3099755 3.9312912 1.9988333 1.5946505 2.1510768 4.5904618
## [15] 2.1843082 2.9297638 7.3404400 2.7509110 4.5452795 2.0575763 3.8392890
## [22] 3.0861692 4.2245790 0.7983941 2.2116829
Mendefinisikan a2 sebagai variabel yang memiliki nilai dari 25 bilangan acak berdistribusi normal yang memiliki nilai rata-rata 4 dan simpangan baku 2.
plot(a1,a2,pch="w",main="W")
Membuat grafik plot dengan a1 sebagai koordinat x dan a2 sebagai koordinat y, dengan simbol titiknya berupa huruf
w dan grafik tersebut berjudul W.
Latihan 3
plot(a1,a2,type="n",main="W")
text(a1,a2,labels=paste("w",1:25,sep=""),col=rainbow(25),cex=0.8)
Dengan plot yang memiliki nilai pada latihan 2, ditambahkan fungsi
text(a1,a2,labels=paste("w",1:25,sep=""),col=rainbow(25),cex=0.8) untuk menambahkan teks pada grafik. Dengan fungsi tersebut ditambahkan teks berupa label huruf w1-w25 pada setiap titik yang ada. Selain itu, ditambahkan juga parameter col=rainbow(25) untuk mewarnai plot dengan 25 warna yang berbeda dari warna rainbow.
Latihan 4
x <- rchisq(100,df=4)
hist(x,freq=FALSE,ylim=c(0,0.2))
curve(dchisq(x,df=4),col=2,lty=2,lwd=2,add=TRUE)
x <- rchisq(100,df=4) hist(x,freq=FALSE,ylim=c(0,0.2)) curve(dchisq(x,df=4),col=2,lty=2,lwd=2,add=TRUE) Syntax di atas digunakan untuk membuat histogram dari data x dimana x adalah variabel yang berisi 100 bilangan acak dari pembangkitan bilangan acak berdistribusi chisquare dengan derajat bebas 4. Histogram variabel x menggunakan probability densities karena freq=FALSE dengan sumbu x memiliki nilai dari 0 sampao 0,2. Selanjutnya pada histogram ditambahkan kurva distribusi chisquare variabel x dengan tipe garis putus-putus dan ketebalan 2.
par(mfrow=c(2,2))
plot(1:40,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=2,pch=16)
plot(sin,-pi, 2*pi)
plot(table(rpois(100,5)),type="h",col="red",
lwd=1,main="rpois(100,lambda=5)")
plot(a1,a2,type="n",main="W")
text(a1,a2,labels=paste("w",1:25,sep=""),
col=rainbow(25),cex=0.8)
Fungsi
par(mfrow=c(2,2)) ditambahkan untuk mengubah 1 device dapat menampung 4 grafik dalam format 2x2 dengan urutan grafik yang dipanggil berdasarkan baris. Setelah fungsi tersebut perlu dipanggil grafik mana saja yang akan dimasukkan ke dalam device. Dalam hal ini ditambahkan 4 grafik yang telah dibuat dan dijelaskan pada latihan sebelumnya.
par(mfcol=c(2,2))
plot(1:40,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=2,pch=16)
plot(sin,-pi, 2*pi)
plot(table(rpois(100,5)),type="h",col="red",lwd=1,
main="rpois(100,lambda=5)")
plot(a1,a2,type="n",main="W")
text(a1,a2,labels=paste("w",1:25,sep=""),
col=rainbow(25),cex=0.8)
Perbedaan dengan sebelumnya, pada syntax ini digunakan fungsi par(mfcol=c(2,2)) yang ditambahkan untuk mengubah 1 device dapat menampung 4 grafik dalam format 2x2 dengan urutan grafik yang dipanggil berdasarkan kolom. Adapun bila ingin mengembalikan ke layout default dapat digunakan fungsi par(mfrow=c(1,1))
Latihan 5
windows()
yb<-rnorm(100,5,1)
split.screen(c(2,2))
## [1] 1 2 3 4
screen(3)
boxplot(yb)
title("BoxplotBilangan Acak Normal",cex.main=0.7)
screen(4)
xb<-1:100
plot(xb,yb,type="l",lwd=2,col="blue")
title("LinePlot Bilangan Acak Normal",cex.main=0.7)
screen(2)
hist(yb,freq=FALSE,main=NULL,ylim=c(0,0.5))
x <-yb
curve(dnorm(x,5,1),col="red",lty=2,lwd=2,add=TRUE)
title("Histogram Bilangan Acak Normal",cex.main=0.7)
screen(1)
plot(xb,yb,pch=16,col=rainbow(100))
title("ScatterPlot Bilangan Acak Normal",cex.main=0.7)
Pada latihan 5 ini, digunakan fungsi lain untuk menampilkan beberapa grafik dalam 1 devices, yaitu fungsi split.screen(). Fungsi split.screen(c(2,2)) akan memberikan output pembagian device yang sama seperti fungsi par(mfrow=c(2,2)) yang berarti membagi devices menjadi berukuran 2x2 dengan urutan baris. Selanjutnya, fungsi screen(i) digunakan untuk berpindah antar area plot sehingga meskipun dalam urutan…… Adapun apabila hendak mengembalikan ke default maka dapat digunakan fungsi close.screen(all=T).
Vektor merupakan tipe sederhana dari objek data dalam S yang hampir digunakan oleh semua objek data. Semua elemen memiliki mode yang sama. Untuk menciptakan vektor yang sederhana dapat menggunakan perintah concatenate (yaitu c)
Perintah-perintah untuk membuat vektor selain perintah c: * scan * rep * seq * vector * as.vector * operator * unlist (lihat list di bawah)
Akses pada vektor dapat dilakukan dengan ketentuan:
Operasi pada vektor:
x %*% x xx^t –> x %o% xIlustrasi 1
x1 <-c(2,6,9,5)
x1
## [1] 2 6 9 5
Membuat suatu vektor yang diberi nama dengan x1. Fungsi c(....) adalah fungsi umum untuk menggabungkan argumennya dimana metode default akan menggabungkan argumennya untuk membentuk vektor. Adapun argumen (...) berisi objek yang akan digunakan.
Ilustrasi 2
x2 <-1:4
x2
## [1] 1 2 3 4
Membuat vektor yang diberi nama x2 yang berisi nilai 1 sampai 4.
Ilustrasi 3
x3 <-x1 + 1:2
x3
## [1] 3 8 10 7
Membuat vektor dengan nama variabel x3 yang berisi nilai-nilai pada x1 ditambahkan 1 dan 2 secara berurutan.
Ilustrasi 4
x4 <-x1 + 1:3
## Warning in x1 + 1:3: longer object length is not a multiple of shorter object
## length
x4
## [1] 3 8 12 6
Membuat vektor dengan nama variabel x4 yang berisi nilai-nilai pada x1 ditambahkan 1 sampai 3 secara berurutan. Adapun tulisan longer object length is not a multiple of shorter object length muncul pada output karena panjang penambahan 1 sampai 3 lebih panjang dan bukan kelipatan dari panjang variabel x1.
Ilustrasi 5
x5 <-x1*x2
x5
## [1] 2 12 27 20
Membuat variabel x5 dari hasil perkalian vektor x1 dan x2
Ilustrasi 6
x6 <-x1 %*% x1 #setarax'x
x6
## [,1]
## [1,] 146
Membuat perkalian transpose vektor x1 dengan vektor x1 yang disimpan dalan variabel x6.
Ilustrasi 7
x7 <-x1 %o% x1 #setaraxx'
x7
## [,1] [,2] [,3] [,4]
## [1,] 4 12 18 10
## [2,] 12 36 54 30
## [3,] 18 54 81 45
## [4,] 10 30 45 25
Membuat perkalian vektor x1 dengan vektor x1 yang ditransposekan kemudian disimpan dalan variabel x7.
Beberapa operasi yang dapat digunakan pada vektor karakter:
" — ") atau (’ — ’).nchar() menghitung banyaknya karakter dalam string.paste() menciptakan/menjadikan mode objek lain menjadi karakter.substr()/substring() digunakan untuk mengambil bagian string.Ilustrasi 1
y1 <-c("Institut Pertanian Bogor")
y1
## [1] "Institut Pertanian Bogor"
Membuat vektor karakter y1 yang berisi tulisan “Institut Pertanian Bogor”.
Ilustrasi 2
n1 <-nchar(y1)
n1
## [1] 24
Variabel n1 menyimpan jumlah karakter string pada variabel y1, yaitu 24. Dalam perhitungan ini, spasi termasuk bagian hitungan.
Ilustrasi 3
y2 <-c("Adam", "Pramesti", "Fathi", "Ririn")
y2
## [1] "Adam" "Pramesti" "Fathi" "Ririn"
Membuat vektor karakter y2 yang berisi 4 data.
Ilustrasi 4
n2 <-nchar(y2)
n2
## [1] 4 8 5 5
Variabel n2 menghitung jumlah karakter string setiap data yang ada pada variabel y2.
Ilustrasi 5
y3 <-substr(y1,15,18) #”nian”
y3
## [1] "nian"
Variabel y3 memanggil bagian string urutan 15 sampai 18 dari variabel y1.
Ilustrasi 6
y4 <-substring(y1,15) #”nianBogor”
y4
## [1] "nian Bogor"
Variabel y4 memanggil bagian string urutan 15 sampai akhir dari variabel y1.
Ilustrasi 7
y5 <-substring(y1,4,8) #”titut”
y5
## [1] "titut"
Variabel y5 memanggil bagian string urutan 4 sampai 8 dari variabel y1.
Matrix adalah susunan bilangan, simbol, atau karakter yang disusun atas baris dan kolom seperti bangun persegi. Bilangan, simbol atau karakter didalam matrix disebut dengan elemen dari matrix.
Matrix memiliki ordo. Ordo merupakan bilangan yang menunjukan banyak baris dan banyak kolom dari matrix.
Membuat matrix dari kumpulan nilai yang diberikan dapat digunakan dengan fungsi
matrix().
Perintah-perintah untuk membuat matriks/mengkonversi vektor menjadi matriks: * matrix * dim * rbind * cbind * as.matrix
Beberapa operasi dasar pada matrix yang dapat digunakan:
t().%*%.diag() menghasilkan matrix diagonal atau mengambil diagonal matrix tergantung dari argumennyaBeberapa fungsi matrix yang dapat digunakan: * solve() : menghasilkan solusi sistem persamaan linier atau matrix invers. * eigen() –> menghasilkan nilai akar ciri dan vektor ciri.
Ilustrasi 1
Z1 <-matrix(1:6,2,3)
Z1
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
Membuat variabel Z1 yang berisi matrix berukuran 2 x 3 dengan nilai elemen 1 sampai 6 yang urutan pengisian elemen diurutkan secara default berdasarkan kolom.
Ilustrasi 2
Z2 <-matrix(1:6,3,2,byrow=T)
Z2
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
Membuat variabel Z2 yang berisi matrix berukuran 3 x 2 dengan nilai elemen 1 sampai 6 yang urutan pengisian nilai elemen berdasarkan baris.
Ilustrasi 3
Z3 <-matrix(6:9,2,2)
Z3
## [,1] [,2]
## [1,] 6 8
## [2,] 7 9
Membuat variabel Z3 yang berisi matrix berukuran 2 x 2 dengan nilai elemen 6 sampai 9 yang urutan pengisian nilai elemen dilakukan secara default yaitu berdasarkan kolom.
Ilustrasi 4
Z4 <-Z1 %*% Z2
Z4
## [,1] [,2]
## [1,] 35 44
## [2,] 44 56
Melakukan perkalian matrix Z1 berukuran 2 x 3 dengan matrix Z2 berukuran 3 x 2 yang disimpan hasil perkalian tersebut pada variabel Z4. Pada perkalian matrix, terdapat syarat yang harus dipenuhi yaitu perkalian antar matrix hanya dapat dilakukan apabila jumlah kolom matrix pertama sama dengan jumlah baris matrix kedua. Simbol %*% digunakan sebagai operasi untuk perkalian matrix.
Ilustrasi 5
Z5 <-Z3 * Z4
Z5
## [,1] [,2]
## [1,] 210 352
## [2,] 308 504
Pada syntax di atas dilakukan perkalian secara langsung pada kedua matriks dimana R hanya akan mengalikan entri matriks yang berada pada index yang sama sehingga hasil dari matrix didapat dengan: # Z5[1,1] = Z3[1,1] * Z4[1,1] # Z5[1,2] = Z3[1,2] * Z4[1,2]
Ilustrasi 6
INVZ <-solve(Z4) #invers
INVZ
## [,1] [,2]
## [1,] 2.333333 -1.833333
## [2,] -1.833333 1.458333
Membuat variabel INVZ dengan menghasilkan solusi sistem persamaan linier atau matrix invers dari variabel Z4.
INVZ %*% Z4 #identitas
## [,1] [,2]
## [1,] 1 2.842171e-14
## [2,] 0 1.000000e+00
Syntax di atas mengalikan matrix variabel INVZ dengan variabel Z4. Dimana variabel INVZ adalah matrix invers dari variabel Z4 sehingga hasilnya adalah matrix identitas.
Ilustrasi 7
h <-c(5,11)
h
## [1] 5 11
Membuat vektor dengan nama vektor h yang memiliki nilai 5 dan 11.
Ilustrasi 8
p <-solve(Z4,h) #solusiSPL Zp=h
p
## [1] -8.500 6.875
Membuat variabel p yang merupakan hasil dari solusi sistem persamaan linier dari matrix Z4 dan vektor h.
Ilustrasi 9
e <-eigen(Z4) #eigenvalue & eigenvector drZ4
e$values#akseseigenvalues
## [1] 90.7354949 0.2645051
e[[2]] #akseseigenvectors
## [,1] [,2]
## [1,] 0.6196295 -0.7848945
## [2,] 0.7848945 0.6196295
e
## eigen() decomposition
## $values
## [1] 90.7354949 0.2645051
##
## $vectors
## [,1] [,2]
## [1,] 0.6196295 -0.7848945
## [2,] 0.7848945 0.6196295
Fungsi eigen() di atas digunakan untuk membuat variabel e yang berisi hasil nilai akar ciri dan vektor ciri variabel Z4 dimana pada argumen tersebut variabel Z4 merupakan matrix numerik atau kompleks yang dekomposisi spektralnya akan dihitung.
Struktur kendali dalam pemrograman adalah bagian penting dalam suatu bahasa pemrograman karena bagian ini mengatur jalannya eksekusi suatu program. Contohnya adalah perulangan yang digunakan untuk mengulang perintah sebanyak yang diinginkan oleh programmer atau sebanyak kondisi tertentu. Selain perulangan juga terdapat struktur kondisi yang memungkinkan program berjalan dengan kondisi/syarat tertentu.
Pernyataan if if (kondisi) ekspresi (T) [else ekspresi (F)]
Fungsi ifelse() x <- ifelse(kondisi, nilai jika T, nilai jika F)
Fungsi switch(EXPR,....) switch bekerja dalam dua cara berbeda tergantung apakah argumen pertama mengevaluasi ke string karakter atau angka. Jika nilai EXPR bukan string karakter, maka akan dipaksa menjadi integer. Perhatikan bahwa hal ini terjadi untuk faktor-faktor dengan peringatan, seperti biasanya level karakter yang dimaksud. Jika integer antara 1 dan nargs () - 1 maka elemen yang sesuai dari … dievaluasi dan hasilnya dikembalikan: jadi jika argumen pertama adalah 3 maka argumen keempat dievaluasi dan dikembalikan. Ilustrasi centre <- function(x, type) { switch(type, mean = mean(x), median = median(x), trimmed = mean(x, trim = .1))
Pernyataan for for (objek in sekuens) ekspresi
Pernyataan while while (condition) ekspresi Biasanya dalam pernyataan while diperlukan pemberhentian secara paksa:
berhenti <- FALSE; maxiter <- 1000; i <- 1 while (condition && !berhenti) { if (i>=maxiter) { berhenti <- TRUE } else { ekspresi i<-i+1 } }
repeat repeat ekspresi (untuk menghentikan dapat menggunakan perintah break)readinteger <- function(){ n <- readline(prompt="Please, enter your ANSWER: ") } repeat { response <- as.integer(readinteger()); if (response == 42) { print("Well done!"); break } else print("Sorry, the answer to whatever the question MUST be 42"); }
Fungsi apply Penggunaan loop sangat membantu kita dalam melakukan proses perhitungan berulang. Namun, metode ini tidak cukup ringkas dalam penerapannya dan perlu penulisan sintaks yang cukup panjang untuk menyelesaikan sebuah kasus yang kita inginkan. Metode alternatif lain untuk melakukan loop suatu fungsi adalah dengan menggunakan Apply function family. Metode ini memungkinkan kita untuk melakukan loop suatu fungsi tanpa perlu menuliskan sintaks loop. Berikut adalah beberapa fungsi dari apply family:
apply() : fungsi generik yang mengaplikasikan fungsi kepada kolom atau baris pada matriks atau secara lebih general aplikasi dilakukan pada dimensi untuk jenis data array.lapply(): fungsi apply yang bekerja pada jenis data list dan memberikan output berupa list juga.sapply(): bentuk sederhana dari lapply yang menghasilkan output berupa matriks atau vektor.vapply(): disebut juga verified apply (memungkinkan untuk menghasilkan output dengan jenis data yang telah ditentukan sebelumnya).tapply(): tagged apply dimana dimana tag menentukan subset dari data.Ilustrasi 1
for (i in 1:5) print(i^2)
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
i<-1
Pada syntax di atas, dilakukan perulangan dengan ketentuan selama i dari 1 sampai 5, kemudaian mencetak hasil perulangannya dengan nilai kuadrat dari setiap i sehingga diperoleh 5 angka yang didapatkan dari 1^2=1, 2^2-=, 3^2=9, 4^2=16, dan 5^2=25.
Ilustrasi 2
i
## [1] 1
while (i<=5) {
print(i^2)
i=i+1
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
Pada syntax di atas, dilakukan perulangan yang ekuivalen dengan perulangan pada ilustrasi 1. Hanya pada syntax ini digunakan fungsi while. Perbedaannya, dalam fungsi for, awal dan akhir perulangan sudah pasti. Program hanya akan menjalankan bagian 1 sebanyak sekali, lalu dicek pada bagian 2. Bila benar, bagian 3 akan dijalankan, diikuti bagian 4.Setelah itu, program akan kembali melakukan cek pada bagian 2. Apabila masih benar, akan dilanjutkan dengan menjalankan bagian 3 dan 4 seperti sebelumnya.Program akan terus berputar pada bagian 2 – 3 – 4. Sampai kapan? Sampai ketika bagian 2 (kondisi) tidak terpenuhi (hasil pengecekan bernilai salah). Sedangkan pada fungsi while, selama kondisi benar akan terus di ulang, metode perulanganya di cek terlebih dahulu, dan jika benar (true) maka perulangan di kerjakan, jika salah (false) maka perulangan di hentikan.
Ilustrasi 3
y=runif(20)
for (i in y) {
if(i<0.5){
print(100*i)
} else print(i/100)
}
## [1] 41.49108
## [1] 0.2376936
## [1] 0.008162186
## [1] 0.006177833
## [1] 0.006570422
## [1] 0.005424495
## [1] 0.005182173
## [1] 8.595702
## [1] 44.67576
## [1] 35.54205
## [1] 5.584662
## [1] 0.008329491
## [1] 33.2766
## [1] 18.38844
## [1] 19.31817
## [1] 9.004517
## [1] 0.006425103
## [1] 36.99103
## [1] 41.28199
## [1] 0.00553258
Syntax di atas adalah syntax untuk embangkitkan 20 bilangan acak berdistribusi uniform dimana memiliki kondisi: jika i atau bilangan tersebut < 0,5 maka bilangan tersebut dicetak dengan mengalikan bilangan tersebut dengan 100 (print(100*i)). Namun bila kondisi tersebut tidak terpenuhi maka dilakukan fungsi mencetak bilangan yang lain, yaitu mencetak bilangan tersebut dengan i/100 (else print(i/100)).
Ilustrasi 4
z=0
while (z<=10) {
y=runif(20)
z=sum(y)
print(z)
}
## [1] 11.76544
Selanjutnya, dengan fungsi while dapat dilakukan juga pembangkitan bilangan acak dari distribusi uniform. Pada syntax di atas dilakukan perulangan untuk membangkitkan 20 bilangan acak uniform yang kemudian setiap bilangan dari hasil pembangkitan tersebut dijumlahkan dan dicetak. Pada syntax di atas perulangan dilakukan dengan melakukan pemeriksaan kondisi di awal blok perulangan dimana perulangan hanya akan dilakukan jika kondisi yang didefinisikan yaitu z<=10 terpenuhi.
Ilustrasi 5
acak <-sample(1:5,1)
switch(EXPR=acak, "1" = "a", "2" = "z",
"3" = "m", "4" = "h", "5" = "t")
## [1] "z"
Syntax di atas adalah memanggil data dari beberapa pilihan list witch "1" = "a", "2" = "z", "3" = "m", "4" = "h", "5" = "t" dengan syarat statement pada variabel acak yang merupakan variabel pengambilan 1 sampel dari data 1 sampai 5.
Ilustrasi 6
Z6 <-matrix(1:25,5,5)
Z6
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 6 11 16 21
## [2,] 2 7 12 17 22
## [3,] 3 8 13 18 23
## [4,] 4 9 14 19 24
## [5,] 5 10 15 20 25
Membuat matrix berukuran 5 x 5 dari data 1 sampai 25.
apply(Z6,1,sum)
## [1] 55 60 65 70 75
Pada syntax di atas, menghitung jumlah dari nilai masing-masing baris pada matrix Z6. 1 dalah parameter margin yang berarti vektor yang memberikan subskrip dimana fungsinya akan diterapkan. Pada syntax di atas digunakan matriks 1 sehingga menunjukkan penerapan penjumlahan dilakukan berdasarkan baris. Adapun bila 2 menunjukkan kolom, c (1, 2) menunjukkan baris dan kolom.
apply(Z6,2,sd)
## [1] 1.581139 1.581139 1.581139 1.581139 1.581139
Pada syntax di atas, menghitung standar deviasi dari nilai masing-masing kolom pada matrix Z6.
Latihan 1
a<-0
for(i in 1:5) { b<-a+i
print(b)
a<-b
}
## [1] 1
## [1] 3
## [1] 6
## [1] 10
## [1] 15
Pada syntax di atas, dilakukan perulangan mulai dari a = 0 dengan ketentuan selama i dari 1 sampai 5, dilakukan fungsi b = a+i. Kemudian mencetak hasil perulangan dari fungsi b tersebut dan memberikan nilai b tersebut menjadi nilai a pada perulangan selanjutnya sehingga diperoleh 5 angka yang didapatkan adalah 0+1=1, 1+2=3, 3+3=6, 6+4=10, dan 10+5=15.
Latihan 2
i<-1
z<-1
while(z<15)
{y<-z+i
z<-y
print(z)
i<-i+1
}
## [1] 2
## [1] 4
## [1] 7
## [1] 11
## [1] 16
Pada syntax di atas dilakukan perulangan dengan fungsi while dimana dilakukan pemeriksaan kondisi di awal blok perulangan. Perulangan akan dimulai dari blok statement while sampai dengan i <- 1 dan z <- 1. Perulangan dilakukan dengan menjumlahkan nilai z + i kemudian hasilnya berupa y, yang selanjutnya y didefinisikan sebagai z untuk dilakukan penjumlahan kembali dengan i, sehingga diperoleh angka yang didapatkan adalah 1+1=2, 2+2=4, 4+3=7, 7+4=11, dan 11+5=16. Setelah ini perulangan berhenti karena nilai z adalah 16 karena pada syntax didefinisikan perulangan hanya akan dilakukan sepanjang nilai z < 15.
Latihan 3
i<-1
m<-2
repeat
{m<-m+i
print(m)
i<-i+1
if(m>15)
break
}
## [1] 3
## [1] 5
## [1] 8
## [1] 12
## [1] 17
Pada syntax di atas, perulangan akan dimulai dari blok statement repeat sampai dengan break. Perulangan hanya akan dilakukan sampai ditemukan nilai m > 15. Perulangan dimulai dengan m=2 dan i =1. Perulangan dilakukan dengan menjumlahkan nilai m + i kemudian hasilnya berupa m, yang selanjutnya m dicetak dengan kembali melakukan perulangan i + 1 dan akan berhenti jika m > 15, sehingga diperoleh angka yang didapatkan adalah 2+1=3, 3+2=5, 5+3=8, 8+4=12, dan 12+5=17. Karena 17 ini telah memenuhi m>15, maka perulangan berhenti.
Yang perlu diperhatikan, yaitu pada repeat perulangan melakukan pengecekan stop condition tidak di awal perulangan seperti while sehingga berapapun nilainya selama nilainya sesuai dengan stop condition maka perulangan akan dihentikan. Hal ini berbeda dengan while dimana proses dilakukan berulang-ulang sampai jumlahnya mendekati stop condition.
Selain memiliki fungsi dasar, R memiliki fungsi-fungsi statistika lain yang dapat digunakan untuk melakukan simulasi data. Fungsi - fungsi ini merupakan fungsi untuk membangkitkan data dari peubah acak dengan berbagai distribusi.Beberapa contohnya seperti distribusi normal, poisson, gamma, dsb dengan jumlah sampel sebanyak n. Pada dasarnya ada empat jenis fungsi terkait dengan distribusi peubah acak, yaitu sebagai berikut: * rdistribusi untuk membangkitkan data acak/ random dari suatu distribusi dengan Parameter tertentu. * ddistribusi untuk mencari nilai fungsi kepadatan f(x) pada suatu nilai x tertentu. * pdistribusi untuk mencari luas daerah (nilai peluang) suatu distribusi yang dibatasi oleh nilai x tertentu * qdistribusi untuk mencarti nilai x yang membatasi luas daerah (nilai peluang) tertentu dari suatu distribusi.
###Fungsi Terkait Distribusi Peubah Acak Ilustrasi 1
x <- rnorm(10) #x~N(0,1)
x
## [1] 0.26706308 -0.38017037 0.27113351 -0.68412559 -0.06924964 0.49730497
## [7] 0.87315531 -0.10197949 0.85839481 -0.81853893
Syntax di atas membangkitkan 10 data acak/random dari distribusi normal standar (mean = 0, dan standar deviasi = 1).
Ilustrasi 2
x1 <- rnorm(10,3,2) #x1~N(3, sd=2)
x1
## [1] 3.89663863 -1.25294315 3.76870069 4.31356635 3.42671179 -0.75296719
## [7] -0.06315523 1.37817247 2.12408099 2.10760612
Syntax di atas membangkitkan 10 data acak/random dari distribusi normal dengan mean = 3, dan standar deviasi = 2.
Ilustrasi 3
x2 <- rbinom (10, 1, 0.4) #x2~bernoulli(0.4)
x2
## [1] 1 1 0 0 1 1 1 0 0 0
Syntax di atas membangkitkan 10 data acak/random dari distribusi binomial dengan banyak trial 1 kali dan peluang sukses untuk setiap trial = 0,4 sehingga ini bisa saja disebut dengan membangkitkan bilangan acak bernoulli dengan peluang sukses = 0,4.
Ilustrasi 1
p1 <- pnorm(1.645)#P(Z<1.645)=0.95
p1
## [1] 0.9500151
Syntax di atas adalah untuk mencari luas daerah (nilai peluang) suatu distribusi normal yang dibatasi oleh nilai q = 1,645.
Ilustrasi 2
p2 <- pnorm(1.96) #P(Z<1.975)=0.975
p2
## [1] 0.9750021
Syntax di atas adalah untuk mencari luas daerah (nilai peluang) suatu distribusi normal yang dibatasi oleh nilai q = 1,96.
Ilustrasi 3
p3 <- pnorm(-1.96)
p3
## [1] 0.0249979
Syntax di atas adalah untuk mencari luas daerah (nilai peluang) suatu distribusi normal yang dibatasi oleh nilai q = -1,96 (sisi kiri).
Ilustrasi 4
p4 <- pf(15,df1=10,df2=15)
p4
## [1] 0.9999955
Syntax di atas adalah untuk mencari luas daerah (nilai peluang) distribusi F dengan q = 15, derajat bebas 1 = 10, dan derajat bebas 2 = 15.
Ilustrasi 1
q1 <- qnorm(0.975)
q1
## [1] 1.959964
Syntax di atas digunakan untuk mencari nilai x yang membatasi luas daerah (nilai peluang) 0,975 dari distribusi normal.
Ilustrasi 2
q2 <- qnorm(0.95,2,1) #X~N(2,1), P(X<x)=0.95
q2
## [1] 3.644854
Syntax di atas digunakan untuk mencari nilai x yang membatasi luas daerah (nilai peluang) 0,95 dari distribusi normal yang memiliki mean = 2 dan simpangan baku = 1.
Ilustrasi 1
a <- seq(-4,4,length=1000)
da <- dnorm(a)
plot(a,da)
Syntax di atas digunakan untuk membuat plot dari variabel a sebagai koordinat x dan da sebagai koordinat y. Variabel
a adalah variabel yang berisi data dari nilai -4 sampai 4 yang dengan panjang urutannya adalah 1000. Sementara variabel da adalah variabel yang berisi nilai fungsi kepadatan f(x) normal dari data di variabel a. Karena itu, maka kurva yang terbentuk adalah kurva normal.
Ilustrasi
n <- 1000
u <- runif (n)
x <- u^(1/3)
hist (x, prob = TRUE )
sbx <- seq (0 ,1 ,.01)
lines (sbx , 3*sbx ^2)
Syntax di atas digunakan untuk membangkitkan bilangan acak yang memiliki fungsi: X~f(X) = 3x^2, 0 < x < 1.
Acceptance-rejection method
Direct Transformation
Ilustrasi
y <-rnorm(1000)
x <- y^2
hist(x, prob=T)
sbx <- seq(0,13, 0.01)
lines (sbx, dchisq(sbx,df=1), col ="red")
Syntax di atas digunakan untuk membangkitkan bilangan acak berdistribusi Chi-square dengan db = 1 menggunakan metode pembangkitan Direct Transformation.
Latihan 1
Eksponensial(lambda=3)
eks <- function(n,lambda){
U <- runif(n)
X <- -log(1-U)/lambda
return(X)
}
yy1 <- eks(1000,3) #inverse transform method
yy2 <- rexp(1000,rate=3) #fungsi bawaan R
par(mfrow=c(1,2))
hist(yy1,main="Exp dari Inverse Transform")
hist(yy2,main="Exp dari fungsi rexp")
Syntax di atas digunakan untuk membuat histogram dari data berdistribusi eksponensial. Pada histogram berjudul
Exp dari Inverse Transform, histogram didapatkan dari data hasil transformasi dari fungsi X <- -log(1-U)/lambda. Pembangkitan dari data transformasi ini adalah pembangkitan bilangan acak dengan metode Inverse Transform Method. Sedangkan pada histogram berjudul Exp dari fungsi rexp histogram di dapat dari pembangkitan bilangan acak berdistribusi eksponensial yang digunakan untuk pembanding.
Latihan 2
ar <- function(n,x0,x1,f) {
xx <- seq(x0,x1,length=10000)
F <- max(f(xx))
terima <- 0; iterasi <- 0
hasil <- numeric(n)
while(terima<n) {
x <- runif(1,x0,x1)
y1<- runif(1,0,F)
y2<- f(x)
if(y1<=y2) {
terima <- terima+1
hasil[terima]<- x }
iterasi <- iterasi+1 }
list(hasil=hasil,iterasi=iterasi)
}
set.seed(10)
f <- function(x) {3*x^2}
yyy <- ar(100,0,100,f)
yyy; par(mfrow=c(1,1))
## $hasil
## [1] 86.47212 77.51099 83.82877 77.07715 53.55970 86.13824 20.36477 79.79930
## [9] 74.38394 34.43435 98.37322 69.35082 63.31153 88.80315 76.90405 64.83695
## [17] 87.95432 93.60689 72.33519 76.20444 98.68082 87.60261 72.40640 81.40516
## [25] 55.88949 89.00940 74.56896 84.80646 87.03302 82.23331 85.08123 77.09219
## [33] 89.53595 58.03863 59.82260 92.35285 73.67755 68.98170 83.01572 92.93209
## [41] 90.95163 53.47576 34.78601 87.59762 72.86815 87.49293 69.88356 83.12562
## [49] 55.72238 66.47687 74.00502 98.06898 38.00746 75.53169 51.84889 88.79149
## [57] 91.77773 80.84086 85.37441 42.32184 76.04306 34.05763 38.86568 47.74175
## [65] 53.87605 94.85434 71.24685 90.81691 94.57656 77.16899 69.46655 53.68832
## [73] 84.81593 82.42752 51.23742 31.52032 99.24487 93.27120 98.92809 62.83590
## [81] 52.54605 88.10815 52.91748 57.65517 72.31807 87.61180 39.95670 89.86123
## [89] 93.35217 78.59216 77.84128 69.55333 90.60413 99.16424 47.29846 97.70567
## [97] 93.86110 99.59093 85.43663 83.09547
##
## $iterasi
## [1] 322
hist(yyy$hasil, main="f(x)=3*x^2")
Syntax di atas digunakan untuk membangkitkan bilangan acak yang memiliki fungsi peluang 3*x^2. Metode yang digunakan dalam pembangkitan bilangan acak ini adalah metode Acceptance Rejection Method.
Membangkitkan Bilangan Acak dari Populasi Berdistribusi Chi-squared
library(ggplot2)
x_chi_squared <- rchisq(1000, df=5)
panjang_interval_chi_squared <- (max(x_chi_squared)-min(x_chi_squared))/45
distribusi_frekuensi_chi_squared<- cut(x_chi_squared, breaks =
seq(min(x_chi_squared),max(x_chi_squared),by=panjang_interval_chi_squared))
jumlah_chi_squared <- table(distribusi_frekuensi_chi_squared)
rentang_chi_squared <- names(jumlah_chi_squared)
jumlah_chi_squared <- as.vector(jumlah_chi_squared)
kelas_interval_chi_squared <- c(1:length(jumlah_chi_squared))
ggplot(data=NULL, aes(x=factor(kelas_interval_chi_squared), y=jumlah_chi_squared,
fill=rentang_chi_squared)) + geom_bar(stat="identity") +
xlab("Kelas Interval") + ylab("Jumlah") + ggtitle("Grafik Frekuensi Batang") +
geom_text(aes(y=jumlah_chi_squared/1.3, label=jumlah_chi_squared)) +
theme(plot.title = element_text(size = 12, face = "bold", colour = "darkblue", vjust=3,
hjust=0.5)) + labs(fill="Kelas Interval") + scale_fill_manual(values =
c(heat.colors(length(jumlah_chi_squared))))
y_chi_squared <- dchisq(x_chi_squared, df=5)
plot(x_chi_squared,y_chi_squared, xlim = c(0,20))
curve(dchisq(x, df=5), col="red", xlim = c(0,20))
hist(x_chi_squared, prob=TRUE)
curve( dchisq(x, df=5), col='green', add=TRUE)
curve( dchisq(x, df=10), col='red', add=TRUE )
curve(dchisq(x, df=1), col="red", xlim = c(0,30), ylim=c(0,0.3))
curve(dchisq(x, df=2), col="green", xlim = c(0,30), add=TRUE)
curve(dchisq(x, df=3), col="yellow", xlim = c(0,30), add=TRUE)
curve(dchisq(x, df=4), col="blue", xlim = c(0,30), add=TRUE)
curve(dchisq(x, df=5), col="black", xlim = c(0,30), add=TRUE)
curve(dchisq(x, df=10), col="orange", xlim = c(0,30), add=TRUE)
Pembangkitan Bilangan Acak untuk Model Regresi Linear Sederhana
b0 <- 1; b1 <- 1
b0hat <- NULL; b1hat <- NULL
for (i in 1:100) {
eps <- rnorm(10)
x <- runif(10, 5, 10)
y <- b0 + b1*x +eps
obj <- lm(y~x)
b0hat <- c(b0hat, obj$coefficients [1])
b1hat <- c(b1hat, obj$coefficients[2])
}
hasil <-matrix(c(mean(b0hat),sd(b0hat), mean(b1hat), sd(b1hat)), nrow=2, ncol=2)
rownames(hasil) <- c("mean", "sd")
colnames(hasil) <- c("b0", "b1")
hasil
## b0 b1
## mean 1.134467 0.9845232
## sd 1.833887 0.2505183
Analisis regresi merupakan alat statistika untuk mengevaluasi hubungan antara:
Untuk menelusuri pola hubungan yang modelnya belum diketahui secara sempurna:
Yang menjadi perhatian utama pada analisis regresi adalah koefisien garisnya.
Berikut dijelaskan syntax untuk membuat persamaan regresi linear berganda dengan peubah respon Y dan peubah penjelas X1 dan X2.
Ilustrasi
set.seed(123)
X1 <- runif(25,10,25)
X2 <- runif(25,90,200)
Y <- 10 + 2.3*X1 + 0.7*X2 + rnorm(25,0,9)
Y
## [1] 145.2980 172.6297 157.2390 138.4862 151.0582 175.5627 181.0410 188.0289
## [9] 184.1787 121.0427 171.9988 175.0267 135.4824 137.5021 113.9618 131.7872
## [17] 134.5388 117.9193 155.2350 151.5403 127.2692 134.2194 149.7767 157.8019
## [25] 183.9243
model1 <- lm(Y~X1)
summary(model1)
##
## Call:
## lm(formula = Y ~ X1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -29.991 -17.738 -2.632 17.896 33.171
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 131.846 19.741 6.679 8.18e-07 ***
## X1 1.049 1.015 1.033 0.312
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22.42 on 23 degrees of freedom
## Multiple R-squared: 0.04433, Adjusted R-squared: 0.002775
## F-statistic: 1.067 on 1 and 23 DF, p-value: 0.3124
model2 <- lm(Y~X2)
summary(model2)
##
## Call:
## lm(formula = Y ~ X2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -31.804 -4.850 -1.606 10.011 20.569
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 70.83913 13.86879 5.108 3.57e-05 ***
## X2 0.58213 0.09767 5.960 4.46e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.38 on 23 degrees of freedom
## Multiple R-squared: 0.607, Adjusted R-squared: 0.5899
## F-statistic: 35.52 on 1 and 23 DF, p-value: 4.464e-06
model3 <- lm(Y~X1+X2)
summary(model3)
##
## Call:
## lm(formula = Y ~ X1 + X2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.8291 -4.5994 -0.4576 5.0602 20.5307
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.62881 13.40229 -0.047 0.963
## X1 2.72951 0.40701 6.706 9.67e-07 ***
## X2 0.72459 0.06105 11.869 4.91e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.427 on 22 degrees of freedom
## Multiple R-squared: 0.8709, Adjusted R-squared: 0.8592
## F-statistic: 74.21 on 2 and 22 DF, p-value: 1.66e-10
model4 <- lm(Y~X1:X2)
summary(model4)
##
## Call:
## lm(formula = Y ~ X1:X2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.929 -7.009 -1.430 2.856 37.374
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 80.645221 10.481428 7.694 8.32e-08 ***
## X1:X2 0.027491 0.003929 6.997 3.94e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.97 on 23 degrees of freedom
## Multiple R-squared: 0.6804, Adjusted R-squared: 0.6665
## F-statistic: 48.96 on 1 and 23 DF, p-value: 3.942e-07
model5 <- lm(Y~X1*X2)
summary(model5)
##
## Call:
## lm(formula = Y ~ X1 * X2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.4425 -4.5808 -0.6702 4.6431 20.2409
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11.625896 37.941991 0.306 0.7623
## X1 2.063573 1.967526 1.049 0.3062
## X2 0.635870 0.263687 2.411 0.0251 *
## X1:X2 0.004905 0.014165 0.346 0.7326
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.6 on 21 degrees of freedom
## Multiple R-squared: 0.8716, Adjusted R-squared: 0.8533
## F-statistic: 47.53 on 3 and 21 DF, p-value: 1.548e-09
R2 <- matrix(c(summary(model1)$r.squared,
summary(model1)$adj.r.squared,
summary(model2)$r.squared,
summary(model2)$adj.r.squared,
summary(model3)$r.squared,
summary(model3)$adj.r.squared,
summary(model4)$r.squared,
summary(model4)$adj.r.squared,
summary(model5)$r.squared,
summary(model5)$adj.r.squared), 5, byrow=T)
colnames(R2)<- c("R2","R2.adj"); R2*100
## R2 R2.adj
## [1,] 4.432592 0.2774876
## [2,] 60.699195 58.9904640
## [3,] 87.090357 85.9167529
## [4,] 68.036265 66.6465370
## [5,] 87.163648 85.3298839
Syntax di atas digunakan untuk melihat nilai R Square dan Adjusted R Square. Dapat dilihat berdasarkan nilai Adjusted R Square, nilai tertinggi dengan nilai 85,92 adalah pada model ketiga dengan model persamaan regresi model3 <- lm(Y~X1+X2)
coef(model3)
## (Intercept) X1 X2
## -0.6288095 2.7295126 0.7245911
confint(model3)
## 2.5 % 97.5 %
## (Intercept) -28.4234482 27.1658292
## X1 1.8854322 3.5735929
## X2 0.5979779 0.8512044
cbind(coef(model3), confint(model3))
## 2.5 % 97.5 %
## (Intercept) -0.6288095 -28.4234482 27.1658292
## X1 2.7295126 1.8854322 3.5735929
## X2 0.7245911 0.5979779 0.8512044
anova(model3)
## Analysis of Variance Table
##
## Response: Y
## Df Sum Sq Mean Sq F value Pr(>F)
## X1 1 536.4 536.4 7.5538 0.01173 *
## X2 1 10002.4 10002.4 140.8614 4.911e-11 ***
## Residuals 22 1562.2 71.0
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par(mfrow=c(2,2)); plot(model3)
Sintax di atas digunakan untuk melihat plot dari model3. Dimana dari output di atas dapat digunakan untuk melihat terpenuhi atau tidaknya asumsi regresi linear berganda, diantaranya:
Asumsi liniearitas: kurva relasi yang terbentuk antara variabel independen terhadap variabel dependen linier. Asumsi ini dapat dipelajari melalui plot residual terhadap nilai fitted value. Jika asumsi liniearitas terpenuhi, maka titik-titik residual yang di plotkan akan membentuk pola acak. Jika pada plot yang dihasilkan terbentuk pola tidak linear maka transformasi data pada variabel prediktor atau independen diperlukan. Dari output diketahui asumsi ini terpenuhi.
Error atau residu berdristribusi normal: normalitas error di cek menggunakan qq-plot.
Outlier dan high influence point: kedua pengamatan tersebut dideteksi melalui qq-plot, plot residual terhadap nilai fitted value, dan plot residuals vs leverage. Jika outlier terjadi akibat adanya error selama pengukuran maka outlier dapat dihilangkan.
Error bersifat independen: independensi residual dapat dideteksi melaui plot korelasi serial dengan mengeplotkan ri vs ri−1.
Varians bersifat konstan: Varians bersifat konstan dicek melalui plot square root standardize residual vs fitted value.
multikolinearitas: tidak ada variabel dependen yang saling berfkorelasi. Multikolinearitas dapat dideteksi melalui plot matriks korelasi. Plot Scale-Location menunjukkan apakah residual tersebar secara merata di sepanjang rentang prediktor, yaitu homoscedastic. Yang diharapkan adalah garis pada plot ini menjadi horizontal dengan titik-titik yang tersebar secara acak pada plot.
Referensi: