Analisis Komponen Utama untuk jumlah budidaya perikanan menurut jenis budidaya di Indonesia tahun 2000 – 2019 yang terdiri dari 4 variabel jenis budidaya yaitu Tambak (X1), Pembenihan (X2), Air Tawar (X3) dan Laut (X4), dengan sampel sebanyak 20 observasi pada masing – masing variabel. Metode analisis komponen utama dilakukan dengan tujuan mereduksi data yang berasal dari 4 variabel menjadi beberapa komponen utama. Komponen utama yang dipilih lebih sedikit dari jumlah variabel yang tersedia dan sudah cukup merepresentasikan varians dalam data, sehingga analisis data multivariat akan lebih efisien.
Menginput data ke software R Jumlah Perusahaan Budidaya Perikanan Menurut Jenis Budidaya Tahun 2000-2019 yang bersumber dari Badan Pusat Statistik, 2020
#Jumlah Perusahaan Budidaya Perikanan Menurut Jenis Budidaya, 2000-2019
data=read.csv("data pca 1.csv",header=T)
data
## x1 x2 x3 x4
## 1 131 67 4 14
## 2 172 85 7 19
## 3 174 85 7 19
## 4 156 89 8 23
## 5 193 104 8 30
## 6 91 30 4 22
## 7 126 54 9 21
## 8 135 59 13 27
## 9 145 54 7 22
## 10 148 51 6 24
## 11 134 54 9 24
## 12 138 55 8 25
## 13 115 64 12 31
## 14 123 63 15 35
## 15 136 69 16 40
## 16 137 75 16 42
## 17 139 75 15 45
## 18 118 82 13 44
## 19 126 73 14 45
## 20 168 70 9 34
#MISAL:
tambak=data$x1
pembenihan=data$x2
tawar=data$x3
laut=data$x4
Melakukan pengujian asumsi untuk melakukan analisis komponen utama a. Data berdistribusi normal multivariate b. Data memiliki varians yang homogen
#UJI ASUMSI
##UJI NORMALITAS MULTIVARIAT
library(MVN)
## Warning: package 'MVN' was built under R version 3.6.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## sROC 0.1-2 loaded
mvn(data=data, mvnTest="mardia")
## $multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 19.7327517281494 0.474755076593422 YES
## 2 Mardia Kurtosis -0.939671975764251 0.347385844218097 YES
## 3 MVN <NA> <NA> YES
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Shapiro-Wilk x1 0.9611 0.5669 YES
## 2 Shapiro-Wilk x2 0.9775 0.8984 YES
## 3 Shapiro-Wilk x3 0.9190 0.0950 YES
## 4 Shapiro-Wilk x4 0.9182 0.0914 YES
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew Kurtosis
## x1 20 140.25 23.485438 136.5 91 193 126.00 150.00 0.325314228 -0.1351834
## x2 20 67.90 16.625599 68.0 30 104 54.75 76.75 -0.002724845 -0.1175834
## x3 20 10.00 3.906809 9.0 4 16 7.00 13.25 0.171054135 -1.4079084
## x4 20 29.30 9.690473 26.0 14 45 22.00 36.25 0.369658272 -1.2981719
#UJI VARIANS HOMOGEN
variabel=as.factor(rep(c("tambak","pembenihan","tawar","laut"),each=20))
jenis.budidaya=c(tambak,pembenihan,tawar,laut)
data2=data.frame(variabel,jenis.budidaya)
bartlett.test(jenis.budidaya~variabel,data2)
##
## Bartlett test of homogeneity of variances
##
## data: jenis.budidaya by variabel
## Bartlett's K-squared = 48.782, df = 3, p-value = 1.451e-10
Memanggil data dalam bentuk matriks
X=cbind(tambak,pembenihan,tawar,laut)
X
## tambak pembenihan tawar laut
## [1,] 131 67 4 14
## [2,] 172 85 7 19
## [3,] 174 85 7 19
## [4,] 156 89 8 23
## [5,] 193 104 8 30
## [6,] 91 30 4 22
## [7,] 126 54 9 21
## [8,] 135 59 13 27
## [9,] 145 54 7 22
## [10,] 148 51 6 24
## [11,] 134 54 9 24
## [12,] 138 55 8 25
## [13,] 115 64 12 31
## [14,] 123 63 15 35
## [15,] 136 69 16 40
## [16,] 137 75 16 42
## [17,] 139 75 15 45
## [18,] 118 82 13 44
## [19,] 126 73 14 45
## [20,] 168 70 9 34
Menghitung matriks varians kovarians atau matriks korelasi (berdasarkan terpenuhi atau tidaknya asumsi homogenitas varians)
# Function vektor mean
vectorMean <- function(X){
n <- dim(X)[1]
Xbar <- rep(1,n) %*% X / n
return(Xbar)
}
# Run program
print(vectorMean(X))
## tambak pembenihan tawar laut
## [1,] 140.25 67.9 10 29.3
# Function matriks korelasi
matCor <- function(X){
n <- dim(X)[1] # jumlah baris
p <- dim(X)[2] # jumlah kolom
J <- rep(1,n) # vektor satuan
C <- diag(1,n) - J %*% t(J) / n
D <- c()
for (j in 1:p)
D <- c(D, sd(X[,j])) #diagonal
Xs <- C %*% X %*% solve(diag(D))
matCor <- t(Xs) %*% Xs / (n-1)
# penamaan baris dan kolom
rownames(matCor) <- colnames(matCor) <- colnames(X)
return(matCor)
}
# print out function matriks kovarian X untuk populasi
matrixKor<-print(matCor(X))
## tambak pembenihan tawar laut
## tambak 1.0000000 0.7027483 -0.2053566 -0.1865122
## pembenihan 0.7027483 1.0000000 0.2147300 0.2491271
## tawar -0.2053566 0.2147300 1.0000000 0.8619279
## laut -0.1865122 0.2491271 0.8619279 1.0000000
Mencari pasangan nilai eigen dan vector eigen dari matriks
##MENCARI EIGEN VALUE DAN EIGEN VECTOR
eigen(matrixKor)
## eigen() decomposition
## $values
## [1] 1.9757553 1.6987823 0.1889934 0.1364690
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] 0.08345045 -0.72746105 0.67521558 0.08899643
## [2,] -0.26306000 -0.67507158 -0.67977726 -0.11393275
## [3,] -0.67760819 0.09785074 0.27797750 -0.67379588
## [4,] -0.68167631 0.07418905 0.06866811 0.72463652
#Eigen Value
eigen(matrixKor)$value
## [1] 1.9757553 1.6987823 0.1889934 0.1364690
#Eigen Vector
eigen(matrixKor)$vectors
## [,1] [,2] [,3] [,4]
## [1,] 0.08345045 -0.72746105 0.67521558 0.08899643
## [2,] -0.26306000 -0.67507158 -0.67977726 -0.11393275
## [3,] -0.67760819 0.09785074 0.27797750 -0.67379588
## [4,] -0.68167631 0.07418905 0.06866811 0.72463652
jum.mCor<-sum(diag(matrixKor))
jum.mCor
## [1] 4
jum.eigen<-sum(c(eigen(matrixKor)$value))
jum.eigen
## [1] 4
Menghitung proporsi dari total varians komponen utama
cmCor<-c(diag(matrixKor))
cmCor
## tambak pembenihan tawar laut
## 1 1 1 1
ceigenva<-c(eigen(matrixKor)$value)
ceigenva
## [1] 1.9757553 1.6987823 0.1889934 0.1364690
ceigenve<-c(eigen(matrixKor)$vectors)
ceigenve
## [1] 0.08345045 -0.26306000 -0.67760819 -0.68167631 -0.72746105 -0.67507158
## [7] 0.09785074 0.07418905 0.67521558 -0.67977726 0.27797750 0.06866811
## [13] 0.08899643 -0.11393275 -0.67379588 0.72463652
n<-c(1:16)
p<-c(1:4)
q<-rep(1:4,each=4)
q
## [1] 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
#proporsi
prop<-function(q,w){
prop<-(q/w)
return(prop)
}
proporsi<-c(prop(ceigenva[p],jum.eigen))
proporsi
## [1] 0.49393883 0.42469557 0.04724836 0.03411725
#Proporsi Kumulatif
propcum=c()
for (i in p){
propcum=c(propcum,sum(proporsi[1:i]))
}
propcum
## [1] 0.4939388 0.9186344 0.9658827 1.0000000
# Function matriks korelasi untuk populasi
corYX <- function(a,b){
corYnXp<-(a*sqrt(b))
return(corYnXp)
}
Menghitung korelasi antara variabel acak asli dan komponen utama
# print out function matriks korelasi antar var acak Z
korelasi<-c(corYX(ceigenve[n],ceigenva[q]))
korelasi
## [1] 0.11729926 -0.36976125 -0.95245667 -0.95817488 -0.94815339 -0.87987036
## [7] 0.12753605 0.09669603 0.29353899 -0.29552211 0.12084620 0.02985234
## [13] 0.03287680 -0.04208871 -0.24891173 0.26769313
matriks.kor<-matrix(c(korelasi), nrow=3,byrow=T)
## Warning in matrix(c(korelasi), nrow = 3, byrow = T): data length [16] is not a
## sub-multiple or multiple of the number of rows [3]
matriks.kor
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1172993 -0.36976125 -0.9524567 -0.9581749 -0.9481534 -0.87987036
## [2,] 0.1275360 0.09669603 0.2935390 -0.2955221 0.1208462 0.02985234
## [3,] 0.0328768 -0.04208871 -0.2489117 0.2676931 0.1172993 -0.36976125
Scree Plot
#Scree plot
pev=plot(ceigenva,type="b",main="Scree Plot",xlab="Principal Component",
ylab="Variances")