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.KU
PCR 
## $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.

  1. 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
  1. 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.

  1. 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.

  1. 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.

  1. 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)")
pData

Membuat 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



  1. Titin Agustina | G1501211005↩︎

  2. Muhammad Syidiq Abdjanur | G1501211009↩︎

  3. Zetil Hikmah | G1501211017↩︎

  4. Ilham Alifa Azagi | G1501211019↩︎