Visualisasi Data dan Pembangkit Bilangan Acak
Library
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(DT)
Visualisasi Data
Visualisasi sangaatlah penting dilakukan untuk mempermudah dalam menginterprestasikan data, sehingga nantinya dapat dilihat hasil atau kesimpulan yang bersifat deskriptif. dalam laporan ini akan digunakan dua fungsi yaitu *ggplot*
dan *qplot*
yang dibandingkan dalam penggunaanya. Pada dasarnya penggunaan *ggplot*
dan *qplot*
menghasilkan bentuk plot yang sama. *qplot*
dibentuk berdasarkan basic plot yang telah ada sehingga lebih menarik. berikut adalah contoh - contoh pengunaan fungsi *qplot*
dan *ggplot*
Datasets
= iris
data datatable(iris)
Dari data tersebut akan dibentuk sebuah scatter plot yang menggunakan fungsi *ggplot*
dan *qplot*
dengan x =Sepal.Width, y = Petal.Length. Beberapa argument yang dgunakan pada fungsi ggplot adalah
aes
(yang berisiskan variabel yang ingin di deskripsikan dalam hal ini kita dapat mengisikan x =Sepal.Width, y = Petal.Lengthlabs
yang berisikan judul dari plotxlab
adalah nama dari variabelylab
adalah nama variabel y
Scatterplot
Scatter plot merupakan suatu diagram yang digunakan untuk melihat hubungan dari nilai x dan y berdasarkan sebaran titiknya.Pada data simulasi berikut x adalah nilai siswa dan y adalah persentase dari kehadiran siswa. Berikut diberikan dua cara untuk menampilkan scatterplot.
<- ggplot(iris)+
sc geom_point(aes(x=Sepal.Width,y = Petal.Length))+
labs(title = "Scatter plot") +
xlab (" Sepal Width")+
ylab ("Petal.Length")
# atau dengan
<- qplot(x = data$Sepal.Width,y =data$Petal.Length,
sc1 geom = "point",
colour = "pink",
main = "Scater Plot",
xlab = "Sepal Width",
ylab = "Petal Lenght")
sc1
Menamppilkan beberapa sebaran data dengan kriteria tertentu dengan menggunakan scatterplot dimana x =Sepal.Width, y = Petal.Length dengan kriteria atau color = Species yang disajikan dapat berbentuk sebagai berikut:
ggplot(iris) +
geom_point(aes(x =Sepal.Width, y = Petal.Length, color = Species)) +
facet_wrap(~Species) +
theme(legend.position = "none")
Histogram
<- iris
data head(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
ggplot(data) +
geom_histogram(aes(x = Petal.Length), fill="lightblue",binwidth = 1)+
ggtitle("Histogram")+
ylab("Sepal Widht")+
xlab("Petal Lenght")
Barplot
ggplot(data)+
geom_bar(aes(x = Species, y = Petal.Length),fill = "lightblue",binwidth = 1,stat = "identity") +
ggtitle("Bar Plot")+
ylab("Sepal Widht")+
xlab("Petal Lenght")
## Warning: Ignoring unknown parameters: binwidth
ggplot(iris) +
geom_bar(aes(x =Sepal.Width, y = Petal.Length, color = Species,fill = Species),stat = "identity")+
facet_wrap(~Species) +
theme(legend.position = "none")
Pembangkit Bilangan Acak
Fungsi-fungsi suatu sebaran data :
Fungsi Fkp dari suatu sebaran yang di lambangkan sebagai
d
yang diikuti dengan nama sebaranya. contoh dnorm,dbinom,dtFungsi peluang sebaran kumulatif (cdf) yang dilambangkan sebangai
p
dan diikuti dengan nama sebaranya : pnorm punifFungsi invers/ quantile cdfq
Pembangkit nilai acak yang mengikuti sebaran data yang dipanggil dilambangkan sebagai
r
dan diiikuti dengan nama dari sistribusinya.
Pada dasarnya ketika melakukan suatu simulasi pembangkitan bilangan acak ada beberapa cara jika bilagan acak yang ingin dibangkitkan belum diketahui distribusinya. Terdapat 3 metode untuk Membangkitkan bilangan acak
Inverse Transform Method
Acceptance Rejection Method
Direct Transformation
Inverse Transform Method
Suatu metode pembangkitan bilangan acak dengan menggunakan inverse dari fungsi cdfnya. tetapi perlu diperhatikan bahwa terdapat kesulitan apabila untuk beberapa sebaran yang tidak dapat di tentukan cdfnya. Namun, metode ini merupakan metode yang fleksibel bahkan dapat digukan pada sebaran diskret.
## Inverse-Transform method
set.seed(1501211039)
<- runif(100)
r <- qbeta(r, 3, 2)
x hist(x, prob = TRUE,col ="lightblue")
<- seq(7, 14, 0.01)
sbx lines(sbx, dnorm(sbx, mean = 10, sd = 1), col ="blue")
head(x)
## [1] 0.7266986 0.5845417 0.7052912 0.2634162 0.3444652 0.4695590
set.seed(!501211039)
<- rbeta(100,3,2)
empirik hist(empirik,main="Histogram fungsi Beta",col="lightblue")
Acceptance Rejection Method
Suatu metode ini dapat menjadi suatu alternatif ketika adanya kendala pada integral atau cdf metode Inverse-Transform. Acceptance-rejection method membangkitkan sutu sebaran dari sebaran lainya yang memiliki kriteria sebaran dan panjang data sama dengan data yang ingin kita bangkitkan.
Urutan yang dilakukan:
Tetapkan peubah acak Y dengan fungsi peluang g yang memiliki suatu konstanta dengan nilai maximum dari \(f(t)/g(t) ≤ c\). Dengan nilai \(f(t) > 0\)
Bangkitkan u dari sebaran \(Uniform (0,1)\)
Hitunglah nilai dari \(c * g(y) * u < f(y)\) Apabila terpenuhi maka terima y sebagai x, abila tidak terpenuji mana ulangi langkah 2(a).
Contoh 1 : Membangkitkan suatu fungsi fkp \(6 x (1 - x) ~ beta(2,2)\)
<- seq(0, 1, 0.01)
x <- 12 * x^2 * (1 - x)
y max(y)
## [1] 1.777644
set.seed(1501211039)
<- 100
n <- k <- 0
j <- numeric(n)
y while (k < n) {
<- runif(1)
u <- j + 1
j <- runif(1)
x if ((12 * x^2 * (1 - x)*dunif(x, 0, 1))> u) {
<- k + 1
k <- x
y[k]
}
}hist(y, prob = T,col = "lightblue")
<- seq(0, 1, 0.01)
sbx lines(sbx, dbeta(sbx, 3, 2),col = "red")
j
## [1] 141
Contoh 2 : Membangkitkan suatu fungsi fkp \(f(x) = 2x^3 +x\) yang dianggap memiiki suatu distribusi tertentu
curve(2*(x^3)+x,0,1)
<- seq(0, 1, 0.01)
x <- (2*x^3)+x
y max(y)
## [1] 3
set.seed(234)
<- 1000
n <- 0
j <- 0
k <- numeric(n)
y while (k < n) {
<- runif(1)
u <- j + 1
j <- runif(1)
x if (u < (2*(x^3)+x)/3.5 * dunif(x, 0, 1)) {
<- k + 1
k <- x
y[k]
}
}hist(y, prob = T,col = "lightblue")
<- seq(0, 1, 0.01)
sbx lines(sbx, ((2 * (sbx^3))+ x),col ="red")
j
## [1] 3563
Direct Transformation
Metode ini meruupakan membangkitkan sebaran acak berdasarkan transformasi dari sebaran lain. contoh kita ingin membangitkan sebaran khi-kuarat dengan db = 1 hal ini dapat dilakuakn dengan cara membangkitkan suatu sebaran X yang merupakan sebaran normal dengan transformasi \(Y = X^2\).
### Direct Transformation
set.seed(234)
<- rnorm(1000)
y <- y^2
x hist(x, prob = T,col="lightblue")
<- seq(0, 13, 0.01)
sbx lines(sbx, dchisq(sbx, df = 1), col = "red")
Membangkitkan sebaran T-student db = 4, dengan membangkitkan suatu sebaran \(Khi-kuadrat db =4\) dan \(Normal(0,1)\) dengan transformasi \(Y = z/(sqrt(chi/4)\)
set.seed(454)
<- rnorm(1000,0,1)
z <- rchisq(1000,4)
chi <- z/(sqrt(chi/4))
x hist(x, prob = T,col="lightblue")
<- seq(-5, 5, 0.01)
sbx <- dt(sbx, df = 4)
dt lines(sbx,dt)
Membangkitkan sebaran \(Z ~ Beta(a= 3, b =2)\) , dengan membangkitkan \(X1 ~ gamma(a=3,b=1)\) dan \(X2 ~ gamma(a=2,b=1)\) dengan \(Y = U/(u+v)\)
<- 1000; a <- 3; b <- 2;
n <- rgamma (n , shape =a , rate =1);
u <- rgamma (n , shape =b , rate =1);
v <- u/( u + v )
x
hist(x, prob = T,col="lightblue")
<- seq(0, 10, 0.01)
sbx <- dbeta(sbx,3,2)
dt lines(sbx,dt)
Membangkitkan Bilangan Acak Model Tertentu
Contoh 3 : Pada simulasi ini yang dibangkitkana adalah sebuah model regresi dengan \(Y = 2 + 1.2X1 -0.32X2 +3.1X3\)
set.seed(234)
<-1000
n<- rnorm(n,mean=0,sd=1)
x1 <- runif(n,0,1)
x2<-rgamma(n,2,4)
x3 <- rnorm(n,mean =0,sd=1)
e <- 2 +1.2*x1-0.32*x2+3.1*x3 + e
Y
<- data.frame(Y,x1,x2,x3)
reg <- lm(Y ~ ., data = reg)
modelRegresi summary(modelRegresi)
##
## Call:
## lm(formula = Y ~ ., data = reg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2813 -0.6860 0.0271 0.6615 3.9402
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.13768 0.07638 27.987 < 2e-16 ***
## x1 1.20831 0.03271 36.943 < 2e-16 ***
## x2 -0.48967 0.11100 -4.412 1.14e-05 ***
## x3 3.07261 0.09274 33.133 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.017 on 996 degrees of freedom
## Multiple R-squared: 0.7133, Adjusted R-squared: 0.7125
## F-statistic: 826.1 on 3 and 996 DF, p-value: < 2.2e-16
Referensi
Raharjo, Mulianto. (10 Maret 2021). STA561 Pemrograman Statistika: Pembangkitan Bilangan Acak. Retrieved from https://newlms.ipb.ac.id/
Soleh, A.M. (2021). STA561 Pemrograman Statistika: Pembangkitan Bilangan Acak. Retrieved from https://newlms.ipb.ac.id/ ```