Dengan mewabahnya Covid-19 di Indonesia sejak Maret 2020, ada banyak sektor yang terdampak. Salah satu di antaranya adalah sektor ekonomi, yang berpengaruh pada lonjakan Tingkat Pengganguran Terbuka (TPT) di Indonesia.
Berikut beberapa konsep dan definisi penting yang digunakan dalam pengumpulan data ketenagakerjaan oleh Badan Pusat Statistik, yaitu:
library(ggplot2)
data.tpt <- read.csv(file="TPT_Indo_2020_2021.csv", header=T)Sebelum mewabahnya Covid-19 di Indonesia, rilis data ketenagakerjaan Indonesia oleh Badan Pusat Statistik mencatat bahwa Tingkat Pengangguran Terbuka (TPT) Indonesia di wilayah perkotaan pada Februari 2020 mencapai 6,12%. Provinsi dengan tingkat pencapaian TPT tertinggi adalah Provinsi Maluku dan Papua Barat yang masing-masing tercatat sebesar 10,15% dan 9,86%. Sedangkan, TPT terendah tercatat dari Provinsi Bali dan Nusa Tenggara Barat yang masing-masing tercatat sebesar 1,35% dan 2,84%.
TPT_barchart <- ggplot(data.tpt,
aes(x = Provinsi, y = TPT.Feb.2020)) +
geom_bar(stat = "identity", color='steelblue', fill='darkblue') +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Tingkat Pengangguran Terbuka", subtitle="Tingkat Pengangguran Terbuka di Indonesia, Februari 2020",
caption="Sumber: Badan Pusat Statistik", y = "TPT (%)", x = "Provinsi")
TPT_barchartHasil rilis data Ketenagakerjaan Indonesia pada Februari 2021 oleh BPS, terungkap bahwa TPT Februari 2021 di wilayah perkotaan tercatat sebesar 8% atau naik 1,88% dibanding periode yang sama tahun lalu yang tercatat 6,12%. Adapun persentase tertinggi berasal dari Provinsi Kepulauan Riau (10,64%), Sulawesi Utara (10,43%), Kalimantan Barat (10,28%), dan Maluku (10,07%). Sedangkan, persentase terendah tercatat dari Provinsi Maluku Utara yang tercatat sebesar 3,04%.
Fenomena menarik yang dapat kita amati dari grafik adalah, tampak bahwa Provinsi Bali dan Nusa Tenggara Barat cukup merasa dampak negatif dari mewabahnya Covid-19 di Indonesia, dimana TPT kedua provinsi tersebut yang pada tahun 2020 tercatat di bawah 5%, ditahun 2021 melonjak cukup tajam menjadi di atas 5%. Mewabahnya Covid-19 menyebabkan ditutupnya pintu masuk dari dan ke luar negeri, sehingga berdampak pada menurunnya tingkat kunjungan wisatawan baik mancanegara maupun domestik, yang merupakan sektor andalan pada kedua provinsi tersebut.
TPT_barchart1 <- ggplot(data.tpt,
aes(x = Provinsi, y = TPT.Feb.2021)) +
geom_bar(stat = "identity", color='darkorchid2', fill='darkmagenta') +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Tingkat Pengangguran Terbuka", subtitle="Tingkat Pengangguran Terbuka di Indonesia, Februari 2021",
caption="Sumber: Badan Pusat Statistik", y = "TPT (%)", x = "Provinsi")
TPT_barchart1Menurut Data BPS, dari total 205,36 juta Penduduk Usia Kerja (PUK) di Indonesia, terdapat 19,10 juta orang yang terdampak akibat Covid-19 dan 74,82% di antaranya berasal dari wilayah perkotaan.
komp.tpt0 <- read.csv(file="Komponen_AK_Indo_2021.csv", header=T)
komp.tpt0| Komponen | Kota_Ags.20 | Desa_Ags.20 | Kota_Feb.21 | Desa_Feb.21 | Total_Ags.20 | Total_Feb.21 |
|---|---|---|---|---|---|---|
| Pengangguran krn covid-19 | 1.94 | 0.62 | 1.27 | 0.35 | 2.56 | 1.62 |
| BAK krn covid-19 | 0.53 | 0.23 | 0.49 | 0.16 | 0.76 | 0.65 |
| Sementara tdk bekerja krn covid-19 | 1.27 | 0.50 | 0.86 | 0.25 | 1.77 | 1.11 |
| Pengurangan jam kerja krn covid-19 | 16.82 | 7.21 | 11.67 | 4.05 | 24.03 | 15.72 |
| Total | 20.56 | 8.56 | 14.29 | 4.81 | 29.12 | 19.10 |
| Penduduk Usia Kerja (PUK) | 115.82 | 88.15 | 117.59 | 87.77 | 203.97 | 209.36 |
| % terhadap PUK | 17.75 | 9.71 | 12.15 | 5.48 | 14.28 | 9.30 |
Berdasarkan tabel di atas terlihat bahwa dari tempat tinggal, penduduk usia kerja yang terdampak Covid-19 terdiri dari penduduk perkotaan sebanyak 14.29 juta orang dan penduduk pedesaan sebanyak 4,81 juta orang pada Februari 2021. Pada semua komponen dampak Covid-19, persentase penduduk perkotaan jauh lebih besar dibandingkan dengan penduduk pedesaan. Pada komponen pengangguran karena Covid-19, kontribusi penduduk perkotaan yang terdampak mencapa 78.29% atau hampir empat kali lipat dibanding penduduk pedesaan.
komp.tpt <- c(1.27, 0.49, 0.86, 11.67)
kategori <- c("Pengangguran* = 8.89%", "Bukan Angkatan Kerja* = 3.43%", "Sementara Tidak Bekerja* = 6.02%","Pengurangan Jam Kerja* = 81.66%")
pie(komp.tpt, kategori, main = "Penduduk Usia Kerja di Perkotaan Terdampak Covid-19, Feb-2021", col = rainbow(length(komp.tpt)))Bilangan acak (random) adalah bilangan yang kemunculannya terjadi secara acak dan diharapkan memenuhi sebaran statistik tertentu (pdf/pmf, cdf). Pembangkitan bilangan acak merupakan alat yang diperlukan dalam komputasi statistik, umumnya untuk simulasi. Semua metode pembangkitan bilangan acak tergantung dari pembangkitan bilangan acak uniform.
Pseudo-Random Number Generator merupakan algoritma untuk mendapatkan
bilangan secara acak dan tidak dapat diprediksi kemunculan selanjutnya.
Bilangan acak yang dibangkitkan oleh komputer disebut bilangan acak semu
atau pseudo random number. Disebut pseudo karena
kemunculan bilangan tersebut sangat bergantung padaseed
atau nilai awal. Jika nilaiseed yang digunakan adalah
bilangan yang benar-benar acak, maka bilangan yang dihasilkan juga akan
acak sempurna (tidak memiliki pola). Nilai seed yang sama
akan menghasilkan bilangan acak yang sama pula.
Fungsi sebaran statistik di R :
dnamasebaran : density or probability mass
function (pmf)
pnamasebaran : cumulative distribution
function (cdf)
qnamasebaran : quantiles
rnamasebaran : random number
generation
fs.sebaran.R <- read.csv(file="Fs_Sebaran_R.csv", header=T)
fs.sebaran.R| Distribution | Name.in.R | Generator | Parameter |
|---|---|---|---|
| Beta | beta | rbeta | shape1,shape2 |
| Binomial | binom | rbinom | size, prob |
| Cauchy | cauchy | rcauchy | location, scale |
| Chisquare | chisq | rchisq | df |
| Exponential | exp | rexp | rate |
| F | f | rf | df1, df2 |
| Gamma | gamma | rgamma | shape |
| Gemotric | geom | rgeom | shape |
| Lognormal | lnorm | rlnorm | meanlog, sdlog |
| Logistic | logis | rlogis | location, scale |
| Negative Binomial | nbinom | rnbinom | size, prob |
| Normal (Gaussian) | norm | rnorm | mean, sd |
| Poisson | pois | rpois | lambda |
| Student’s t | t | rt | df |
| Uniform | unif | runif | min, max |
| Weibull | weibull | rweibull | Shape |
Apabila fungsi pembangkit bilangan acak belum tersedia di R karena sebarannya bukan sebaran yang umum dikenal, maka teknik yang umum digunakan untuk membangkitkan bilangan acak adalah sebagai berikut :
Inverse-transform method -> dapat digunakan untuk peubah acak yang berdistribusi kontinu maupun diskrit
Acceptance-rejection method -> dapat digunakan jika sebuah distribusi memiliki fungsi massa dan metode lain tidak efisien digunakan
Other Special techniques :
Direct Transformation -> menggunakan teori dari sebaran (sebaran dari suatu peubah acak merupakan sebaran dari peubah acak lain)
Convolution -> untuk beberapa distribusi yang mungkin dapat dinyatakan dalam jumlah (X(X = Y1Y1 + Y2Y2 + … + Ym)Ym)
dan metode yang lain
Berdasarkan teori Probabilty Integral Transformation, jika X adalah peubah acak kontinu dengan cdf F(x), maka X ~ Uniform (0,1).
Untuk Sebaran Kontinu
Langkah :
Untuk fungsi cdf : f = F(x)
Bangkitkan u dari U(0,1)
Maka, X = F^(-1)(u)
Latihan
Diketahui :
pdf:f(x)=3x2,0<x<1pdf:f(x)=3x2,0<x<1
F(x)=x3,0<x<1F(x)=x3,0<x<1
F−1(u)=u1/3
n = 100 # misalkan membangkit 1000 bilangan acak
u = runif(n)
x = u^(1/3)
hist(x, prob = TRUE, col = "deeppink3")
y = seq(0,1,.01)
lines(y, 3*y^2)Diketahui :
X∼Exp(λ),x>0X∼Exp(λ),x>0
F(x)=1−e−λxF(x)=1−e−λx
F−1(u)=−1λlog(1−u)
set.seed(1501212084)
exp = function (n,lambda){
u = runif(n)
x = -log(u)/lambda
return (x)
}
#metode invers
exp1 = exp(100,5)
#fungsi bawaan R
exp2 = rexp(100, rate = 3)
par(mfrow = c(1,2))
hist(exp1, prob = TRUE, main = " Exp : Metode Invers-Transform" , col = "darkorange3")
hist(exp2, prob = TRUE, main = " Exp : Fungsi Rexp" , col = "darkorange3")Unruk Sebaran Diskrit
Jika X ~ p.a diskrit dan …<xi−1<xi<xi+1<……<xi−1<xi<xi+1<… adalah titik tidak kontinu dari F(x), maka transformasi inversnya adalah : F−1(u)=xiF−1(u)=xi dimana F(xi−1)<u<F(xi)F(xi−1)<u<F(xi)
Langkah :
Bangkitkan U(0,1)
Tentukan xixi dimana F(xi−1)<u<F(xi)
n = 100
p = 0.5
u = runif(n)
x = as.integer (u > 0.65)
barplot (table(x) , col = "brown3")Pada metode sebelumnya, bilangan acak dapat dibangkitkan dari suatu sebaran jika mana sebaran tersebut memiliki invers dari sebaran kumulatifnya. Jika sebarang kumulatif tidak bisa diperoleh atau sulit diperoleh, maka dapat menggunakan metode Acceptance-Rejection Method.
Misalkan X dan Y adalah peubah acak dengan pdf/pmf f dan g dan terdapat konstanta c sehingga : f(t)g(t)≤cf(t)g(t)≤c untuk semua t:f(t)>0t:f(t)>0
Langkah :
Tetapkan peubah acak Y dengan density g yang memenuhi f(t)g(t)≤cf(t)g(t)≤c untuk semua t:f(t)>0t:f(t)>0
Untuk setiap satu bilangan acak :
Bangkitkan y acak dari sebaran dengan density g
Bangkitkan u acak dari sebaran uniform (0,1)
Jika u < f(y)cg(y)f(y)cg(y) terima y dan x = y ; selainnya tolak y dan ulangi langkah 2 awal
Diketahui : X ~ Beta (= 2 , = 2)
pdf:f(x)=6x(1−x),0<x<1
n = 1000
k = 0
j = 0
y = numeric(n)
while (k < n) {
u = runif(1)
j = j+1
x = runif(1)
if (x*(1-x) > u) {
k = k+1 # terima x
y[k] = x
}
}
hist(y, prob = TRUE , col = "coral3")
sbx <- seq(0, 1, 0.01)
lines(sbx, dbeta(sbx, 2, 2))Beberapa transformasi dari transformasi invers sebaran dapat digunakan untuk membangkitkan bilangan acak.
Berikut beberapa contoh peubah acak transformasi :
Diketahui :
Jika: U∼Gamma(r,λ) dan V∼Gamma(s,λ)U∼Gamma(r,λ) dan V∼Gamma(s,λ)
kemudian: X=UU+V∼Beta(r,s)
n = 100
a = 3
b = 2
u = rgamma (n , shape =a , rate =1);
v = rgamma (n , shape =b , rate =1);
x = u/( u + v )
q = qbeta ( ppoints ( n ) , a , b )
qqplot (q, x , cex =0.25 , xlab =" Beta (3 , 2)", ylab =" Sample ")
Diketahui :
U,VU,V peubah acak saling bebas menyebar U(0,1)U(0,1), kemudian :
X=[1+log(V)log(1−(1−θ)U)]
n = 1000
theta = 0.5
u = runif ( n ) # membangkitkan angka logarithmic
v = runif ( n )
x = floor (1 + log( v ) / log (1 - (1 - theta )^ u ))
k = 1: max( x ) # hitung peluang logarithmic
p = -1 / log (1 - theta ) * theta ^ k / k
se = sqrt ( p*(1 - p )/n )
p.hat = tabulate ( x )/n
print ( round ( rbind (p.hat , p , se) , 3))## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## p.hat 0.718 0.177 0.072 0.015 0.008 0.006 0.002 0.002
## p 0.721 0.180 0.060 0.023 0.009 0.004 0.002 0.001
## se 0.014 0.012 0.008 0.005 0.003 0.002 0.001 0.001
Terkadang kita ingin membangkitkan bilangan acak lebih dari satu yang
di antara peubah bebas yang dibangkitkan tersebut memiliki hubungan.
Pada pemrograman R untuk membangkitkan bilangan acak multivariate
normal bisa dilakukan melalui library MASS.
Jika korelasi 0 tinggal membangkitkan univariate sebanyak yang
diinginkan, tapi jika membutuhkan korelasi dapat menggunakan
multivariate normal.
Mendapatkan multivariate normal dengan teknik eigen.
rmvn.eigen <- function(n, mu, Sigma) {
d <- length(mu)
ev <- eigen(Sigma, symmetric = TRUE)
lambda <- ev$values
V <- ev$vectors
R <- V %*% diag(sqrt(lambda)) %*% t(V)
Z <- matrix(rnorm(n * d), nrow = n, ncol = d)
X <- Z %*% R + matrix(mu, n, d, byrow = T)
X
}
mu <- c(0, 0)
Sigma <- matrix(c(1, 0.9, 0.9, 1), nrow = 2, ncol = 2)
X <- rmvn.eigen(1000, mu, Sigma)
cov(X) ## [,1] [,2]
## [1,] 1.0134634 0.9080515
## [2,] 0.9080515 1.0092785
head(X)## [,1] [,2]
## [1,] -0.76760971 -0.47948283
## [2,] 0.61549349 1.22976423
## [3,] 0.51799373 0.09145296
## [4,] 0.74496944 -0.09504890
## [5,] 0.03126962 -0.10163019
## [6,] -0.64548182 -0.23737525
Jika dalam multivariate antar X memiliki korelasi. Pada model, ada
satu peubah yang merupakan fungsi dari peubah lainnya. Membangkitkan
bilangan acak untuk model berarti membangkitkan bilangan acak dengan
peubah lebih dari satu dan peubahnya memiliki keterkaitan fungsi.
Dicontohkan dibangkitkan dari model regresi linear. Bangkitkan peubah Y,
X1, X2 dan X3 berdasarkan model regresi linear berganda berikut
ini:
Y=10+3X1+5X2+7X3+e
dengan mengasumsikan bahwa ϵ ~ N(0,1). Banyaknya amatan yang dibangkitkan adalah 1000
# banyaknya amatan
n <- 1000
set.seed(12)
epsilon <- rnorm(n, mean = 0, sd = 1)
# bangkitkan peubah penjelas Xi yang saling bebas
set.seed(10)
X <- replicate(3, rnorm(n, mean = 0, sd = 1.5))
head(X)## [,1] [,2] [,3]
## [1,] 0.02811926 1.5750205 -0.46179747
## [2,] -0.27637881 0.4291389 1.13712837
## [3,] -2.05699582 0.3608472 -0.86079512
## [4,] -0.89875157 1.2490578 -1.40811669
## [5,] 0.44181769 -0.3344748 -0.04154899
## [6,] 0.58469145 0.4325163 -1.59937298
# bangkitkan peubah Y dengan menggunakan model regresi
betas <- matrix(c(10, 3, 5, 7), nrow = 4, ncol = 1)
Xgab <- cbind(1, X)
Y <- Xgab %*% betas + epsilon
dataRegresi <- data.frame(Y, X)
colnames(dataRegresi) <- c("Y", "X1", "X2", "X3")
head(dataRegresi)| Y | X1 | X2 | X3 |
|---|---|---|---|
| 13.246310 | 0.0281193 | 1.5750205 | -0.4617975 |
| 20.853626 | -0.2763788 | 0.4291389 | 1.1371284 |
| -1.349061 | -2.0569958 | 0.3608472 | -0.8607951 |
| 2.772212 | -0.8987516 | 1.2490578 | -1.4081167 |
| 7.364594 | 0.4418177 | -0.3344748 | -0.0415490 |
| 2.448749 | 0.5846915 | 0.4325163 | -1.5993730 |
# pengecekan dengan model regresi
modelRegresi <- lm(Y ~ ., data = dataRegresi)
summary(modelRegresi)##
## Call:
## lm(formula = Y ~ ., data = dataRegresi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0364 -0.6052 -0.0207 0.6087 3.1774
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.97484 0.03033 328.8 <2e-16 ***
## X1 2.97225 0.02042 145.6 <2e-16 ***
## X2 4.97282 0.01939 256.5 <2e-16 ***
## X3 7.00493 0.01989 352.2 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9589 on 996 degrees of freedom
## Multiple R-squared: 0.9955, Adjusted R-squared: 0.9954
## F-statistic: 7.275e+04 on 3 and 996 DF, p-value: < 2.2e-16
IPB University-Prodi Statistika dan Sains Data 2021↩︎