1 Pengolahan Objek

1.1 Operasi aljabar sederhana vektor numerik

Operasi aljabar sederhana vektor numerik dengan notasi +, -, *, /, ^, %*%, %o%

(x1 <- c(5,7,9,13))
## [1]  5  7  9 13
(x2 <- 1:4)
## [1] 1 2 3 4
mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
(x3 <- x1 + 1:2)
## [1]  6  9 10 15
(x4 <- x1 + 1:3)
## Warning in x1 + 1:3: longer object length is not a multiple of shorter object
## length
## [1]  6  9 12 14
(x44 <- x1 + 1:6)
## Warning in x1 + 1:6: longer object length is not a multiple of shorter object
## length
## [1]  6  9 12 17 10 13

vektor x3 menghasilkan nilai yang didapatkan dari \(5+1, 7+2, 9+1, 13+2\)

vektor x4 menghasilkan nilai yang didapatkan dari \(5+1, 7+2, 9+3, 13+1\)

vektor x44 menghasilkan nilai yang didapatkan dari \(5+1, 7+2, 9+3, 13+4, 5+5, 7+6\)

(x5 <- x1*x2)
## [1]  5 14 27 52
(x6 <- x1 %*% x1) #setara x'x
##      [,1]
## [1,]  324
(x7 <- x1 %o% x1) #setara xx'
##      [,1] [,2] [,3] [,4]
## [1,]   25   35   45   65
## [2,]   35   49   63   91
## [3,]   45   63   81  117
## [4,]   65   91  117  169

1.2 Operasi dasar vektor karakter:

function nchar() Berfungsi untuk menmpilkan jumlah huruf pada character

y1 <- c("IPB University")
(n1 <- nchar(y1))
## [1] 14
(y2 <- c("Malik","Vani","Juliana","Tania"))
## [1] "Malik"   "Vani"    "Juliana" "Tania"
(n2 <- nchar(y2))
## [1] 5 4 7 5

function substr(object, k, k+n) berfungsi untuk mengambil elemen ke k sampai elemen ke k+n dari sebuah string

function substring(object, k)berfungsi untuk mengambil elemen ke k sampai elemen terakhir atau sampai batas yang ditentukan dari sebuah string

(y3 <- substr(y1,11,14)) 
## [1] "sity"
(y4 <- substring(y1,8))
## [1] "versity"
(y5 <- substring(y1,1,5))
## [1] "IPB U"

1.3 Operasi dasar matriks

(Z1 <- matrix(1:6,2,3))
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
(Z2 <- matrix(1:6,3,2,byrow=T))
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
(Z3 <- matrix(6:9,2,2))
##      [,1] [,2]
## [1,]    6    8
## [2,]    7    9

function t() berfungsi mengubah matriks yang tadinya Z1 menjadi seperti matriks Z2 pada contoh di atas.

t(Z1)
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6

function %*%() berfungsi untuk perkalian matrik dim(nxm)* matriks dim(mxn) menjadi matriks dimensi (nxn)

(Z4 <- Z1 %*% Z2)
##      [,1] [,2]
## [1,]   35   44
## [2,]   44   56
(Z4a <- Z2 %*% Z1)
##      [,1] [,2] [,3]
## [1,]    5   11   17
## [2,]   11   25   39
## [3,]   17   39   61
(Z5 <- Z3 * Z4) # hanya bisa digunakan untuk perkalian matrik dimensi sama dim(nxn)*dim(nxn)
##      [,1] [,2]
## [1,]  210  352
## [2,]  308  504

function solve() mengeluarkan nilai invers matriks

(INVZ <- solve(Z4))
##           [,1]      [,2]
## [1,]  2.333333 -1.833333
## [2,] -1.833333  1.458333
(INVZ %*% Z4) 
##      [,1]         [,2]
## [1,]    1 2.842171e-14
## [2,]    0 1.000000e+00
(h <- c(10,11))
## [1] 10 11
(p <- solve(Z4,h)) #solusi SPL Zp=h
## [1]  3.166667 -2.291667
e <- eigen(Z4) #eigen value & eigen vector dr Z4
e$values #akses eigen values
## [1] 90.7354949  0.2645051
e[[2]] #akses eigen vectors
##           [,1]       [,2]
## [1,] 0.6196295 -0.7848945
## [2,] 0.7848945  0.6196295
Z4
##      [,1] [,2]
## [1,]   35   44
## [2,]   44   56
h
## [1] 10 11

2 Struktur Kendali

a<-0 
for(i in 1:5) { 
  b<-a+i 
  print(b) 
  a<-b } 
## [1] 1
## [1] 3
## [1] 6
## [1] 10
## [1] 15

mencetak b (b=a+i) dimana diawali dari a=0, dan hasil dari b di-switch menjadi a dan diulang sampai i=5

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

selama z < 15, maka y=z+i (dimana i dan z dimulai dari 1). Lalu hasil y di switch menjadi z dan di cetak, kemudian i=i+1, diulang terus sampai z<15

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

dilakukan perulangan dimana m+i=m (i dimulai dari 1 dan m dimulai dari 2). lalu cetak hasil m, dan i=i+1. Dilakukan looping, jika m>15 maka diberhentikan proses pengulangan dengan fungsi break.

3 Grafik

x <- 1:40
y <- rnorm(40,5,1)
plot(x,y,type="p")

plot(x,y,type="o")

plot(x,y,type="n")

plot(x,y,type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=2,pch=16)

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)
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) #ketebalan garisnya 2, dan tipe garis putus-putus
abline(h=mean(y),col="red",lwd=2.5)#menambahkan garis lurus berdasarkan: fungsi y=a+bx, horisontal, dan vertikal
abline(a=2,b=1/10,col="maroon3",lwd=2,lty=2)
#menambahkan tanda panah
arrows(x0=30,y0=3.5,x1=40,y1=mean(y)-.1,lwd=2)
#menambahkan tulisan
text(x=29,y=3.3,labels="Titik potong",cex=0.7) #menambahkan label tanda panah
text(x=3,y=7.3,labels="Data awal",cex=0.7)
text(x=46,y=7.3,labels="Data baru",cex=0.7)

4 Latihan

plot(sin,-pi, 2*pi) #membuat plot dengan fungsi sinus dengan panjang dari -p sampai 2*pi

plot(table(rpois(100,5)),type="h",col="red",lwd=1,main="rpois(100,lambda=5)") 

a1 <- 1:25 # a1 yaitu 1 sampai 25
a2 <- rnorm(25,4,2) #membangkitkan bilangan acak normal sebaran normal sebanyak 25, dengan mean=4, st.dev=2
plot(a1,a2,pch="x",main="x") #plot dengan simbol titik/pch yaitu "x"

#karena bilangan acak, maka hasil plot tiap menjalankan fungsi akan berbeda-beda
plot(a1,a2,type="n",main="X")
text(a1,a2,labels=paste("x",1:25,sep=""),col=rainbow(25),cex=0.8)

x <- rchisq(100,df=4) #membangkitkan bilangan acak sebaran chi-square sebanyak 100 dan derajat bebas=4
hist(x,freq=FALSE,ylim=c(0,0.2)) #membuat histogram  
curve(dchisq(x,df=4),col=2,lty=2,lwd=2,add=TRUE) #membuat kurva berdasarkan data sebaran x 

## Menggabungkan grafik dalam 1 frame

par(mfrow=c(2,2)) #Menggabungkan plot membagi layout menjadi 2 kolom dan 2 baris
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)

yb <- rnorm(100,5,1)
split.screen(c(2,2))
## [1] 1 2 3 4
screen(3)
boxplot(yb)
title("Boxplot Bilangan Acak Normal",cex.main=0.7)
screen(4)
xb <- 1:100
plot(xb,yb,type="l",lwd=2,col="blue")
title("Line Plot 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("Scatter Plot Bilangan Acak Normal",cex.main=0.7)

5 Pembangkitan Bilangan Acak

5.1 Inverse Transform Method

Membangkitkan Membangkitkan bilangan acak Eksponensial

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")

5.2 Acceptance-rejection method

Bangkitkan bilangan acak yang memiliki fkp \(f_Y (y) = 〖3y〗^2;0 < y < 1\) menggunakan acceptance-rejection method!

ar <- function(n,x0,x1,f) {
xx <- seq(x0,x1,length=10000) #baris bilangan dari x0 sampai x1 dengan 10000 titik
     c <- max(f(xx)) #nilai maksimum dari fungsi f(xx)
terima <- 0; iterasi <- 0 #menyimpan berapa banyak iterasi yang  dibutuhkan dan yg termasuk ke dalam kriteria
hasil <- numeric(n)
while(terima<n) { #menjalankan fungsi selama terima < n
x <- runif(1,x0,x1) #membangkitkan bilangan seragam dari x0 sampai x1
y1<- runif(1,0,c) #membangkitkan bilangan seragam dari 0 sampai c
y2<- f(x) #nilai f(x) untuk setiap x yang dibangkitkan 
if(y1<=y2) { #jika y1<=y2, maka
terima <- terima+1
hasil[terima]<-x } #hasil x disimpan pada vektor hasil
iterasi <- iterasi+1 }
list(hasil=hasil,iterasi=iterasi) #hasil dari iterasi disimpan dalam bentuk list
}
set.seed(10)
f <- function(x) {3*x^2} #f(x)
yyy <- ar(100,0,1,f) #membangkitkan 100 bilangan dari 0 sampai 1 pada f(x)
yyy
## $hasil
##   [1] 0.8647212 0.7751099 0.8382877 0.7707715 0.5355970 0.8613824 0.2036477
##   [8] 0.7979930 0.7438394 0.3443435 0.9837322 0.6935082 0.6331153 0.8880315
##  [15] 0.7690405 0.6483695 0.8795432 0.9360689 0.7233519 0.7620444 0.9868082
##  [22] 0.8760261 0.7240640 0.8140516 0.5588949 0.8900940 0.7456896 0.8480646
##  [29] 0.8703302 0.8223331 0.8508123 0.7709219 0.8953595 0.5803863 0.5982260
##  [36] 0.9235285 0.7367755 0.6898170 0.8301572 0.9293209 0.9095163 0.5347576
##  [43] 0.3478601 0.8759762 0.7286815 0.8749293 0.6988356 0.8312562 0.5572238
##  [50] 0.6647687 0.7400502 0.9806898 0.3800746 0.7553169 0.5184889 0.8879149
##  [57] 0.9177773 0.8084086 0.8537441 0.4232184 0.7604306 0.3405763 0.3886568
##  [64] 0.4774175 0.5387605 0.9485434 0.7124685 0.9081691 0.9457656 0.7716899
##  [71] 0.6946655 0.5368832 0.8481593 0.8242752 0.5123742 0.3152032 0.9924487
##  [78] 0.9327120 0.9892809 0.6283590 0.5254605 0.8810815 0.5291748 0.5765517
##  [85] 0.7231807 0.8761180 0.3995670 0.8986123 0.9335217 0.7859216 0.7784128
##  [92] 0.6955333 0.9060413 0.9916424 0.4729846 0.9770567 0.9386110 0.9959093
##  [99] 0.8543663 0.8309547
## 
## $iterasi
## [1] 322
par(mfrow=c(1,1)) #membuat layout 1 kolom 1 baris
hist(yyy$hasil, main="f(x)=3*x^2", prob=T) #membuat histogram dari f(x) untuk 0 sampai 1
x <- seq(0, 1, 0.01)
lines(x, f(x), lwd=2, col="salmon") #menambah garis

5.3 Direct Transformation

Jika \(X~U(0,1)\) menggunakan \(Y = b - a X + a\) maka \(Y~U(a,b)\) Membangkitkan bilangan acak \(Y~U(3,5)→ Y = 2X + 3\)

x <- runif(1000)
y <- 2*x+3

5.4 Pembangkitan Bilangan acak untuk Model Regresi

X1 <- runif(25,10,25) #membangkitkan data sebaran seragam sebanyak 25 bilangan 
X2 <- runif(25,90,200) #membangkitkan data sebaran seragam sebanyak 25 bilangan 
Y <- 10 + 2.3*X1 + 0.7*X2 + rnorm(25,0,9) #B0=10, b1=2.3, b2=0.7, 

Membangun model regresi \[Y = β_0 + β_1 X_1+ε\]

model1 <- lm(Y~X1)
summary(model1) #Mengeluarkan summary  model
## 
## Call:
## lm(formula = Y ~ X1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -31.950 -19.772   3.546  11.854  42.348 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  126.249     20.449   6.174 2.68e-06 ***
## X1             1.582      1.197   1.321    0.199    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 22.39 on 23 degrees of freedom
## Multiple R-squared:  0.07054,    Adjusted R-squared:  0.03013 
## F-statistic: 1.746 on 1 and 23 DF,  p-value: 0.1994

Membangun model regresi \[Y = β_0 +β_2 X_2+ ε\]

model2 <- lm(Y~X2)
summary(model2)
## 
## Call:
## lm(formula = Y ~ X2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.3390  -6.3293  -0.9062   7.3238  18.3845 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 57.17447   10.47219   5.460 1.50e-05 ***
## X2           0.65054    0.06989   9.307 2.91e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.64 on 23 degrees of freedom
## Multiple R-squared:  0.7902, Adjusted R-squared:  0.7811 
## F-statistic: 86.63 on 1 and 23 DF,  p-value: 2.909e-09

Membangun model regresi \[Y = β_0 +β_1 X_1+ β_2 X_2+ε\]

model3 <- lm(Y~X1+X2)
summary(model3)
## 
## Call:
## lm(formula = Y ~ X1 + X2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -14.427  -4.128   1.935   4.599  14.271 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 23.04448   10.61313   2.171 0.040968 *  
## X1           1.91913    0.41507   4.624 0.000132 ***
## X2           0.66522    0.05099  13.045 7.87e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.747 on 22 degrees of freedom
## Multiple R-squared:  0.8936, Adjusted R-squared:  0.8839 
## F-statistic: 92.38 on 2 and 22 DF,  p-value: 1.98e-11

Membangun model regresi \[Y = β_0 +β(X_1: X_2)+ε\]

model4 <- lm(Y~X1:X2)
summary(model4)
## 
## Call:
## lm(formula = Y ~ X1:X2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -20.498 -10.310   1.911   6.178  26.300 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 88.214450   8.683298   10.16 5.67e-10 ***
## X1:X2        0.026421   0.003418    7.73 7.69e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.25 on 23 degrees of freedom
## Multiple R-squared:  0.7221, Adjusted R-squared:   0.71 
## F-statistic: 59.75 on 1 and 23 DF,  p-value: 7.692e-08

Membangun model regresi \[Y = β_0 +β(X_1* X_2)+ε\]

model5 <- lm(Y~X1*X2)
summary(model5)
## 
## Call:
## lm(formula = Y ~ X1 * X2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -14.575  -2.181   1.381   4.613  13.372 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 49.47190   30.96181   1.598   0.1250  
## X1           0.39617    1.72632   0.229   0.8207  
## X2           0.47063    0.22009   2.138   0.0444 *
## X1:X2        0.01128    0.01241   0.909   0.3736  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.778 on 21 degrees of freedom
## Multiple R-squared:  0.8976, Adjusted R-squared:  0.883 
## F-statistic: 61.37 on 3 and 21 DF,  p-value: 1.458e-10

5.5 Mengeluarkan Koefisien Determinasi Model

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,]  7.054021  3.012891
## [2,] 79.019982 78.107807
## [3,] 89.359436 88.392112
## [4,] 72.205875 70.997435
## [5,] 89.762323 88.299798
coef(model3) # Mengeluarkan nilai coefisien model 3
## (Intercept)          X1          X2 
##  23.0444800   1.9191267   0.6652184
confint(model3) #Mengeluarkan selang kepercayaan untuk pendugaan parameter
##                 2.5 %    97.5 %
## (Intercept) 1.0341929 45.054767
## X1          1.0583153  2.779938
## X2          0.5594629  0.770974
cbind(coef(model3), confint(model3)) #Menggabungkan kedua hasil
##                            2.5 %    97.5 %
## (Intercept) 23.0444800 1.0341929 45.054767
## X1           1.9191267 1.0583153  2.779938
## X2           0.6652184 0.5594629  0.770974
anova(model3) #Mencari anova model 3
## Analysis of Variance Table
## 
## Response: Y
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## X1         1   875.3   875.3  14.585 0.0009369 ***
## X2         1 10212.9 10212.9 170.171  7.87e-12 ***
## Residuals 22  1320.3    60.0                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par(mfrow=c(2,2)); plot(model3) #Mengeluarkan plot model 3 yang dapat dilakukan untuk pengecekan asumsi

HAFIZAH ILMA (Statistician)