Tugas UTS STA561 Par 1 Kel 1
Soal 1
Buatlah program R untuk melakukan proses berikut ini!
Bangkitkanlah data populasi yang terdiri atas 1000 amatan dengan peubah:
No : 1 sd 500, 9001 sd 9500 (integer)
ID : G0001 sd G0500, G9001 sd G9500 (diperoleh berdasarkan kolom No, dengan penambahan huruf “G” di depan No dan jumlah digitnya harus 4)
Kelas : “Paralel 1” jika ID genap, dan “Paralel 2” jika ID ganjil (factor)
UTS : Diperoleh dengan membangkitkan bilangan acak yang menyebar 𝑁(𝜇 = 70, 𝜎2= 25)
Indeks : Diperoleh dengan membangkitkan bilangan acak yang menyebar exp(𝜃 = 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.
# 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(3009)
UTS <- round(rnorm(1000, 70, 5),2) #membangkitkan bilangan acak yang menyebar normal dengan 2 angka di belakang koma
# Peubah Indeks
set.seed(3009)
Indeks <- round(rexp(1000, 1),2) #membangkitkan bilangan acak yang menyebar eksponensial dengan 2 angka di belakang koma
# Membuat Data Frame Populasi
Populasi <- data.frame(No, ID, Kelas, UTS, Indeks)
# Menampilkan data frame populasi dengan menggunakan formatStyle
Populasi %>% datatable(Populasi, class = 'cell-border stripe') %>%
formatStyle('Kelas', target = 'row',
backgroundColor = styleEqual(c("Paralel 1", "Paralel 2"), c('linen', 'white'))) %>%
formatStyle('Indeks', color = styleInterval(1, c('black', 'red')), fontWeight = 'bold',
)Menghilangkan data Indeks > 1
Menghilangkan data peubah Indeks yang bernilai lebih dari 1 (menjadi missing value).
# Mengubah data indeks > 1 menjadi NA
Populasi$Indeks <- ifelse(Populasi$Indeks >1, NA, Populasi$Indeks)
# Menampilkan tabel data populasi dengan formatStyle
Populasi %>% datatable(Populasi, class = 'cell-border stripe') %>%
formatStyle('Kelas', target = 'row',
backgroundColor = styleEqual(c("Paralel 1", "Paralel 2"), c('linen', 'white'))) %>%
formatStyle('Indeks', color = styleInterval(1, c('black', ' ')), 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.indeks <- Populasi %>%
filter(!is.na(Indeks))
# Menghitung Rata-rata UTS yang ada indeksnya
rata2UTS <- mean(data.indeks$UTS)
rataUTS <- round(rata2UTS,2)
cat("rata-rata dari UTS yang Indeks-nya ada yaitu sebesar", rataUTS)## rata-rata dari UTS yang Indeks-nya ada yaitu sebesar 70.13
Menarik 100 sampel dari kelas Paralel 1 yang ada indeks-nya
Buat data sampel berukuran 100 amatan dari Kelas “Paralel 1” yang Indeks-nya ada.
# Filter data untuk kelas Paralel 1
data.indekspar1 <- data.indeks %>%
filter(Kelas =="Paralel 1")
# Menarik sampel dari populasi dengan 100 amatan
set.seed(3009)
sampel <- data.indekspar1 %>%
sample_n(100)
# Menampilkan data sampel dengan formatStyle
sampel %>% datatable(sampel, class = 'cell-border stripe') %>%
formatStyle('Kelas', target = 'row',
backgroundColor = 'linen') %>%
formatStyle('Indeks', 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(sampel$UTS)
rataUTSsampel <- round(rata2UTSsampel,2)
cat("rata-rata dari UTS pada data sampel yang terambil sebesar", rataUTSsampel)## rata-rata dari UTS pada data sampel yang terambil sebesar 70.23
# Menghitung rata-rata UTS data populasi
rata2UTSpop <- mean(Populasi$UTS)
rataUTSpop <- round(rata2UTSpop,2)
cat("rata-rata dari UTS pada data populasi sebesar", rataUTSpop)## rata-rata dari UTS pada data populasi sebesar 70.21
Rata-rata dari 100 sampel acak yang dipilih tidak jauh berbeda dengan rata-rata populasi. Adapun rata-rata populasi adalah 70,21 sementara rata-rata sampel adalah 70,23.
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!
Petunjuk dan Ketentuan
Petunjuk
Tahapan dalam menghitung RKU (PCR)
- Menstandardisasikan data ke dalam normal baku.
- Menghitung vektor eigen dan nilai eigen.
- Pemilihan komponen utama dengan nilai eigen > 1 (Jurnal Ilmiah Edutic /Vol.3, No.2, Mei 2017).
- Melakukan pendugaan koefisien regresi komponen utama dan menyusun modelnya.
- Melakukan transformasi balik model regresi komponen utama menjadi peubah asal x.
- Menghitung intercept penduga parameter regresi komponen utama yang sudah ditransformasi balik untuk peubah x.
- Menampilkan output berupa list yang berisi vektor koefisien RKU untuk x, vektor koefisien RKU untuk PC, matriks skor komponen utama, dan list nilai eigen dan vektor eigen.
Berikut adalah tahapan pembuatan fungsinya:
RKU <- function(x, y){
#Standarisasi data ke dalam normal baku
pca <- prcomp(x, center=TRUE, scale.=TRUE)
#Vektor Eigen
vektor.eigen <- pca$rotation
#Matriks Vector Eigen
matriks.vector.eigen <- as.data.frame(vektor.eigen)
#Nilai Eigen
nilai.eigen <- pca$sdev
#Memilih komponen utama dengan nilai eigen > 1
k <- which(nilai.eigen > 1, arr.ind = TRUE)
k <- as.integer(k)
#Memilih komponen utama yang bersesuaian dengan nilai eigen
PKU = c();
for(i in 1:length(k)){
PKU[i+1] <-paste0("PC",k[i])
}
#Membuat matriks vektor eigen terpilih
eigen.baru <- matriks.vector.eigen[names(matriks.vector.eigen)[names(matriks.vector.eigen) %in% PKU]]
eigen.baru <- as.matrix(eigen.baru)
#Membuat dataframe komponen utama terpilih dan y
#matriks skor komponen utama
matriks.skor <- pca$x
#membuat dataframe dari skor komponen utama
pcs <- as.data.frame(matriks.skor)
#menambahkan data y
data.pcr <- cbind(y, pcs)
PKU.terpilih <- pcs[names(pcs)[names(pcs) %in% PKU]]
#Pemodelan Regresi Komponen Utama
#melakukan pendugaan koefisien regresi
pcr <- lm(y ~ ., data = data.pcr)
beta.pcr <- as.matrix(pcr$coefficients[-1])
#matriks koefisien regresi komponen utama
KoefisienPC <- as.vector(pcr$coefficients)[1:as.integer(max(k)+1)]
#Transformasi Model Regresi Komponen Utama ke Peubah X
#matriks vektor eigen
V <- as.matrix(vektor.eigen)
#melakukan transformasi peubah komponen utama menjadi peubah asal X
beta.X <- V[,1:max(k)] %*% as.matrix(beta.pcr[1:max(k)])
#Menampilkan Output utama koefisien penduga parameter regresi komponen utama yang sudah ditransformasi balik untuk peubah X
#vektor xbar (nilai tengah)
vector.xbar <- pca$center
#menghitung intercept akhir
intersepTransformasi <- mean(y)- vector.xbar%*%beta.X
namakolom=as.factor(colnames(x))
#menambahkan intercept akhir dan koefisien beta hasil transformasi
beta.X <- rbind(intersepTransformasi, beta.X)
rownames(beta.X) = c("intercept",(if (length(colnames(x))==0) {rep(paste("beta",1:ncol(x),sep=""))} else {levels(namakolom)}))
#Menampilkan Output Akhir
NilaiEigenTerpilih <- nilai.eigen[1:max(k)] #memilih nilai eigen terpilih
output <- list(Nilai.Eigen = NilaiEigenTerpilih, Vektor.Eigen =eigen.baru, skor.KU= datatable(PKU.terpilih, class = 'cell-border stripe'), Koefisien.PC = KoefisienPC, Koefisien.X = beta.X)
return(output)
}Soal 3
Bangkitkan peubah Y,X1,X2,X3 sebanyak 1000 amatan berdasarkan model regresi linear berganda berikut ini: 𝑌=10+3X1+5X2+7X3+𝜀 dengan mengasumsikan bahwa 𝜀~ N(0,30) dan antara peubah bebas terjadi multikolinearitas! Kemudian hitung koefisien penduga parameter regresi komponenutama yang sudah ditransformasi balik menggunakan fungsi RKU yang sudah dibuat di nomor 2! (tidak ada batasan fungsi/package yang digunakan).
Membangkitkan Data
Tahapan dalam melakukan pembangkitan data:
Mendefinisikan model regresi linier 𝑌=10+3X1+5X2+7X3+𝜀
Menentukan matriks ragam peragam dengan menggunakan besarnya korelasi antarpeubah bebas adalah 0.90 (antara peubah bebas terjadi multikolinearitas).
Membangkitkan data 𝜀 sebanyak 1000 dengan mengasumsikan bahwa 𝜀~ N(0,30).
Menentukan nilai tengah peubah bebas sebesar 1.
Membangkitkan peubah X dan menghitung peubah Y.
# Misal besar korelasi antarpeubah bebas adalah 0.90
b0 <- 10; b1 <- 3; b2 <- 5; b3 <- 7 #𝑌=10+3X1+5X2+7X3+𝜀
b0_hat <- NULL; b1_hat <- NULL; b2_hat <- NULL; b3_hat <- NULL
Sigma <- matrix(c(1,0.90,0.90,0.90,1,0.90,0.90,0.90,1),nrow=3,ncol=3) #matriks ragam peragam
#membangkitkan data sebanyak 1000
set.seed(2056) #set.seed dibuat 2056 menandakan pukul 20:56
eps <- rnorm(1000,mean=0,sd=sqrt(30)) # membangkitkan bilangan acak sebanyak 1000
mu <- c(1, 1, 1)
x <- round(mvrnorm(1000,mu,Sigma),3) #membangkitkan peubah X dengan ketentuan 3 angka di belakang koma
y_hat<- round((b0 + b1*x[,1] + b2*x[,2] + b3*x[,3]+ eps),3) #menghitung peubah y dengan ketentuan 3 angka di belakang koma
generatedata <- data.frame(y_hat,x) #peubah Y dan X yang telah dibangkitkan
# Menampilkan data yang telah dibangkitkan
datatable(generatedata, class = 'cell-border stripe')Memeriksa Data yang telah dibangkitkan
Tahapannya yaitu:
Menampilkan nilai korelasi antar peubah bebas.
Melakukan pengecekan multikolinieritas dengan VIF.
# Menampilkan nilai korelasi antar peubah bebas
datacor <- cor(x)
korelasi <- function(datacor){
hasil <- datacor %>% corrplot::corrplot(method="circle",
type="upper",
order="hclust",
addCoef.col = "white",
tl.col="black",
insig = "blank",
diag=FALSE)
return(hasil)
}
korelasi(datacor)## $corr
## 1 2 3
## 1 1.0000000 0.9052263 0.9033432
## 2 0.9052263 1.0000000 0.9112107
## 3 0.9033432 0.9112107 1.0000000
##
## $corrPos
## xName yName x y corr
## 1 2 1 2 3 0.9052263
## 2 3 1 3 3 0.9033432
## 3 3 2 3 2 0.9112107
##
## $arg
## $arg$type
## [1] "upper"
# Melakukan pengecekan multikolinieritas dengan VIF
multikolinearitas <-lm(generatedata$y~generatedata$X1+generatedata$X2+generatedata$X3)
vif(multikolinearitas)## generatedata$X1 generatedata$X2 generatedata$X3
## 6.931943 7.515108 7.375982
Menghitung Koefisien Penduga Parameter RKU
Tahapannya yaitu:
Memasukkan argumen input x dan y yang telah dibangkitkan ke dalam fungsi RKU.
Menampilkan koefisien penduga parameter RKU yang sudah ditransformasi balik menggunakan fungsi RKU yang sudah dibuat di soal nomor 2.
PCR = RKU(x, y_hat)PCR$skor.KUPCR ## $Nilai.Eigen
## [1] 1.677257
##
## $Vektor.Eigen
## PC1
## [1,] 0.5763681
## [2,] 0.5780399
## [3,] 0.5776415
##
## $skor.KU
##
## $Koefisien.PC
## [1] 25.380347 8.814932
##
## $Koefisien.X
## [,1]
## intercept 9.956312
## beta1 5.080646
## beta2 5.095382
## beta3 5.091871
Maka persamaan regresi hasil RKU yang sudah ditransformasi balik adalah:
Y_hat = 9.723956 + 5.110772X1 + 5.116371X2 + 5.114379X3
Soal 4
Lakukan suatu proses manajemen data frame/data munging
- Menggunakan data sekunder mengenai penjualan HP Android di Marketplace Tokopedia.
library(tidyverse)
library(readxl)
library(dplyr)Melakukan Import data
Data berasal dari hasil scraping
df <- read.table("E:/data_tugas (1).csv",
header = TRUE,
sep = ",")
head(df)## X index Itemid Brand
## 1 0 2713 599866346 iphone
## 2 1 2714 671427652 samsung
## 3 2 2715 678226661 iphone
## 4 3 2716 732947524 samsung
## 5 4 2717 751834896 samsung
## 6 5 2719 787672252 samsung
## Listing.Name
## 1 iPhone 11 Pro Max 256GB | Mulus - Normal - Garansi - Original
## 2 Samsung Galaxy A51 6/128 Gb Garansi Resmi SEIN
## 3 iPhone 11 128Gb Garansi Resmi Indonesia
## 4 Samsung Galaxy A01 Ram 2 Rom 16 Gb Garansi Resmi SEIN 1 Tahun Terlaris
## 5 Samsung Galaxy A71 Ram 8/128 Garansi Sein
## 6 SAMSUNG SM-A015F/DS 2/16GB (Samsung Galaxy A01)
## Merchantname Channel City Daily.View Daily.Sales.Count Rating_5
## 1 @ EvoStore Tokopedia Batam 57 1 4.000010
## 2 KleCell Tokopedia Surabaya 164 3 4.166677
## 3 bsshop99 Tokopedia Surabaya 10 2 4.166677
## 4 Gekko GADGET Tokopedia Surabaya 3 1 4.166677
## 5 Blind olshop Tokopedia Jambi 2 1 4.166677
## 6 Ponselkuat Tokopedia Makassar 25 1 4.166677
## Original.Price Price.Disct Discount Remain.Stock Merchant.Follower
## 1 13600000 13600000 0 86 63476
## 2 3755000 3755000 0 12 1119
## 3 12800000 12800000 0 3 4516
## 4 1200000 1200000 0 99 221
## 5 5390000 5390000 0 2 81
## 6 1199000 1199000 0 13 100
## Merchantrate
## 1 4.7
## 2 4.9
## 3 5.0
## 4 4.9
## 5 4.9
## 6 4.8
summary(df)## X index Itemid Brand
## Min. : 0.00 Min. :2713 Min. :5.999e+08 Length:200
## 1st Qu.:24.75 1st Qu.:2740 1st Qu.:9.601e+08 Class :character
## Median :49.50 Median :2768 Median :1.123e+09 Mode :character
## Mean :49.50 Mean :2766 Mean :1.068e+09
## 3rd Qu.:74.25 3rd Qu.:2792 3rd Qu.:1.210e+09
## Max. :99.00 Max. :2818 Max. :1.246e+09
## Listing.Name Merchantname Channel City
## Length:200 Length:200 Length:200 Length:200
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Daily.View Daily.Sales.Count Rating_5 Original.Price
## Min. : 2.00 Min. :1.00 Min. :0.000 Min. : 1070000
## 1st Qu.: 4.00 1st Qu.:1.00 1st Qu.:4.167 1st Qu.: 1699000
## Median : 9.50 Median :1.00 Median :4.167 Median : 2392500
## Mean : 31.22 Mean :2.07 Mean :4.095 Mean : 2822673
## 3rd Qu.: 22.75 3rd Qu.:2.00 3rd Qu.:4.167 3rd Qu.: 3000000
## Max. :687.00 Max. :9.00 Max. :4.167 Max. :13600000
## Price.Disct Discount Remain.Stock Merchant.Follower
## Min. : 1070000 Min. :0 Min. : 1.0 Min. : 5.0
## 1st Qu.: 1699000 1st Qu.:0 1st Qu.: 2.0 1st Qu.: 68.5
## Median : 2392500 Median :0 Median : 4.0 Median : 185.5
## Mean : 2822673 Mean :0 Mean : 28.2 Mean : 1982.3
## 3rd Qu.: 3000000 3rd Qu.:0 3rd Qu.: 11.0 3rd Qu.: 789.5
## Max. :13600000 Max. :0 Max. :903.0 Max. :63476.0
## Merchantrate
## Min. :4.700
## 1st Qu.:4.900
## Median :4.900
## Mean :4.943
## 3rd Qu.:5.000
## Max. :5.000
Pembuatan Variabel Baru
Melakukan pembuatan variabel baru untuk matrix-matrix yang akan dianalisis.
Conversi Rate
Conversi Rate bertujuan untuk melihat tingkat pembelian dibandingkan dengan tingkat view product.
df_1=mutate(df, conversi_rate = Daily.Sales.Count / Daily.View)Segmentasi Kisaran Harga Product
Digunakan untuk melihat segmentasi atau klasifikasi harga HP Android, dengan kategori:
- Murah : 0 - 2.000.000
- Menengah : 2.000.000 - 4.000.000
- Mahal : > 4.000.000
df_2=mutate(df_1, Segmentasi_harga = ifelse(Price.Disct < 2000000, "Murah", ifelse(Price.Disct < 4000000, "Menengah", "Mahal")))Segmentasi Kepopuleran Product
Bertujuan untuk melihat segmentasi atau klasifikasi kepopuleran dari product berdasarkan jumlah view, dengan kategori:
- Tidak Populer : 0 - 20
- Populer : 20 - 100
- Sangat Populer : > 100
df_3=mutate(df_2, Segmentasi_Populer = ifelse(Daily.View < 20, "Tidak Populer", ifelse(Daily.View < 100, "Populer", "Sangat Populer")))Membuang Variabel yang tidak digunakan untuk analisis
Membuang variabel-variabel yang tidak dilakukan untuk proses analisis.
variabel <- c("Listing.Name","Brand","Channel","City","Daily.Sales.Count","Segmentasi_harga","Segmentasi_Populer","conversi_rate")
df_analis=df_3[variabel]
head(df_analis)## Listing.Name
## 1 iPhone 11 Pro Max 256GB | Mulus - Normal - Garansi - Original
## 2 Samsung Galaxy A51 6/128 Gb Garansi Resmi SEIN
## 3 iPhone 11 128Gb Garansi Resmi Indonesia
## 4 Samsung Galaxy A01 Ram 2 Rom 16 Gb Garansi Resmi SEIN 1 Tahun Terlaris
## 5 Samsung Galaxy A71 Ram 8/128 Garansi Sein
## 6 SAMSUNG SM-A015F/DS 2/16GB (Samsung Galaxy A01)
## Brand Channel City Daily.Sales.Count Segmentasi_harga
## 1 iphone Tokopedia Batam 1 Mahal
## 2 samsung Tokopedia Surabaya 3 Menengah
## 3 iphone Tokopedia Surabaya 2 Mahal
## 4 samsung Tokopedia Surabaya 1 Murah
## 5 samsung Tokopedia Jambi 1 Mahal
## 6 samsung Tokopedia Makassar 1 Murah
## Segmentasi_Populer conversi_rate
## 1 Populer 0.01754386
## 2 Sangat Populer 0.01829268
## 3 Tidak Populer 0.20000000
## 4 Tidak Populer 0.33333333
## 5 Tidak Populer 0.50000000
## 6 Populer 0.04000000
Melakukan Analisis
Melakukan analisis dengan menggunakan aggregation.
- Melihat Jumlah Penjualan setiap Channel (Marketplace online)
df_analis %>% group_by(Channel) %>% summarise(Jumlah_Penjualan=sum(Daily.Sales.Count))## # A tibble: 1 x 2
## Channel Jumlah_Penjualan
## <chr> <int>
## 1 Tokopedia 414
- Melihat Market Share pada setiap Brand
df_analis %>% group_by(Brand) %>% summarise(Jumlah_Penjualan=sum(Daily.Sales.Count),Conversion_rate=mean(conversi_rate))%>% arrange(desc(Jumlah_Penjualan))## # A tibble: 7 x 3
## Brand Jumlah_Penjualan Conversion_rate
## <chr> <int> <dbl>
## 1 xiaomi 196 0.248
## 2 redmi 118 0.296
## 3 samsung 60 0.228
## 4 vivo 14 0.0126
## 5 iphone 12 0.156
## 6 oppo 10 0.187
## 7 realme 4 0.105
Dari hasil di atas terlihat Brand Xiaomi memiliki penjualan tertinggi di Tokopedia.
- Melihat Market Share pada setiap Segmentasi Harga
df_analis %>% group_by(Segmentasi_harga) %>% summarise(Jumlah_Penjualan=sum(Daily.Sales.Count),Conversion_rate=mean(conversi_rate))%>% arrange(desc(Jumlah_Penjualan))## # A tibble: 3 x 3
## Segmentasi_harga Jumlah_Penjualan Conversion_rate
## <chr> <int> <dbl>
## 1 Menengah 196 0.190
## 2 Murah 186 0.300
## 3 Mahal 32 0.349
Dari hasil di atas terlihat segmentasi harga yang paling tinggi penjualannya adalah pada kategori harga menengah.
- Melihat Market Share pada setiap Kota
df_analis %>% group_by(City) %>% summarise(Jumlah_Penjualan=sum(Daily.Sales.Count))%>% arrange(desc(Jumlah_Penjualan))## # A tibble: 30 x 2
## City Jumlah_Penjualan
## <chr> <int>
## 1 Surabaya 166
## 2 Bandung 52
## 3 Semarang 36
## 4 Surakarta 20
## 5 Bogor 16
## 6 Kediri 16
## 7 Pati 12
## 8 Sleman 12
## 9 Makassar 10
## 10 Medan 8
## # ... with 20 more rows
terlihat di atas penjualan HP Android tertinggi pada kota Surabaya.
- Melihat Market Share Brand Terhadap Segmentasi harga
df_analis %>% group_by(Brand,Segmentasi_harga) %>% summarise(Jumlah_Penjualan=sum(Daily.Sales.Count),Conversion_rate=mean(conversi_rate))%>% arrange(desc(Jumlah_Penjualan))## `summarise()` has grouped output by 'Brand'. You can override using the `.groups` argument.
## # A tibble: 12 x 4
## # Groups: Brand [7]
## Brand Segmentasi_harga Jumlah_Penjualan Conversion_rate
## <chr> <chr> <int> <dbl>
## 1 xiaomi Murah 98 0.264
## 2 xiaomi Menengah 90 0.197
## 3 redmi Menengah 62 0.219
## 4 redmi Murah 56 0.364
## 5 samsung Murah 32 0.210
## 6 samsung Menengah 16 0.162
## 7 vivo Menengah 14 0.0126
## 8 iphone Mahal 12 0.156
## 9 samsung Mahal 12 0.355
## 10 oppo Menengah 10 0.187
## 11 xiaomi Mahal 8 0.625
## 12 realme Menengah 4 0.105
terlihat hasil di atas penjualan HP Android brand Xiaomi yang tertinggi pada segmentasi harga yang Murah
Soal 5
Buatlah 3 gambar visualisasi dari data Indeks Pembangunan Manusia (IPM) 2010-2018 yang tersedia di link berikut: https://drive.google.com/drive/folders/1PNAkGzUtQaSm9PJlUj69XVykVOKfLO72
Visualisasi dibuat dengan menggunakan data IPM Kabupaten/Kota di Provinsi Bali Tahun 2014-2018
library(tidyverse)
library(readxl)
library(dplyr)
library(ggplot2)Membuat Plot Bar
Membaca File csv
df_5 <- read.table("E:/databali (1).csv",
header = TRUE,
sep = ";")
head(df_5)## Kode Kab.Kota AHH EYS MYS Pengeluaran IPM X X.1 X.2 X.3 X.4 X.5 X.6
## 1 5100 BALI 71.42 13.02 8.39 13329 73.69 NA NA NA NA NA NA NA
## 2 5101 Jembrana 71.60 12.13 7.60 11318 70.22 NA NA NA NA NA NA NA
## 3 5102 Tabanan 72.91 12.66 8.23 13825 74.14 NA NA NA NA NA NA NA
## 4 5103 Badung 74.45 13.60 9.74 16689 79.61 NA NA NA NA NA NA NA
## 5 5104 Gianyar 72.98 13.37 8.68 13865 75.56 NA NA NA NA NA NA NA
## 6 5105 Klungkung 70.29 12.83 7.23 10877 69.52 NA NA NA NA NA NA NA
## X.7 X.8 X.9 X.10 X.11 X.12 X.13 X.14 X.15 X.16 X.17 X.18 X.19 X.20 X.21 X.22
## 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## X.23 X.24
## 1 NA NA
## 2 NA NA
## 3 NA NA
## 4 NA NA
## 5 NA NA
## 6 NA NA
Visualisasi Plot Bar
ggplot(data=df_5, aes(Kab.Kota, AHH,fill=Kab.Kota ) ) +
geom_bar(stat = "identity",color="black") +
theme_minimal() +
labs(title = "Rata-rata Angka Harapan Hidup Menurut Kab/Kota Provinsi Bali ",
x = "Kab/Kota",
y = "AHH")## Warning: Removed 10 rows containing missing values (position_stack).
ggplot(data=df_5, aes(Kab.Kota, Pengeluaran,fill=Kab.Kota) ) +
geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 0),
axis.title.y = element_text(angle = 90, vjust = 1),
legend.position = "none") +
labs(title = " Rata-rata Pengeluaran Perkapita Menurut Kabupaten/Kota Provinsi Bali Tahun 2014-2018 (Ribu Rupiah)",
x = "Kab/Kota",
y = "Ribu Rupiah") +
coord_flip()## Warning: Removed 10 rows containing missing values (position_stack).
Membuat Peta Sebaran IPM
Memasukkan Data SHP
Admin2Kabupaten<-"E:/Admin2Kabupaten/idn_admbnda_adm2_bps_20200401.shp"Tampilan file SHP di R
glimpse(Admin2Kabupaten)## chr "E:/Admin2Kabupaten/idn_admbnda_adm2_bps_20200401.shp"
ubah menjadi bentuk tabel
Admin2<-st_read(Admin2Kabupaten)## Reading layer `idn_admbnda_adm2_bps_20200401' from data source
## `E:\Admin2Kabupaten\idn_admbnda_adm2_bps_20200401.shp' using driver `ESRI Shapefile'
## Simple feature collection with 522 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 95.01079 ymin: -11.00762 xmax: 141.0194 ymax: 6.07693
## Geodetic CRS: WGS 84
glimpse(Admin2)## Rows: 522
## Columns: 15
## $ Shape_Leng <dbl> 2.360029, 1.963994, 4.590182, 3.287754, 4.448584, 4.907219,~
## $ Shape_Area <dbl> 0.22896809, 0.15413587, 0.23639581, 0.31616114, 0.34303826,~
## $ ADM2_EN <chr> "Aceh Barat", "Aceh Barat Daya", "Aceh Besar", "Aceh Jaya",~
## $ ADM2_PCODE <chr> "ID1107", "ID1112", "ID1108", "ID1116", "ID1103", "ID1102",~
## $ ADM2_REF <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM2ALT1EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM2ALT2EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM1_EN <chr> "Aceh", "Aceh", "Aceh", "Aceh", "Aceh", "Aceh", "Aceh", "Ac~
## $ ADM1_PCODE <chr> "ID11", "ID11", "ID11", "ID11", "ID11", "ID11", "ID11", "ID~
## $ ADM0_EN <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indone~
## $ ADM0_PCODE <chr> "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID",~
## $ date <date> 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20~
## $ validOn <date> 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01~
## $ validTo <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA~
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((96.26836 4...., MULTIPOLYGON (~
Memasukkan Data via File CSV
Bali<-read.csv("E:/Admin2Kabupaten/Bali.csv",
header=TRUE, sep=";")Menggabungkan Data
merged_Bali <- geo_join(spatial_data=Admin2,
data_frame=Bali, by_sp="ADM2_PCODE",
by_df="ADM2_PCODE", how = "inner")## Warning: We recommend using the dplyr::*_join() family of functions instead.
Menampilkan Peta Data
mid <- 73.69
pData<-ggplot()+
geom_sf(data=merged_Bali, aes(fill=DATA))+
scale_fill_gradient2(midpoint=mid, low="red", mid="green",
high="blue")+
labs(title="Sebaran IPM Menurut Kab/Kota di Provinsi Bali Tahun 2014-2018 (Indeks)")
pDataMembuat Visualisasi di Tableu
Grafik 1
Grafik 2
Referensi
Rufaidah, Anik. 2017. Analisis Komponen Utama Pada Penerapan Aplikasi Pembelajaran Metode Glenn Doman.Jurnal Ilmiah Edutic /Vol.3, No.2, Mei 2017
Novita, Sari. 2017. Kombinasi Regresi Tak Bias Ridge dengan Regresi Komponen Utama untuk Mengatasi Masalah Multikolinieritas. Statistika, Vol. 17 No. 1, 25 – 31 Mei 2017.
NCSS LCC. Principal Components Regression (2019). NCSS, LLC. Kaysville, Utah, USA, ncss.com/software/ncss.
https://rpubs.com/nadhifanhf/principal-component-analysis
TERIMA KASIH