Tugas UTS STA561 Kelompok 2
Klik disini untuk ke halaman rpubs.
Soal 1
Buatlah program R untuk melakukan proses berikut ini!
Bangkitkanlah data populasi yang terdiri atas 1000 amatan dengan peubah:
o No : 1 sd 500, 9001 sd 9500 (integer)
o ID : G0001 sd G0500, G9001 sd G9500 (diperoleh berdasarkan kolom No, dengan penambahan huruf “G” didepan No dan jumlah digitnya harus 4)
o Kelas : “Paralel 1” jika ID genap, dan “Paralel 2” jika ID ganjil (factor)
o UTS : Diperoleh dengan membangkitkan bilangan acak yang menyebar 𝑁(𝜇 = 70, 𝜎= 25)
o Indeks : Diperoleh dengan membangkitkan bilangan acak yang menyebar exponential(𝜃 = 1)
Hilangkan data peubah Indeks yang bernilai lebih dari 1 (menjadi missing value)
Hitunglah rata-rata dari UTS yang Indeks-nya ada
Buatlah data sampel berukuran 100 amatan dari Kelas “Paralel 1” yang Indeks-nya ada
Hitunglah rata-rata dari UTS pada data sampel yang terambil, lalu bandingkan dengan populasi
Membangkitkan Data Populasi
Membangkitkan data populasi yang terdiri atas 1000 amatan.
library(tidyverse)
#install.packages("DT")
library(DT)# Peubah No
No <- c(seq(500),seq(9001, 9500))
# Peubah ID
ID <- sprintf("G%04d", No)
#Peubah Kelas
Kelas <- factor(ifelse(No %% 2 == 0, "Paralel 1", "Paralel 2"))
#Peubah UTS
set.seed(5612) #set.seed dibuat 5612 menandakan STA561 kelompok 2
UTS <- round(rnorm(1000, 70, 5),4) #membangkitkan bilangan acak yang menyebar normal dengan 4 angka di belakang koma
#Peubah Indeks
set.seed(5612) #set.seed dibuat 5612 menandakan STA561 kelompok 2
Indeks <- round(rexp(1000, 1),4) #membangkitkan bilangan acak yang menyebar eksponensial dengan 4 angka di belakang koma
# Membuat Data Frame data.Populasi
data.Populasi <- data.frame(No, ID, Kelas, UTS, Indeks)
# Menampilkan data frame data populasi dengan menggunakan formatStyle
data.Populasi %>% datatable(data.Populasi, class = 'cell-border stripe') %>%
formatStyle('Indeks', color = styleInterval(1, c('black', 'red')), backgroundColor = '#b3ffb3', fontWeight = 'bold',) Menghilangkan data Indeks > 1
Menghilangkan data peubah Indeks yang bernilai lebih dari 1 (menjadi missing value)
#Mengubah data indeks > 1 menjadi NA
data.Populasi$Indeks <- ifelse(data.Populasi$Indeks >1, NA, data.Populasi$Indeks)
#Menampilkan tabel data populasi dengan formatStyle
data.Populasi %>% datatable(data.Populasi, class = 'cell-border stripe') %>%
formatStyle('Indeks', color = styleInterval(1, c('black', ' ')), backgroundColor = '#b3ffb3', fontWeight = 'bold',) Menghitung Rata-rata UTS yang ada Indeks-nya
Menghitung rata-rata dari UTS yang Indeks-nya ada.
# Filter data untuk yang ada Indeks nya
data.adaindeks <- data.Populasi %>%
filter(!is.na(Indeks))
# Menghitung Rata-rata UTS yang ada indeksnya
rata2UTS <- mean(data.adaindeks$UTS)
cat("rata-rata dari UTS yang Indeks-nya ada sebesar", rata2UTS)## rata-rata dari UTS yang Indeks-nya ada sebesar 70.26631
Menarik 100 sampel kelas Paralel 1 yang ada indeks-nya
Menarik data sampel berukuran 100 amatan dari Kelas “Paralel 1” yang Indeks-nya ada.
# Filter data untuk kelas Paralel 1
data.adaindekspar1 <- data.adaindeks %>%
filter(Kelas =="Paralel 1")
# Menarik sampel dari populasi dengan 100 amatan
set.seed(5612) #set.seed dibuat 5612 menandakan STA561 kelompok 2
data.sampel <- data.adaindekspar1 %>%
sample_n(100)
# Menampilkan data sampel dengan formatStyle
data.sampel %>% datatable(data.sampel, class = 'cell-border stripe') %>%
formatStyle('Kelas', color = ' ', backgroundColor = '#b3ffb3', fontWeight = 'bold',) %>%
formatStyle('Indeks', color = ' ', backgroundColor = '#b3ffb3', fontWeight = 'bold',) Menghitung Rata-rata UTS
Menghitung rata-rata dari UTS pada data sampel yang terambil, lalu membandingkan dengan populasi.
# Menghitung rata-rata UTS data sampel
rata2UTSsampel <- mean(data.sampel$UTS)
cat("rata-rata dari UTS pada data sampel yang terambil sebesar", rata2UTSsampel)## rata-rata dari UTS pada data sampel yang terambil sebesar 71.34412
# Menghitung rata-rata UTS data populasi
rata2UTSpop <- mean(data.Populasi$UTS)
cat("rata-rata dari UTS pada data populasi sebesar", rata2UTSpop)## rata-rata dari UTS pada data populasi sebesar 70.09699
Rata-rata dari 100 sampel acak yang dipilh tidak jauh berbeda dengan rata-rata populasi. Adapun rata-rata dari populasi adalah 70.09699, dan rata-rata sampel adalah 71.34412.
Soal 2
Buatlah fungsi di R yang bernama RKU yang dapat digunakan untuk menghitung regresi komponen utama (principal component regression) dengan output utama adalah koefisien penduga parameter regresi komponen utama yang sudah ditransformasi balik untuk peubah X!
Pembahasan:
Tahapan dalam menghitung regresi komponen utama (principal component regression):
Melakukan transformasi data X (peubah bebas) ke Komponen Utama. Dalam transformasi, dilakukan juga penghitungan vektor ciri dan akar ciri.
Memilih komponen utama dengan akar ciri >= 1 (Sriningsih, M., Hatidja, D., dan Prang, J.D. (2018))
Membuat dataframe komponen utama terpilih dengan data y (peubah respon)
Melakukan pendugaan koefisien regresi komponen utama dan menyusun modelnya
Melakukan transformasi balik model regresi komponen utama menjadi peubah asal x (NCSS LLC 2019)
Menghitung intercept penduga parameter regresi komponen utama yang sudah ditransformasi balik untuk peubah X (Agustini N, Nugroho S dan Agustina D (2015))
Menampilkan Output berupa list yang berisi vektor koefisien RKU untuk X, vektor koefisien RKU untuk PC, matriks skor komponen utama, dan list akar ciri-vektor ciri
RKU <- function(data.x, data.y){
#Transformasi Ke Komponen Utama
pca <- prcomp(data.x, center=TRUE, scale.=TRUE) #melakukan analisis komponen utama
vektor.ciri <- pca$rotation #vektor ciri
matriks.vector.ciri <- as.data.frame(vektor.ciri) #Matriks Vector Ciri
akar.ciri <- pca$sdev #akar ciri
# Memilih komponen utama dengan akar ciri >= 1 (Sriningsih, M., Hatidja, D., dan Prang, J.D. (2018))
k <- which(akar.ciri >= 1, arr.ind = TRUE)
k <- as.integer(k)
# Memilih komponen utama yang bersesuaian dengan akar ciri
PKU = c();
for(i in 1:length(k)){
PKU[i+1] <-paste0("PC",k[i])
}
# Membuat matriks vektor ciri terpilih
eigen.baru <- matriks.vector.ciri[names(matriks.vector.ciri)[names(matriks.vector.ciri) %in% PKU]]
eigen.baru <- as.matrix(eigen.baru)
#Membuat dataframe komponen utama terpilih dan y
matriks.skor <- pca$x #matriks skor komponen utama
pcs <- as.data.frame(matriks.skor) #membuat dataframe dari skor komponen utama
data.pcr <- cbind(data.y, pcs) #menambahkan data y
PKU.terpilih <- pcs[names(pcs)[names(pcs) %in% PKU]]
#Pemodelan Regresi Komponen Utama
pcr <- lm(data.y ~ ., data = data.pcr) #melakukan pendugaan koefisien regresi
beta.pcr <- as.matrix(pcr$coefficients[-1])
KoefisienPC <- as.vector(pcr$coefficients)[1:as.integer(max(k)+1)] #matriks koefisien regresi komponen utama
#Transformasi Balik Model Regresi Komponen Utama ke Peubah X
V <- as.matrix(vektor.ciri) #matriks vektor ciri
beta.X <- V[,1:max(k)] %*% as.matrix(beta.pcr[1:max(k)]) #melakukan transformasi peubah komponen utama menjadi peubah asal x (NCSS LLC 2019)
#Menampilkan Output utama koefisien penduga parameter regresi komponen utama yang sudah ditransformasi balik untuk peubah X (Agustini N, Nugroho S dan Agustina D (2015))
vector.xbar <- pca$center #vektor xbar (nilai tengah)
intersepTransformasi <- mean(data.y)- vector.xbar%*%beta.X #menghitung intercept akhir
namakolom=as.factor(colnames(data.x))
beta.X <- rbind(intersepTransformasi, beta.X)#menambahkan intercept akhir dan koefisien beta hasil transformasi
rownames(beta.X) = c("intercept",(if (length(colnames(data.x))==0) {rep(paste("beta",1:ncol(data.x),sep=""))} else {levels(namakolom)}))
#Menampilkan Output Keseluruhan
akarCiriTerpilih <- akar.ciri[1:max(k)] #memilih akar ciri terpilih
output <- list(Akar.Ciri = akarCiriTerpilih, Vektor.Ciri =eigen.baru, skor.KU= datatable(PKU.terpilih, class = 'cell-border stripe'), Koefisien.PC = KoefisienPC, Koefisien.X = beta.X)
return(output)
}Soal 3
Bangkitkan peubah 𝑌, 𝑋1, 𝑋2, 𝑋3 sebanyak 1000 amatan berdasarkan model regresi linear berganda berikut ini:
𝑌 = 10 + 3𝑋1 + 5𝑋2 + 7𝑋3 + 𝜀
dengan mengasumsikan bahwa 𝜀~𝑁(0,1) dan antara peubah bebas terjadi multikolinearitas (tidak ada batasan fungsi/package yang digunakan)!
Kemudian hitung koefisien penduga parameter regresi komponen utama yang sudah ditransformasi balik menggunakan fungsi RKU yang sudah dibuat di nomor 2!
Membangkitkan Data
Tahapan dalam melakukan pembangkitan data:
Mendefinisikan model regresi linier 𝑌 = 10 + 3𝑋1 + 5𝑋2 + 7𝑋3 + 𝜀
Menentukan matriks ragam peragam dengan menggunakan besarnya korelasi antarpeubah bebas adalah 0.96 (antara peubah bebas terjadi multikolinearitas)
Membangkitkan data 𝜀 sebanyak 1000 dengan mengasumsikan bahwa 𝜀~𝑁(0,1)
Menentukan nilai tengah peubah bebas sebesar 1
Membangkitkan peubah X dan menghitung peubah y
library(MASS)
library(car)# Misal Besar korelasi antarpeubah bebas adalah 0.96
b0 <- 10; b1 <- 3; b2 <- 5; b3 <- 7 #𝑌 = 10 + 3𝑋1 + 5𝑋2 + 7𝑋3 + 𝜀
b0topi <- NULL; b1topi <- NULL; b2topi <- NULL; b3topi <- NULL
Sigma <- matrix(c(1,0.96,0.96,0.96,1,0.96,0.96,0.96,1),nrow=3,ncol=3) #matriks ragam peragam
#membangkitkan data sebanyak 1000
set.seed(5612) #set.seed dibuat 5612 menandakan STA561 kelompok 2
eps <- rnorm(1000) # membangkitkan e~N(0,1) sebanyak 1000
mu <- c(1, 1, 1)
x <- round(mvrnorm(1000,mu,Sigma),4) #membangkitkan peubah X dengan ketentuan 4 angka di belakang koma
y <- round((b0 + b1*x[,1] + b2*x[,2] + b3*x[,3]+ eps),4) #menghitung peubah y dengan ketentuan 4 angka di belakang koma
pembangkitandata <- data.frame(y,x) #peubah Y dan X yang telah dibangkitkan
# Menampilkan data yang telah dibangkitkan dengan datatable
datatable(pembangkitandata, class = 'cell-border stripe') Memeriksa Data Yang Telah Dibangkitkan
Tahapan yang dilakukan dalam memeriksa data yang telah dibangkitkan:
Menampilkan nilai korelasi antar peubah bebas
Melakukan pengecekan multikolinieritas dengan VIF
#menampilkan nilai korelasi antar peubah bebas
data_cor <- cor(x)
korelasi <- function(data_cor){
hasil <- data_cor %>% corrplot::corrplot(method="color",
type="upper",
order="hclust",
addCoef.col = "white",
tl.col="black",
insig = "blank",
diag=FALSE)
return(hasil)
}
korelasi(data_cor)## 1 2 3
## 1 1.0000000 0.9600007 0.960625
## 2 0.9600007 1.0000000 0.961017
## 3 0.9606250 0.9610170 1.000000
#Melakukan pengecekan multikolinieritas dengan VIF
cekmultikolinearitas <-lm(pembangkitandata$y~pembangkitandata$X1+pembangkitandata$X2+pembangkitandata$X3)
vif(cekmultikolinearitas)## pembangkitandata$X1 pembangkitandata$X2 pembangkitandata$X3
## 16.98322 16.81749 17.24701
Karena nilai VIF > 10 maka potensi penyebab kolinearitas.
Menghitung Koefisien Penduga Parameter Regresi Komponen Utama yang sudah ditransformasi balik menggunakan fungsi RKU
Tahapan yang dilakukan:
Memasukkan argumen input x dan y yang telah dibangkitkan ke dalam fungsi RKU
Menampilkan koefisien penduga parameter regresi komponen utama yang sudah ditransformasi balik menggunakan fungsi RKU yang sudah dibuat di soal nomor 2
#menghitung koefisien penduga parameter regresi komponen utama yang sudah ditransformasi balik menggunakan fungsi RKU yang sudah dibuat di soal nomor 2
PCR = RKU(x,y)PCR$skor.KUPCR ## $Akar.Ciri
## [1] 1.709121
##
## $Vektor.Ciri
## PC1
## [1,] 0.5773348
## [2,] 0.5772562
## [3,] 0.5774598
##
## $skor.KU
##
## $Koefisien.PC
## [1] 24.850080 8.778547
##
## $Koefisien.X
## [,1]
## intercept 9.794063
## beta1 5.068161
## beta2 5.067471
## beta3 5.069258
Maka persamaan regresi hasil RKU yang sudah ditransformasi balik adalah:
Yduga=9.794063+5.068161X1+5.067471X2+5.069258X3
Referensi
Agustini N., Nugroho S., dan Agustina D. (2015). Metode Latent Root Regression (LRR) dalam Mengatasi Masalah Multikolinieritas [Skripsi]. Matematika FMIPA, Universitas Bengkulu.
NCSS LCC. Principal Components Regression (2019). NCSS, LLC. Kaysville, Utah, USA, ncss.com/software/ncss.
Sriningsih, M., Hatidja, D., dan Prang, J.D. (2018).Penanganan Multikolinearitas dengan Menggunakan Analisis Regresi Komponen Utama pada Kasus Impor Beras di Provinsi SULUT. Jurnal Ilmiah Sains, 18(1), https://doi.org/10.35799/jis.18.1.2018.19396
ohyver, M. (2012).Pemodelan Principal Component Regression dengan Software R. ComTech, 3(1), 177-185.https://media.neliti.com/media/publications/166152-ID-pemodelan-principal-component-regression.pdf
TERIMA KASIH
Mahasiswa Pascasarjana Statistika dan Sains Data, IPB University, az_zahramonra@apps.ipb.ac.id↩︎
Mahasiswa Pascasarjana Statistika dan Sains Data, IPB University, 09021984ismail@apps.ipb.ac.id↩︎
Mahasiswa Pascasarjana Statistika dan Sains Data, IPB University, reniamelia@apps.ipb.ac.id↩︎