Untuk dapat menggunakan fungsi-fungsi tertentu di R, kita memerlukan yang namanya Packages. Misal untuk melakukan anaisis runtuk waktu kita memerlukan package ‘tseries’. Untuk menginstal, menghapus dan mengupdate packages dapat menggunaka perintah seperti di bawah.
#install.packages("tseries")
detach()
#update.packages("tseries")
Perintah R dapat ditulis baik secara langsung di R console maupun di R script. Untuk kemudahan, perintah sebaiknya dituliskan di R script sehingga hasil pekerjaan kita dapat disimpan tidak seperti di R command. Coba ketikan perintah tersebut di R command dan di R script.
testing <- 10
lg = log(pi)
Untuk memanggil hasil dari perintah di atas, kita tuliskan kembali nama variabelnya (testing atau warna). Setelah variable kita dapat menggunakan “<-” atau “=” sebagai pemisah dengan command yang ingin dieksekusi.
testing
## [1] 10
lg
## [1] 1.14473
Operasi matematika di R, pada umumnya sama seperti pada bahasa pemprograman lainnya yaitu -, +, * dan /.
10 + 5
## [1] 15
10/2
## [1] 5
10*5
## [1] 50
10-5
## [1] 5
Vektor adalah salah satu struktur data paling sederhana di R. Berikut adalah beberapa cara mengentri vektor di R.
x = 1:10
x
## [1] 1 2 3 4 5 6 7 8 9 10
x2 = c(3,5,2,10)
x2
## [1] 3 5 2 10
length(x2)
## [1] 4
x3 <- seq(1, 10, 1)
x3
## [1] 1 2 3 4 5 6 7 8 9 10
y = 2*x + x3 - 3
y
## [1] 0 3 6 9 12 15 18 21 24 27
y[3]; y[1:4]; y[-1]
## [1] 6
## [1] 0 3 6 9
## [1] 3 6 9 12 15 18 21 24 27
Lists adalah bentuk umum dari vektor yang terdiri dari berbagai jenis tipe data.
x1 = seq (1,5,1)
x2 = c("merah", "kuning", "hijau")
x = list(numerik=x1, teks=x2, skalar=50)
x
## $numerik
## [1] 1 2 3 4 5
##
## $teks
## [1] "merah" "kuning" "hijau"
##
## $skalar
## [1] 50
x[[2]]; x$skalar
## [1] "merah" "kuning" "hijau"
## [1] 50
A = matrix(1:15, ncol = 5); A
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 4 7 10 13
## [2,] 2 5 8 11 14
## [3,] 3 6 9 12 15
B = matrix(1:15, nc=5, byrow = TRUE); B
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
## [3,] 11 12 13 14 15
A[1,4]; A[,3]; A[3,]; A[1:2, 1:2]
## [1] 10
## [1] 7 8 9
## [1] 3 6 9 12 15
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
is.matrix(A)
## [1] TRUE
Operasi matrix di R sangatlah sederhana, misalnya perkalian matriks menggunakan perintah %*% atau invers matriks menggunakan solve(). Berikutlah adalah beberapa contoh operasi matriks.
A = matrix(c(1,1,1,2,3,2,3,4,5), nrow = 3, byrow = TRUE)
B = diag(3)
A%*%B
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 2 3 2
## [3,] 3 4 5
A-B; A+B; det(B)
## [,1] [,2] [,3]
## [1,] 0 1 1
## [2,] 2 2 2
## [3,] 3 4 4
## [,1] [,2] [,3]
## [1,] 2 1 1
## [2,] 2 4 2
## [3,] 3 4 6
## [1] 1
solve(A); diag(A); t(A)
## [,1] [,2] [,3]
## [1,] 3.5 -0.5 -0.5
## [2,] -2.0 1.0 0.0
## [3,] -0.5 -0.5 0.5
## [1] 1 3 5
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 1 3 4
## [3,] 1 2 5
Data frames adalah struktur data seperti matrix dimana setiap kolomnya dapat berisi tipe data yang berbeda.
tinggi = c(147, 132, 156, 167, 156, 140)
berat = c(50, 46, 47, 62, 58, 45)
gender = c("L","P","P","L","L","P")
H = data.frame(tinggi, berat, gender)
H
## tinggi berat gender
## 1 147 50 L
## 2 132 46 P
## 3 156 47 P
## 4 167 62 L
## 5 156 58 L
## 6 140 45 P
str(H)
## 'data.frame': 6 obs. of 3 variables:
## $ tinggi: num 147 132 156 167 156 140
## $ berat : num 50 46 47 62 58 45
## $ gender: Factor w/ 2 levels "L","P": 1 2 2 1 1 2
data("USArrests")
str(USArrests)
## 'data.frame': 50 obs. of 4 variables:
## $ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
## $ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
## $ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
## $ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
summary(USArrests)
## Murder Assault UrbanPop Rape
## Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
## 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
## Median : 7.250 Median :159.0 Median :66.00 Median :20.10
## Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
## 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
## Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
tmp <- USArrests
attach(tmp)
mean(Murder)
## [1] 7.788
detach(tmp)
mean(tmp$Murder)
## [1] 7.788
with(tmp, mean(Murder))
## [1] 7.788
Perulangan seperti “for” sangat berguna dalam pemprograman.
ratarata <- function(x){
mean = sum(x)/length(x)
return(mean)
}
y = c(30, 42, 25, 30, 35)
ratarata(y)
## [1] 32.4
mean(y)
## [1] 32.4
maksmin <- function(x, y){
if(x > y ) {
maksimum = x
minimum = y
} else {
maksimum = y
minimum = x
}
list(maksimum=maksimum, minimum=minimum)
}
maksmin(30, 50)
## $maksimum
## [1] 50
##
## $minimum
## [1] 30
varians <- function(x){
n = length(x)
xbar = ratarata(x)
jumlah = 0
for (i in 1:n) {
jumlah = jumlah + (xbar - x[i])^2
}
varians = jumlah/(n-1)
return(varians)
}
varians(y)
## [1] 41.3
attach(tmp)
plot(tmp)
plot(Murder, Assault)
plot(Rape, type = 'l')
lines(Murder, col = 'blue')
#mengatur plot
plot(Rape, type = 'l', xlab = 'Kota', ylab='Cases', ylim=c(0,100))
lines(Murder, col = 'blue')
legend('topright', c("Rape","Murder"), col = c("black","blue"), lty=1)
boxplot(Assault)
hist(UrbanPop)
plot(USAccDeaths)
library(stats)
x <- rnorm(100, mean = 5, sd = 1)
y <- rpois(100, 5)
z <- rbinom(100, 1, 0.5)
hist(x, breaks = 20)
hist(y, breaks = 20)
head(z)
## [1] 0 1 1 0 1 0
set.seed(1234)
wdata = data.frame(
sex = factor(rep(c("F", "M"), each=200)),
weight = c(rnorm(200, 55), rnorm(200, 58)),
height = c(rnorm(200, 170), rnorm(200, 160))
)
head(wdata, 4)
## sex weight height
## 1 F 53.79293 168.7732
## 2 F 55.27743 170.0362
## 3 F 56.08444 169.5786
## 4 F 52.65430 169.1006
boxplot(weight~sex, data=wdata)
Sekarang kita coba menggunakan grafik interaktif yang berasal dari package “ggplot2”.
#install.packages("ggplot2")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.0.0
a <- ggplot(wdata, aes(x=weight))
a + geom_point(aes(y=height, fill=sex, col=sex))
a + geom_density(aes(col=sex, fill=sex))
a + geom_boxplot(aes(col=sex))
a + geom_line(aes(y=height, col=sex))
cor(tmp)
## Murder Assault UrbanPop Rape
## Murder 1.00000000 0.8018733 0.06957262 0.5635788
## Assault 0.80187331 1.0000000 0.25887170 0.6652412
## UrbanPop 0.06957262 0.2588717 1.00000000 0.4113412
## Rape 0.56357883 0.6652412 0.41134124 1.0000000
cor.test(Assault, Murder)
##
## Pearson's product-moment correlation
##
## data: Assault and Murder
## t = 9.2981, df = 48, p-value = 2.596e-12
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6739512 0.8831110
## sample estimates:
## cor
## 0.8018733
library(corrplot)
## corrplot 0.84 loaded
corx <- cor(tmp)
corrplot(corx)
model <- lm(Murder ~ UrbanPop, data=tmp)
summary(model)
##
## Call:
## lm(formula = Murder ~ UrbanPop, data = tmp)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.537 -3.736 -0.779 3.332 9.728
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.41594 2.90669 2.207 0.0321 *
## UrbanPop 0.02093 0.04333 0.483 0.6312
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.39 on 48 degrees of freedom
## Multiple R-squared: 0.00484, Adjusted R-squared: -0.01589
## F-statistic: 0.2335 on 1 and 48 DF, p-value: 0.6312
ggplot(tmp, aes(x=UrbanPop, y=Murder)) + geom_point() +
geom_smooth(method = "lm", formula = y~x)