Semua Materi TPG

Angga Fathan Rofiqy

09 October, 2023

1 Materi 1 - Matriks

1.1 Det, Inv, tr, t, diag

x <- matrix(c(3,2,-1,
              1,6,3,
              2,-4,0),nrow=3, byrow=T);x
##      [,1] [,2] [,3]
## [1,]    3    2   -1
## [2,]    1    6    3
## [3,]    2   -4    0
t(x) #Transpose
##      [,1] [,2] [,3]
## [1,]    3    1    2
## [2,]    2    6   -4
## [3,]   -1    3    0
det(x) #Determinan
## [1] 64
install_load('MASS')
fractions(solve(x)) #Invers
##      [,1]  [,2]  [,3] 
## [1,]  3/16  1/16  3/16
## [2,]  3/32  1/32 -5/32
## [3,]  -1/4   1/4   1/4
install_load('psych')
tr(x) #Teras
## [1] 9
diag(x) #mengambil diagonal matriks
## [1] 3 6 0
diag(c(1,2,3)) #Membuat matriks diagonal
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    2    0
## [3,]    0    0    3

1.1.1 Determinan

Untuk ukuran 3x3 kebawah bisa menggunakan metode sarrus:

Untuk 3x3 keatas (untuk 3x3 kebawah jg bisa pake ini) :

Definit

Bisa dicari dengan :

  • Definit Positif : Jika semua det nya > 0

  • Semi Definit Positif : Jika semua det nya \(\ge\) 0

  • Definit Negatif : Jika semua det nya < 0

  • Semi Definit Negatif : Jika semua det nya \(\le\) 0

1.1.2 Invers

Ingat! Inverse matriks ada jika dan hanya jika :

  1. Matriks persegi
  2. \(|M| \ne 0\)
  3. Jika tidak ada baris atau kolom yang sama atau hasil perkalian atau penjumlahan baris atau kolom lainnya.

Contoh poin 3

#Baris 3 = baris 1
x <- matrix(c(3,2,-1,
              6,4,-2,
              3,2,-1),nrow=3, byrow=T);x
##      [,1] [,2] [,3]
## [1,]    3    2   -1
## [2,]    6    4   -2
## [3,]    3    2   -1
det(x)
## [1] 0
fractions(solve(x)) #Invers
## Error in solve.default(x): Lapack routine dgesv: system is exactly singular: U[2,2] = 0
#Baris 2 = baris 1 dikali 2
x <- matrix(c(3,2,-1,
              6,4,-2,
              2,-4,0),nrow=3, byrow=T);x
##      [,1] [,2] [,3]
## [1,]    3    2   -1
## [2,]    6    4   -2
## [3,]    2   -4    0
det(x)
## [1] 0
fractions(solve(x)) #Invers
## Error in solve.default(x): Lapack routine dgesv: system is exactly singular: U[3,3] = 0
#Baris 3 = baris 1 ditambah baris 2
x <- matrix(c(3,2,-1,
              1,1,1,
              4,3,0),nrow=3, byrow=T);x
##      [,1] [,2] [,3]
## [1,]    3    2   -1
## [2,]    1    1    1
## [3,]    4    3    0
det(x)
## [1] 0
fractions(solve(x)) #Invers
## Error in solve.default(x): Lapack routine dgesv: system is exactly singular: U[3,3] = 0
#Kolom 1 = kolom 2 dikurang kolom 3
x <- matrix(c(-3,-2,1,
              0, 1,1,
              3, 3,0),nrow=3, byrow=T);x
##      [,1] [,2] [,3]
## [1,]   -3   -2    1
## [2,]    0    1    1
## [3,]    3    3    0
det(x)
## [1] 0
fractions(solve(x)) #Invers
## Error in solve.default(x): Lapack routine dgesv: system is exactly singular: U[3,3] = 0

Untuk mencari inverse 2x2 :

Untuk 3x3 :

Untuk 3x3 keatas (3x3 kebawah juga bisa pake ini) :

1.2 Ortogonal

1.2.1 Matriks Ortogonal

x <- matrix(c( 1/3, -2/3,  2/3,
               2/3,  2/3,  1/3,
              -2/3,  1/3,  2/3),nrow=3, byrow=T);fractions(x)
##      [,1] [,2] [,3]
## [1,]  1/3 -2/3  2/3
## [2,]  2/3  2/3  1/3
## [3,] -2/3  1/3  2/3
y <- matrix(c( 1/3, -2/3,  2/3,
               2/3,  2/3,  1/3,
              -2/3,  1/3,  5/3),nrow=3, byrow=T);fractions(y)
##      [,1] [,2] [,3]
## [1,]  1/3 -2/3  2/3
## [2,]  2/3  2/3  1/3
## [3,] -2/3  1/3  5/3

Ciri ciri : \(\mathbf{X}^{-1} = \mathbf{X}^t\) ; \(\mathbf{X}^{t}\mathbf{X} = \mathbf{I}\) ; \(\mathbf{X}\mathbf{X}^{t} = \mathbf{I}\)

fractions(solve(x))
##      [,1] [,2] [,3]
## [1,]  1/3  2/3 -2/3
## [2,] -2/3  2/3  1/3
## [3,]  2/3  1/3  2/3
fractions(t(x))
##      [,1] [,2] [,3]
## [1,]  1/3  2/3 -2/3
## [2,] -2/3  2/3  1/3
## [3,]  2/3  1/3  2/3
t(x) %*% x
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
x %*% t(x)
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
orto <- function(x){
  if( all(t(x) %*% x == diag(nrow(x))) ){
    cat("Matriks Ortgonal")
  } else cat('Bukan Matriks Ortogonal')
}
orto(x)
## Matriks Ortgonal

1.2.2 Vektor Ortogonal

a <- c(5, 9, 5); a
## [1] 5 9 5
b <- c(-1, 0, 1); b
## [1] -1  0  1
c <- c(-1, 1, 1); c
## [1] -1  1  1
t(a) %*% b; t(b) %*% a
##      [,1]
## [1,]    0
##      [,1]
## [1,]    0

Contoh Fungsi:

orto <- function(x, y=NA){
  if(is.matrix(x)){
    if( all(t(x) %*% x == diag(nrow(x))) ){
      cat("\nMatriks x Ortgonal\n\nkarena, t(x)\n")
      print(fractions(t(x)))
      
      cat("\nDikali dengan x\n")
      print(fractions(x))
      
      cat("\nSama dengan I\n")
      print(t(x) %*% x)
      
    } else {
      cat('\nBukan Matriks Ortogonal\n\nkarena, t(x)\n')
      print(fractions(t(x)))
      
      cat("\nDikali dengan x\n")
      print(fractions(x))
      
      cat("\nTidak Sama dengan I, melainkan:\n")
      print(fractions(t(x) %*% x))
    }
  } else{
      if( (t(x) %*% y | t(y) %*% x) == 0 ){
      cat("\nVektor Ortgonal\n\nkarena, t(x)\n")
      print(x)
      
      cat("\nDikali dengan y\n")
      print(y)
      
      cat("\nSama dengan\n")
      print(t(x) %*% y)
      } else {
        cat('\nBukan Vektor Ortogonal\n\nkarena, t(x)\n')
        print(x)
        
        cat("\nDikali dengan y\n")
        print(y)
        
        cat("\nTidak Sama dengan nol, melainkan\n")
        print(t(x) %*% y)
    }
  }
}
orto(y)
## 
## Bukan Matriks Ortogonal
## 
## karena, t(x)
##      [,1] [,2] [,3]
## [1,]  1/3  2/3 -2/3
## [2,] -2/3  2/3  1/3
## [3,]  2/3  1/3  5/3
## 
## Dikali dengan x
##      [,1] [,2] [,3]
## [1,]  1/3 -2/3  2/3
## [2,]  2/3  2/3  1/3
## [3,] -2/3  1/3  5/3
## 
## Tidak Sama dengan I, melainkan:
##      [,1] [,2] [,3]
## [1,]    1    0 -2/3
## [2,]    0    1  1/3
## [3,] -2/3  1/3 10/3
orto(a, c)
## 
## Bukan Vektor Ortogonal
## 
## karena, t(x)
## [1] 5 9 5
## 
## Dikali dengan y
## [1] -1  1  1
## 
## Tidak Sama dengan nol, melainkan
##      [,1]
## [1,]    9

1.3 Rank

qr(x)$rank #pake ini
## [1] 3
rank <- function(X){ #Kalo pake function
  if (qr(X)$rank == ncol(X)){ 
      cat("Matriks Model Penuh, dengan rank :", qr(X)$rank)
  } else {
      cat("Matriks BUKAN Model Penuh, dengan rank :", qr(X)$rank) 
  }
}
rank(x)
## Matriks Model Penuh, dengan rank : 3

1.4 Eigen (Akar Ciri)

1.4.1 Contoh1

A <- matrix(c(2, 0, 1,
              0, 1, 1,
              1, 1, 1), nrow=3, byrow=T)
eigen(A)
## eigen() decomposition
## $values
## [1]  2.8019377  1.4450419 -0.2469796
## 
## $vectors
##           [,1]       [,2]       [,3]
## [1,] 0.7369762  0.5910090 -0.3279853
## [2,] 0.3279853 -0.7369762 -0.5910090
## [3,] 0.5910090 -0.3279853  0.7369762

Cek definit

x <- eigen(A)$values
t(x) %*% A %*% x
##          [,1]
## [1,] 15.75302

Karena > 0 maka A = definit positif.

Penjumlahan dari eigen value itu sama dengan teras nya.

sum(eigen(A)$values)
## [1] 4
tr(A)
## [1] 4

Perkalian antar eigen value itu sama dengan determinan nya.

prod(eigen(A)$values)
## [1] -1
det(A)
## [1] -1

1.4.2 Contoh 2

A <- diag(c(2, 4, 3)); A
##      [,1] [,2] [,3]
## [1,]    2    0    0
## [2,]    0    4    0
## [3,]    0    0    3

Vektor ciri diperoleh dengan : \(Ax = \lambda x\)

x <- eigen(A)$values; x
## [1] 4 3 2
v <- eigen(A)$vectors; fractions(v)
##      [,1] [,2] [,3]
## [1,] 0    0    1   
## [2,] 1    0    0   
## [3,] 0    1    0

1.5 Leading & Free Variabel

# Misalnya kita memiliki sistem persamaan linear berikut:
# 2x + 3y + z = 5
# 4x + 7y + 2z = 10
# 6x + 10y + 3z = 15

# Membuat matriks augmented dari sistem persamaan di atas
x <- matrix(c(2, 3, 1, 5, 
              4, 7, 2, 10, 
              6, 10, 3, 15), nrow = 3, byrow = TRUE)

lead.free <- function(x){
  l.var <- NA; f.var <- NA
  #menghitung bentuk eselon baris dari matriks augmented
  install_load('pracma')
  es <- rref(x)[,-ncol(x)]
  # Mencari leading variable dan free variable
  for (i in 1:nrow(x)) {
    pivot <- which(es[i, ] == 1)[1]  #Mencari indeks kolom pertama yang bernilai 1
    
    if (!is.na(pivot)) {
      l.var <- na.omit(c(l.var, pivot)) 
    } else {
      f.var <- na.omit(c(1:ncol(es))[-l.var])
    }
  }
  
  print("Bentuk eselon:")
  print(fractions(rref(x)))
  print("Leading Variable:")
  print(l.var)
  
  print("Free Variable:")
  print(f.var)
  if(!is.na(all(f.var))) cat(" Karena Memiliki Free Variable,\n",
                        'Maka Persamaan ini memiliki Solusi tak terbatas')
}
lead.free(x)
## [1] "Bentuk eselon:"
##      [,1] [,2] [,3] [,4]
## [1,]   1    0  1/2  5/2 
## [2,]   0    1    0    0 
## [3,]   0    0    0    0 
## [1] "Leading Variable:"
## [1] 1 2
## [1] "Free Variable:"
## [1] 3
##  Karena Memiliki Free Variable,
##  Maka Persamaan ini memiliki Solusi tak terbatas
#Contoh lain 
x <- matrix(c(1, 1, 1, 1, 6, 
              1, 0, 1, 1, 4, 
              1, 0, 1, 1, 2), nrow = 3, byrow = TRUE)
lead.free(x)
## [1] "Bentuk eselon:"
##      [,1] [,2] [,3] [,4] [,5]
## [1,] 1    0    1    1    0   
## [2,] 0    1    0    0    0   
## [3,] 0    0    0    0    1   
## [1] "Leading Variable:"
## [1] 1 2
## [1] "Free Variable:"
## [1] 3 4
##  Karena Memiliki Free Variable,
##  Maka Persamaan ini memiliki Solusi tak terbatas
#Contoh lain 
x <- matrix(c(1, 1, -3,  5, 8, 10, 
              0, 0,  1, -3, 4, 15, 
              0, 0,  0,  1, 3, 4,
              0, 0,  0,  0, 0, 0), nrow = 4, byrow = TRUE)
lead.free(x) 
## [1] "Bentuk eselon:"
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]  1    1    0    0   32   71  
## [2,]  0    0    1    0   13   27  
## [3,]  0    0    0    1    3    4  
## [4,]  0    0    0    0    0    0  
## [1] "Leading Variable:"
## [1] 1 3 4
## [1] "Free Variable:"
## [1] 2 5
##  Karena Memiliki Free Variable,
##  Maka Persamaan ini memiliki Solusi tak terbatas
#Contoh lain 
x <- matrix(c(1, 1, -3,  5, 
              0, 1, -1, 15,
              0, 0,  1, 12), nrow = 3, byrow = TRUE)
lead.free(x) 
## [1] "Bentuk eselon:"
##      [,1] [,2] [,3] [,4]
## [1,]  1    0    0   14  
## [2,]  0    1    0   27  
## [3,]  0    0    1   12  
## [1] "Leading Variable:"
## [1] 1 2 3
## [1] "Free Variable:"
## [1] NA

1.6 Solusi Pertamaan Linier

Referensi : link

Misal persamaannya :

\(2x + 3y = 84\)

\(x - 2y = 2\)

A <- matrix(c(2, 3, 
              4, -2), nrow = 2, byrow = TRUE)
b <- c(8, 2)
solve(A, b)
## [1] 1.375 1.750
A <- matrix(c(2, 3, 
              4, -2), nrow = 2, byrow = TRUE)
b <- c(8, 2)
solusi <- function(A, b=NA){
  if(missing(b)) {
    b <- A[,ncol(A)] #Jika tidak ada b, maka ambil dari A
    A <- A[,-ncol(A)]
  }
  n <- ncol(A)
  install_load('matlib')
  cat('Persamaan :\n')
  showEqn(A, b)
  
  cat('\nRank Matriks :',R(A),
      '\nRank Gabung  :', R(cbind(A,b)) )
  
  plotEqn(A,b)
  
  if(all.equal( R(A), R(cbind(A,b)) )){
    if(all.equal( R(A), R(cbind(A,b)), n)){
      cat('\nPersamaan Konsisten dan Solusi Unik\n')
    } else{
      cat('\nPersamaan Konsisten dan Solusi Tak Terbatas\n')
    }
    Solve(A, b, fractions = TRUE)
  } else{
      cat('\nPersamaan Tidak Konsisten (Tidak memiliki Solusi)\n')
    }
}
solusi(A,b)
## Persamaan :
## 2*x1 + 3*x2  =  8 
## 4*x1 - 2*x2  =  2 
## 
## Rank Matriks : 2 
## Rank Gabung  : 22*x[1] + 3*x[2]  =  8 
## 4*x[1] - 2*x[2]  =  2

## 
## Persamaan Konsisten dan Solusi Unik
## x1    =  11/8 
##   x2  =   7/4
#Contoh Jika A dan b digabung : 
A <- matrix(c(2, 3, 8,
              4, -2, 2), nrow = 2, byrow = TRUE)
solusi(A)
## Persamaan :
## 2*x1 + 3*x2  =  8 
## 4*x1 - 2*x2  =  2 
## 
## Rank Matriks : 2 
## Rank Gabung  : 22*x[1] + 3*x[2]  =  8 
## 4*x[1] - 2*x[2]  =  2

## 
## Persamaan Konsisten dan Solusi Unik
## x1    =  11/8 
##   x2  =   7/4

1.7 Matriks Korelasi dan Matriks Kovarian

1.7.1 Matriks Varians Kovarians

A <- matrix(c(25, -2, 4,
              -2,  4, 1,
               4,  1, 9), nrow=3, byrow= T)
#Varians
fractions(var(A))
##      [,1]  [,2]  [,3] 
## [1,]   201 -81/2     4
## [2,] -81/2     9  -9/2
## [3,]     4  -9/2  49/3
#Sama dengan
satu <- rep(1,nrow(A))

fractions(1/(nrow(A)-1) * t(A) %*% 
  (diag(satu) - 1/nrow(A) * satu %*% t(satu)) %*% A)
##      [,1]  [,2]  [,3] 
## [1,]   201 -81/2     4
## [2,] -81/2     9  -9/2
## [3,]     4  -9/2  49/3
#Sama dengan
#Kovarians
fractions(cov(A))
##      [,1]  [,2]  [,3] 
## [1,]   201 -81/2     4
## [2,] -81/2     9  -9/2
## [3,]     4  -9/2  49/3

1.7.2 Simpangan Baku dan Matriks Kovarian

D <- diag(sqrt(diag(A))); D
##      [,1] [,2] [,3]
## [1,]    5    0    0
## [2,]    0    2    0
## [3,]    0    0    3

1.7.3 Matriks Korelasi

fractions(cov2cor(A))
##      [,1] [,2] [,3]
## [1,]    1 -1/5 4/15
## [2,] -1/5    1  1/6
## [3,] 4/15  1/6    1
#Sama dengan
fractions( solve(D) %*% A %*% solve(D) )
##      [,1] [,2] [,3]
## [1,]    1 -1/5 4/15
## [2,] -1/5    1  1/6
## [3,] 4/15  1/6    1

1.7.4 Rata-rata

rowMeans(A)
## [1] 9.000000 1.000000 4.666667
#sama dengan
1/nrow(A) * t(A) %*% satu
##          [,1]
## [1,] 9.000000
## [2,] 1.000000
## [3,] 4.666667

1.8 Euclid

1.8.1 Normal Vektor Euclidian

a <- c(2, 1, 2)
fractions(a / sqrt(t(a) %*% a))
## [1] 2/3 1/3 2/3

1.8.2 Jarak Euclid antar 2 vektor

a <- c(5, 3, 2); a
## [1] 5 3 2
b <- c(6, 1, 4); b
## [1] 6 1 4
sqrt(t(a - b) %*% (a - b))
##      [,1]
## [1,]    3

1.9 Perkalian Kronecker

C <- matrix(c(1, 0, 3, 4,
              0, 4, 1, -1,
              1, 1, -3, 2), nrow=3, byrow = T)
D <- c(1, 3, 7)
kronecker(C, D)
##       [,1] [,2] [,3] [,4]
##  [1,]    1    0    3    4
##  [2,]    3    0    9   12
##  [3,]    7    0   21   28
##  [4,]    0    4    1   -1
##  [5,]    0   12    3   -3
##  [6,]    0   28    7   -7
##  [7,]    1    1   -3    2
##  [8,]    3    3   -9    6
##  [9,]    7    7  -21   14

1.10 Bentuk Kuadrat

quad <- function(x){
  for(i in 1:(nrow(x))){
    cat(paste0(x[i,i],"(X",i,")^2"))
    for(j in (i+1):(nrow(x))) 
      if((i != j) & (j <= (nrow(x)) )) 
        cat(paste0(" + ",(x[i,j] + x[j,i]), "(X",i,j,")"))
    cat("\n")
  }
    cat("\n")
}
A <- matrix(c(1, 2, 3,
              4, 2, 1,
              1, 1, 1), nrow=3, byrow = T)
B <- matrix(c(1, 2, 3, 4,
              5, 6, 7, 8,
              9, 10, 11, 12,
              13, 14, 15, 16), nrow=4, byrow=TRUE)
C <- matrix(c(1, 2,
              4, 2), nrow=2, byrow = T)

quad(A)
## 1(X1)^2 + 6(X12) + 4(X13)
## 2(X2)^2 + 2(X23)
## 1(X3)^2
quad(B)
## 1(X1)^2 + 7(X12) + 12(X13) + 17(X14)
## 6(X2)^2 + 17(X23) + 22(X24)
## 11(X3)^2 + 27(X34)
## 16(X4)^2
quad(C)
## 1(X1)^2 + 6(X12)
## 2(X2)^2

1.11 Yang blm paham

2 Materi 2 - Sebaran Normal Ganda

2.1 Uji normalitas ganda - Mardia’s Skewness

data <- matrix(c(8.8, 8.5, 7.7, 4.9, 9.6, 10, 11.5, 11.6, 11.2, 10.7, 10, 6.8, 
  2589, 1186, 291, 1276, 6633, 12125, 36717, 43319, 10530, 3931, 1536, 61400),
  nrow=12, ncol=2)
install_load('MVN')
## Warning: package 'MVN' was built under R version 4.2.3
mardia <- mvn(data, mvnTest = c("mardia"), covariance = TRUE, 
              multivariatePlot = "qq")

mardia
## $multivariateNormality
##              Test         Statistic            p value Result
## 1 Mardia Skewness  11.1215382968049 0.0252315192005968     NO
## 2 Mardia Kurtosis 0.590006258740303  0.555186453489953    YES
## 3             MVN              <NA>               <NA>     NO
## 
## $univariateNormality
##               Test  Variable Statistic   p value Normality
## 1 Anderson-Darling  Column1     0.3122    0.5053    YES   
## 2 Anderson-Darling  Column2     1.3825    0.0008    NO    
## 
## $Descriptives
##    n      Mean   Std.Dev Median   Min     Max   25th      75th       Skew
## 1 12     9.275     2.041    9.8   4.9    11.6    8.3    10.825 -0.6760453
## 2 12 15127.750 20400.481 5282.0 291.0 61400.0 1471.0 18273.000  1.1413585
##     Kurtosis
## 1 -0.6824234
## 2 -0.2880875

Dari hasil R diatas akan dilakukan pengujian hipotesis terhadap mardia skewness test sebagai berikut :
Ho : Peubah ganda mengikuti distribusi normal
H1 : Peubah ganda tidak mengikuti distribusi normal
Sehingga dikesimpulan p-value = 0.02523 < α = 0.05 yaitu menolak Ho. Artinya bahwa peubah ganda tidak mengikuti distribusi normal. Dari Q-Q plot yang dihasilkan dari output R dibawah ini juga menunjukan bahwa sebaran dari data tidak mengikuti distribusi normal.

2.2 Uji normalitas ganda - Henze-Zikler Test

henze <- mvn(data, mvnTest = c("hz"), covariance = TRUE, multivariatePlot = "none")
henze
## $multivariateNormality
##            Test        HZ     p value MVN
## 1 Henze-Zirkler 0.9995781 0.004125476  NO
## 
## $univariateNormality
##               Test  Variable Statistic   p value Normality
## 1 Anderson-Darling  Column1     0.3122    0.5053    YES   
## 2 Anderson-Darling  Column2     1.3825    0.0008    NO    
## 
## $Descriptives
##    n      Mean   Std.Dev Median   Min     Max   25th      75th       Skew
## 1 12     9.275     2.041    9.8   4.9    11.6    8.3    10.825 -0.6760453
## 2 12 15127.750 20400.481 5282.0 291.0 61400.0 1471.0 18273.000  1.1413585
##     Kurtosis
## 1 -0.6824234
## 2 -0.2880875

Dari Henze-Zirkler’s Multivariate Normality Test menghasilkan nilai p-value = 0.004125 < α = 0.05. Hal ini berarti data mendukung untuk menolak Ho, dengan demikian dapat dikatakan bahwa peubah-peubah tersebut tidak mengikuti distribusi normal ganda.

2.3 Uji normalitas ganda - Royston

royston <- mvn(data, mvnTest = c("royston"), covariance = TRUE, multivariatePlot = "persp")

royston
## $multivariateNormality
##      Test        H     p value MVN
## 1 Royston 10.10069 0.006407917  NO
## 
## $univariateNormality
##               Test  Variable Statistic   p value Normality
## 1 Anderson-Darling  Column1     0.3122    0.5053    YES   
## 2 Anderson-Darling  Column2     1.3825    0.0008    NO    
## 
## $Descriptives
##    n      Mean   Std.Dev Median   Min     Max   25th      75th       Skew
## 1 12     9.275     2.041    9.8   4.9    11.6    8.3    10.825 -0.6760453
## 2 12 15127.750 20400.481 5282.0 291.0 61400.0 1471.0 18273.000  1.1413585
##     Kurtosis
## 1 -0.6824234
## 2 -0.2880875

Dari Royston Test menghasilkan nilai p-value = 0.0064 < α = 0.05. Hasil uji ini juga menunjukkan data mendukung untuk menolak Ho, dengan demikian dapat dikatakan bahwa peubah-peubah tersebut tidak mengikuti distribusi normal ganda.

royston <- mvn(data, mvnTest = c("royston"), covariance = TRUE,
               multivariatePlot = "contour")

Berdasarkan beberapa uji normalitas ganda di atas, dapat disimpulkan bahwa data tidak menyebar multivariat normal. Sehingga dapat dilakukan penangan lanjutan terhadap data tersebut, dapat menggunakan transformasi normal atau metode lainnya.

3 Materi 3 - Uji Vektor Nilai Tengah Satu Populasi

3.1 Data

install_load('readxl')
data <- read_excel("Data (3).xlsx")
install_load('DT')
datatable(data, filter = 'top', 
          options = list(pageLength = 10))

3.2 Vektor Rataan & Mariks Kovarians

xbar <- apply(data[,2:3], 2, mean)
xbar
## matematika     fisika 
##      62.58      66.60
cov_m <- cov(data[,2:3])
cov_m
##            matematika   fisika
## matematika  164.93289 36.00889
## fisika       36.00889 66.96444

3.3 Uji T2 Hotelling Satu Populasi

\[H_{0}:\mu_{0}=\begin{bmatrix} 55\\ 60 \end{bmatrix}\]

\[H_{1}:\mu_{0}\neq \begin{bmatrix} 55\\ 60 \end{bmatrix}\]

install_load('MVTests')

mean0 <- c(55,60)
result <- OneSampleHT2(data[,2:3],mu0=mean0, alpha=0.1)
summary(result)
##        One Sample Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 7.621161 
##  F value = 3.387 , df1 = 2 , df2 = 8 , p-value: 0.086 
## 
##                    Descriptive Statistics
## 
##       matematika    fisika
## N       10.00000 10.000000
## Means   62.58000 66.600000
## Sd      12.84262  8.183181
## 
## 
##                  Detection important variable(s)
## 
##               Lower    Upper Mu0 Important Variables?
## matematika 51.83163 73.32837  55                FALSE
## fisika     59.75125 73.44875  60                FALSE
install_load('ICSNP')
test <- HotellingsT2(data[,2:3],mu=mean0,test="f")
print(test)
## 
##  Hotelling's one sample T2-test
## 
## data:  data[, 2:3]
## T.2 = 3.3872, df1 = 2, df2 = 8, p-value = 0.08597
## alternative hypothesis: true location is not equal to c(55,60)

Kesimpulan : Tolak H0 pada taraf nyata 10% karena p-value < alpha
Artinya : Dengan tingkat kepercayaan 90%, dapat disimpulkan bahwa minimal ada salah satu dari rata-rata ujian matematika dan fisika yang memiliki nilai rata-rata tidak sama dengan nilai 55 atau nilai 60.

3.4 Elips Kepercayaan

install_load('ellipse')

n = 10
p = 2
plot(ellipse(cov_m,centre=xbar,level = 0.90, 
             t=sqrt(((n-1)*p/(n*(n-p)))*qf(0.90,p,n-p))),
     type="l",main = "Ellips Kepercayaan 90%")
points(xbar[1],xbar[2])

#Siswa dengan skor matematika 65 dan fisika 70
points(65,70,col = "red")

Berdasarkan gambar terlihat bahwa nilai tersebut dalam elips, dengan kata lain masuk ke dalam elips kepercayaan.

3.5 Selang Kepercayaan Simultan

T.ci = function(mu, Sigma, n, avec=rep(1,length(mu)), level=0.95){
p = length(mu)
cval = qf(level, p, n-p) * p * (n-1) / (n-p)
zhat = crossprod(avec, mu)
zvar = crossprod(avec, Sigma %*% avec) / n
const = sqrt(cval * zvar)
c(lower = zhat - const, upper = zhat + const)
}

n = 10

#Matematika
T.ci(mu=xbar, Sigma=cov_m, n=n, avec=c(1,0),level=0.9)
##    lower    upper 
## 51.83163 73.32837
#Fisika
T.ci(mu=xbar, Sigma=cov_m, n=n, avec=c(0,1),level=0.9)
##    lower    upper 
## 59.75125 73.44875

3.6 Selang Kepercayaan Bonferroni

bon = function(mu,S,n,alpha,k){
 p = length(mu)
 lower = mu[k] - sqrt(S[k,k]/n) * abs(qt(alpha/(2*p), df=n-1))
 upper = mu[k] + sqrt(S[k,k]/n) * abs(qt(alpha/(2*p), df=n-1))
 c(lower = lower,upper = upper)
}

#Matematika
bon(xbar, cov_m,10,0.1,1)
## lower.matematika upper.matematika 
##         53.39294         71.76706
#Fisika
bon(xbar, cov_m,10,0.1,2)
## lower.fisika upper.fisika 
##     60.74611     72.45389

4 Materi 4 - Uji Vektor Nilai Tengah Dua Populasi

4.1 Perbandingan Dua Vektor Nilai Tengah Sampel Berpasangan

4.1.1 Data

dataset <- read_excel("Data.xlsx", sheet='1')
datatable(dataset, filter = 'top', 
          options = list(pageLength = 10))

4.1.2 Selisih Essay Formal dan Informal

d_kata = dataset[,1]-dataset[,3]
d_kata_kerja = dataset[,2]-dataset[,4]

X = data.frame(d_kata,d_kata_kerja)
datatable(X, filter = 'top', 
          options = list(pageLength = 10))

4.1.3 vektor rataan dan matriks covarians

xbar = apply(X, 2, mean)
xbar
##       Siswa Kata_Formal 
##   -13.46667    32.80000
cov_m = cov(X)
cov_m
##                  Siswa Kata_Formal
## Siswa         60.40952   -131.3143
## Kata_Formal -131.31429   1096.0286

4.1.4 Uji T2 Hotelling Dua Populasi Sampel Berpasangan

\[H_{0}:\mu_{d}=\begin{bmatrix} 0\\ 0 \end{bmatrix}\]

\[H_{1}:\mu_{d}\neq \begin{bmatrix} 0\\ 0 \end{bmatrix}\]

mean0 = c(0,0)
result = OneSampleHT2(X,mu0=mean0,alpha=0.05)
summary(result)
##        One Sample Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 45.26063 
##  F value = 21.014 , df1 = 2 , df2 = 13 , p-value: 8.45e-05 
## 
##                    Descriptive Statistics
## 
##            Siswa Kata_Formal
## N      15.000000    15.00000
## Means -13.466667    32.80000
## Sd      7.772356    33.10632
## 
## 
##                  Detection important variable(s)
## 
##                 Lower     Upper Mu0 Important Variables?
## Siswa       -19.21212 -7.721217   0               *TRUE*
## Kata_Formal   8.32728 57.272720   0               *TRUE*

Kesimpulan : Tolak H0 pada taraf nyata 5% karena p-value < alpha
Artinya : Dengan tingkat kepercayaan 95%, dapat disimpulkan bahwa terdapat perbedaan kata dan kata kerja antara essay formal dengan essay informal.
Jika dilihat dari rata-rata selisih kata antara essay formal dengan essay informal dan rata-rata selisih kata kerja antara essay formal dengan essay informal di mana rata-rata selisih kata antara essay formal dengan essay informal lebih besar maka essay formal lebih baik daripada essay informal.

4.1.5 Selang Kepercayaan Simultan

result$CI
##                 Lower     Upper Mu0 Important Variables?
## Siswa       -19.21212 -7.721217   0               *TRUE*
## Kata_Formal   8.32728 57.272720   0               *TRUE*

4.1.6 Selang Kepercayaan Bonferroni

bon = function(mu,S,n,alpha,k){
 p = length(mu)
 lower = mu[k] - sqrt(S[k,k]/n) * abs(qt(alpha/(2*p), df=n-1))
 upper = mu[k] + sqrt(S[k,k]/n) * abs(qt(alpha/(2*p), df=n-1))
 c(lower = lower,upper = upper)
}

n = nrow(X)
#Kata
bon(xbar, cov_m,n,0.05,1)
## lower.Siswa upper.Siswa 
##  -18.502905   -8.430428
#Kata Kerja
bon(xbar, cov_m,n,0.05,2)
## lower.Kata_Formal upper.Kata_Formal 
##          11.34816          54.25184

4.2 Perbandingan Dua Vektor Nilai Tengah Sampel Saling Bebas Ragam Sama

4.2.1 Data

dataset <- read_excel("Data.xlsx", sheet='2')
datatable(dataset, filter = 'top', 
          options = list(pageLength = 10))
# Memisahkan Data dari Populasi 1 dan 2
data_cat = dataset[,1:2]
data_man = dataset[,3:4]

4.2.2 Vektor rataan dan matriks covarians

xbar1 = apply(data_cat, 2, mean)
xbar1
## TWK_CAT TIU_CAT 
##   64.55   52.95
xbar2 = apply(data_man, 2, mean)
xbar2
## TWK_MANUAL TIU_MANUAL 
##      65.75      60.10
cov_m1 = cov(data_cat)
cov_m1
##           TWK_CAT   TIU_CAT
## TWK_CAT 151.10263 -26.28684
## TIU_CAT -26.28684 154.15526
cov_m2 = cov(data_man)
cov_m2
##            TWK_MANUAL TIU_MANUAL
## TWK_MANUAL  333.77632   81.86842
## TIU_MANUAL   81.86842  230.41053
n1 = nrow(data_cat)
n2 = nrow(data_man)

# S Gabungan
s_gab = ((n1-1)*cov_m1+(n2-1)*cov_m2)/(n1+n2-2)
s_gab
##           TWK_CAT   TIU_CAT
## TWK_CAT 242.43947  27.79079
## TIU_CAT  27.79079 192.28289

4.2.3 Uji Hipotesis

\[H_{0}:\mu_{1}=\mu_{2}\]

\[H_{1}:\mu_{1}\neq \mu_{2}\]

install_load('Hotelling')
t2_homogen = hotelling.test(data_cat,data_man,var.equal=TRUE)
t2_homogen
## Test stat:  2.6599 
## Numerator df:  2 
## Denominator df:  37 
## P-value:  0.286

Kesimpulan : Gagal tolak H0 pada taraf nyata 5% karena p-value > alpha
Artinya : Pada Saat ragam Populasi Tes CPNS Manual diasumsikan sama dengan Ragam Populasi Tes CPNS CAT, maka dapat disimpulkan belum cukup bukti menolak Ho. Dengan kata lain, nilai Tes CPNS manual tidak berbeda dengan tes CPNS Cat dengan uji taraf nyata 5%.

4.2.4 Selang Kepercayaan Simultan

T.ci = function(mu1, mu2, S_gab, n1, n2, avec=rep(1,length(mu)), level=0.95){
p = length(mu1)
mu = mu1-mu2
cval = qf(level, p, n1+n2-p-1) * p * (n1+n2-2) / (n1+n2-p-1)
zhat = crossprod(avec, mu)
zvar = crossprod(avec, S_gab %*% avec)* (1/n1+1/n2)
const = sqrt(cval * zvar)
c(lower = zhat - const, upper = zhat + const)
}

#TWK
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(1,0),level=0.95)
##     lower     upper 
## -13.92559  11.52559
#TIU
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(0,1),level=0.95)
##      lower      upper 
## -18.483041   4.183041

4.2.5 Selang Kepercayaan Bonferroni

bon = function(mu1, mu2 ,S, n1, n2, alpha, k){
 p = length(mu1)
 mu = mu1-mu2
 lower = mu[k] - sqrt((S[k,k]) *(1/n1+1/n2))* abs(qt(alpha/(2*p), df=n1+n2-2))
 upper = mu[k] + sqrt((S[k,k]) *(1/n1+1/n2))* abs(qt(alpha/(2*p), df=n1+n2-2))
 ci = c(lower = lower,upper = upper)
 names(ci)= c("lower","upper")
 ci
}

#TWK
bon(xbar1, xbar2, s_gab, n1, n2,0.05,1)
##     lower     upper 
## -12.69081  10.29081
#TIU
bon(xbar1, xbar2, s_gab, n1, n2,0.05,2)
##      lower      upper 
## -17.383384   3.083384

4.3 Perbandingan Dua Vektor Nilai Tengah Sampel Saling Bebas Ragam Tidak Sama

4.3.1 Uji Hipotesis

\[H_{0}:\mu_{1}=\mu_{2}\]

\[H_{1}:\mu_{1}\neq \mu_{2}\]

t2_homogen = hotelling.test(data_cat,data_man,var.equal=FALSE)
t2_homogen
## Test stat:  2.6599 
## Numerator df:  2 
## Denominator df:  34.1358976944273 
## P-value:  0.287

Kesimpulan : Gagal tolak H0 pada taraf nyata 5% karena p-value > alpha
Artinya : Pada Saat ragam Populasi Tes CPNS Manual diasumsikan tidak sama dengan Ragam Populasi Tes CPNS CAT, maka dapat disimpulkan belum cukup bukti menolak Ho. Dengan kata lain, nilai Tes CPNS manual tidak berbeda dengan tes CPNS Cat dengan uji taraf nyata 5%.

4.3.2 Selang Kepercayaan Simultan

T.ci = function(mu1, mu2, S1, S2, n1, n2, avec=rep(1,length(mu)), level=0.95){
p = length(mu1)
mu = mu1-mu2
cval = qchisq(level, p)
zhat = crossprod(avec, mu)
zvar = crossprod(avec, S1 %*% avec)/n1 + crossprod(avec, S2 %*% avec)/n2
const = sqrt(cval * zvar)
c(lower = zhat - const, upper = zhat + const)
}

#TWK
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(1,0),level=0.95)
##     lower     upper 
## -13.25225  10.85225
#TIU
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(0,1),level=0.95)
##      lower      upper 
## -17.883388   3.583388

5 Materi 5 - Analisis Ragam Peubah Ganda (MANOVA)

5.1 Soal 1

install_load('car')
jagung = read.table(header=T,text =
               "
Varietas Y1 Y2
v1 6 7
v1 5 9
v2 4 6
v2 6 6
v2 4 7
v3 5 4
v3 6 4
")
datatable(jagung, filter = 'top', 
          options = list(pageLength = 10))

5.1.1 Manova

mod1 = Manova(lm(cbind(Y1,Y2)~Varietas,data=jagung),type="III")
summary(mod1,multivariate=TRUE)
## 
## Type III MANOVA Tests:
## 
## Sum of squares and products for error:
##           Y1        Y2
## Y1  3.666667 -1.666667
## Y2 -1.666667  2.666667
## 
## ------------------------------------------
##  
## Term: (Intercept) 
## 
## Sum of squares and products for the hypothesis:
##      Y1  Y2
## Y1 60.5  88
## Y2 88.0 128
## 
## Multivariate Tests: (Intercept)
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1   0.99248      198      2      3 0.00065196 ***
## Wilks             1   0.00752      198      2      3 0.00065196 ***
## Hotelling-Lawley  1 132.00000      198      2      3 0.00065196 ***
## Roy               1 132.00000      198      2      3 0.00065196 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ------------------------------------------
##  
## Term: Varietas 
## 
## Sum of squares and products for the hypothesis:
##            Y1         Y2
## Y1  1.1904762 -0.4761905
## Y2 -0.4761905 16.1904762
## 
## Multivariate Tests: Varietas
##                  Df test stat  approx F num Df den Df   Pr(>F)  
## Pillai            2  1.138478  2.642948      4      8 0.112828  
## Wilks             2  0.080460  3.788127      4      6 0.071870 .
## Hotelling-Lawley  2  8.707483  4.353741      4      4 0.091633 .
## Roy               2  8.382882 16.765765      2      4 0.011359 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Lihat pada Multivariate Tests: Varietas baris Wilks
Pada taraf signifikansi 5%, H0 gagal ditolak karena p-value = 0.071870 > 0.05.
Kesimpulan:
Tidak cukup bukti untuk menyatakan bahwa minimal ada 1 varietas yang berpengaruh terhadap produksi dan bobot jagung pada taraf nyata 5%.

5.2 Soal 4

diet = read.table(header=T,text =
               "
Kel P   K   KP
K1  20  5   18
K1  25  9   8
K1  23  15  20
K1  16  9   22
K1  20  6   22
K2  28  7   14
K2  25  14  5
K2  26  9   20
K2  19  15  22
K2  29  14  12
K3  15  6   3
K3  22  8   12
K3  27  9   14
K3  21  10  7
K3  17  9   1
")

datatable(diet, filter = 'top', 
          options = list(pageLength = 10))

5.2.1 Manova

mod2 = Manova(lm(cbind(P,K,KP)~Kel,data=diet),type="III")
summary(mod2,multivariate=TRUE)
## 
## Type III MANOVA Tests:
## 
## Sum of squares and products for error:
##        P     K    KP
## P  195.2   6.4 -15.0
## K    6.4 120.8  -7.2
## KP -15.0  -7.2 444.4
## 
## ------------------------------------------
##  
## Term: (Intercept) 
## 
## Sum of squares and products for the hypothesis:
##         P     K   KP
## P  2163.2 915.2 1872
## K   915.2 387.2  792
## KP 1872.0 792.0 1620
## 
## Multivariate Tests: (Intercept)
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1  0.948328 61.17669      3     10 9.7542e-07 ***
## Wilks             1  0.051672 61.17669      3     10 9.7542e-07 ***
## Hotelling-Lawley  1 18.353006 61.17669      3     10 9.7542e-07 ***
## Roy               1 18.353006 61.17669      3     10 9.7542e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ------------------------------------------
##  
## Term: Kel 
## 
## Sum of squares and products for the hypothesis:
##       P        K        KP
## P  77.2 51.60000  41.00000
## K  51.6 34.53333  30.86667
## KP 41.0 30.86667 292.93333
## 
## Multivariate Tests: Kel
##                  Df test stat approx F num Df den Df   Pr(>F)  
## Pillai            2 0.7797319 2.342942      6     22 0.066826 .
## Wilks             2 0.3653752 2.181205      6     20 0.088300 .
## Hotelling-Lawley  2 1.3397669 2.009650      6     18 0.117387  
## Roy               2 0.8970362 3.289133      3     11 0.061957 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Lihat pada Multivariate Tests: Kel baris Wilks
Pada taraf signifikansi 5%, H0 gagal ditolak karena p-value = 0.088300 > 0.05.
Kesimpulan:
Tidak cukup bukti untuk menolak H0 atau dengan kata lain metode pemberian informasi dari setiap kelompok tidak memberikan pengaruh yang nyata pada penilaian terhadap ketiga poin pada taraf nyata 5%.

6 Materi 6 - Analisis Profil (Profile Analysis)

6.1 Data

dataset <- read.csv("Data.csv",sep = ";")
datatable(dataset, filter = 'top', 
          options = list(pageLength = 10))

6.2 Plot

install_load('profileR')
mod <- pbg(data=dataset[,1:4], group=dataset[,5], original.name = TRUE, profile.plot = TRUE)

Berdasarkan grafik terlihat bahwa profil pikun sejajar dengan profil tidak pikun. Selain ini kedua profil tidak berhimpit. Dengan kata lain berdasarkan grafik peningkatan faktor pikun dan tidak pikun terhadap beberapa subtes sama. Sedangkan rata-rata hasil skor pikun berbeda dengan yang tidak pikun, di mana yang tidak pikun lebih tinggi.

6.3 Summary

# rata-rata tiap perlakuan untuk dua kelompok
print(mod)
## 
## Data Summary:
##                Pikun Tidak pikun
## Informasi   8.750000   12.567568
## Similaritas 5.333333    9.486486
## Aritmetik   8.500000   11.513514
## Gambar      4.750000    7.972973
# semua perhitungan analisis profil
profil <- summary(mod)
## Call:
## pbg(data = dataset[, 1:4], group = dataset[, 5], original.names = TRUE, 
##     profile.plot = TRUE)
## 
## Hypothesis Tests:
## $`Ho: Profiles are parallel`
##   Multivariate.Test  Statistic  Approx.F num.df den.df   p.value
## 1             Wilks 0.97461349 0.3907166      3     45 0.7602428
## 2            Pillai 0.02538651 0.3907166      3     45 0.7602428
## 3  Hotelling-Lawley 0.02604778 0.3907166      3     45 0.7602428
## 4               Roy 0.02604778 0.3907166      3     45 0.7602428
## 
## $`Ho: Profiles have equal levels`
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## group        1  114.3  114.31   17.44 0.000128 ***
## Residuals   47  308.1    6.56                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## $`Ho: Profiles are flat`
##          F df1 df2      p-value
## 1 51.80163   3  45 1.223077e-14

6.4 Uji Kesejajaran (Parallel Test)

\[H_{0}:C\mu_{1}=C\mu_{2}\]

\[H_{1}:C\mu_{1}\neq C\mu_{2}\]

profil$`Ho: Profiles are parallel`
##   Multivariate.Test  Statistic  Approx.F num.df den.df   p.value
## 1             Wilks 0.97461349 0.3907166      3     45 0.7602428
## 2            Pillai 0.02538651 0.3907166      3     45 0.7602428
## 3  Hotelling-Lawley 0.02604778 0.3907166      3     45 0.7602428
## 4               Roy 0.02604778 0.3907166      3     45 0.7602428

Berdasarkan statistik di atas, diperoleh F hitung sebesar 0.39 dengan p-value sebesar 0.76 sehingga pada taraf signifikansi 5%, H0 gagal ditolak. Jadi, dapat disimpulkan bahwa profil antara kelompok Usia (Pikun dan Tidak Pikun) adalah sejajar.

6.5 Uji Keberhimpitan

\[H_{0}:1'\mu_{1}=1'\mu_{2}\]

\[H_{1}:1'\mu_{1}\neq 1'\mu_{2}\]

profil$`Ho: Profiles have equal levels`
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## group        1  114.3  114.31   17.44 0.000128 ***
## Residuals   47  308.1    6.56                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan statistik di atas, diperoleh F hitung sebesar 17.44 dengan p-value 0.000128 sehingga pada taraf signifikansi 5%, H0 ditolak. Jadi, dapat disimpulkan bahwa profil antara kelompok Usia (Pikun dan Tidak Pikun) tidak berhimpit.

6.6 Uji Kesamaan

\[H_{0}:C(\mu_{1}-\mu_{2})=0\] \[H_{1}:C(\mu_{1}-\mu_{2})\neq 0\]

profil$`Ho: Profiles are flat`
##          F df1 df2      p-value
## 1 51.80163   3  45 1.223077e-14

Berdasarkan statistik di atas, diperoleh F hitung sebesar 51.80 dengan p-value 1.223077e-14 sehingga pada taraf signifikansi 5%, H0 ditolak. Jadi, dapat disimpulkan bahwa rata-rata untuk setiap sub tes pada lansia kelompok yang ada faktor kepikunan dan kelompok yang tidak ada faktor kepikunan menunjukkan konstanta yang berbeda.

7 Materi 7 - Analisis Komponen Utama (AKU) / Principal Component Analysis (PCA)

install_load('factoextra','ggcorrplot')

7.1 Data Pelari Wanita

Berikut adalah data catatan waktu hasil tujuh nomor cabang lari atletik wanita yang berasal dari 55 negara pada salah satu event olimpiade yaitu lari 100 meter, 200 meter, 400 meter, 800 meter, 1500 meter, 3000 meter, dan maraton. Tiga nomor cabang lari pertama dicatat dalam satuan detik, sedangkan empat nomor yang lain dalam menit.

install_load('dplyr')
data_women_records <- read_excel("women_track_records.xlsx") %>% as.data.frame()
datatable(data_women_records, filter = 'top', 
          options = list(pageLength = 10))
rownames(data_women_records) <- data_women_records$country
data_women_records <- data_women_records[,-8]

7.2 Eksplorasi

cor_women <- cor(data_women_records)
ggcorrplot(cor_women,type="lower",lab = TRUE)

7.3 Menerapkan PCA (AKU)

Dalam R, Penerapan PCA ini dapat dilakukan dengan menggunakan fungsi prcomp. Fungsi ini memiliki argumen scale dan center. Jika kedua argumen ini TRUE maka matrix yang digunakan untuk menghitung PCA adalah matrix korelasi. Namun, jika kedua argumen ini FALSE atau scale=FALSE, maka matrix yang digunakan adalah matrix covariance.

pca_women_records <- prcomp(data_women_records,scale=TRUE,center=TRUE)
summary(pca_women_records)
## Importance of components:
##                           PC1     PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     2.4095 0.80848 0.54762 0.35423 0.23198 0.19761 0.14981
## Proportion of Variance 0.8294 0.09338 0.04284 0.01793 0.00769 0.00558 0.00321
## Cumulative Proportion  0.8294 0.92276 0.96560 0.98353 0.99122 0.99679 1.00000

Hasil yang dikeluarkan dari sintaks di atas terdiri dari tiga macam, yaitu Standard deviation, Proportion of Variance dan Cumulative Proportion dari masing-masing Komponen Utama (Principal Component).

  • Standard deviaton merupakan akar dari akar ciri (eigenvalue). Dalam hal ini akar ciri berperan sebagai variance dari masing-masing komponen utama.

  • Proportion of Variance didapatkan dari akar ciri pada masing-masing komponen dibagi dengan total akar ciri. Proportion of Variance menjelaskan seberapa besar keragaman peubah asal yang dapat dijelaskan oleh masing-masing komponen utama. Semakin besar nilainya berarti semakin baik pula komponen utama tersebut untuk merepresentasikan peubah asal.

  • Cumulative Proportion menjelaskan seberapa besar keragaman yang dapat dijelaskan oleh komponen utama secara kumulatif. Misalnya saja dengan menggunakan dua komponen utama saja (PC1 dan PC2), sudah bisa menjelaskan lebih dari 92% keragaman dari data.
    Berdasarkan hal ini, kita akan memilih menggunakan dua komponen utama saja.

fviz_screeplot(pca_women_records,geom="line")

Hal lain yang bisa dilakukan untuk menentukan berapa banyak komponen utama yang digunakan adalah dengan screeplot. Fungsi untuk menampilkan screeplot pada R adalah fviz_screeplot yang didapat dari package factoextra. Banyaknya komponen utama bisa ditentukan dengan screeplot dengan melihat di komponen utama yang mana garisnya berbentuk seperti siku (elbow).
Pada gambar diatas, garis membentuk siku saat berada di komponen utama kedua (dimension kedua) sehingga banyaknya komponen utama yang digunakan sebanyak dua (Komponen Utama 1 dan Komponen Utama 2).

7.4 Interpretasi PCA (AKU)

Interpretasi metode PCA dapat dilakukan dengan menggunakan vektor ciri pada masing-masing komponen utama. Semakin besar vektor ciri pada komponen utama tertentu, maka semakin besar pula kontribusi dari peubah asal untuk membangun komponen utama tersebut. Catatan lain yang perlu diperhatikan adalah nilai negatif pada vektor ciri menandakan peubah asal memberikan kontribusi yang berkembalikan pada pembentukan komponen utama. Dalam konteks vektor ciri negatif, semakin besar nilai peubah asal semakin kecil nilai pada komponen utama.

pca_women_records$rotation
##                PC1        PC2         PC3         PC4         PC5          PC6
## 100m     0.3683561  0.4900597 -0.28601157  0.31938631  0.23116950  0.619825234
## 200m     0.3653642  0.5365800 -0.22981913 -0.08330196  0.04145457 -0.710764580
## 400m     0.3816103  0.2465377  0.51536655 -0.34737748 -0.57217791  0.190945970
## 800m     0.3845592 -0.1554023  0.58452608 -0.04207636  0.62032379 -0.019089032
## 1500m    0.3891040 -0.3604093  0.01291198  0.42953873  0.03026144 -0.231248381
## 3000m    0.3888661 -0.3475394 -0.15272772  0.36311995 -0.46335476  0.009277159
## Marathon 0.3670038 -0.3692076 -0.48437037 -0.67249685  0.13053590  0.142280558
##                  PC7
## 100m      0.05217655
## 200m     -0.10922503
## 400m      0.20849691
## 800m     -0.31520972
## 1500m     0.69256151
## 3000m    -0.59835943
## Marathon  0.06959828

Karena kita hanya menggunakan dua komponen saja, maka vector ciri yang akan dinterpretasikan hanya pada PC1 dan PC2. PC1 memiliki vektor ciri yang relatif sama yaitu berkisar di 0.3 untuk semua cabang lomba. Vektor ciri yang relatif sama ini menandakan bahwa kontribusi peubah asal untuk membangun komponen utama ini relatif sama. Artinya nilai-nilai yang ada di PC1 (score value) dapat menggambarkan waktu lari untuk semua cabang lomba. Oleh karena itu kita dapat dapat menggunakan PC1 untuk menentukan negara mana yang memiliki pelari tercepat untuk semua kategori lomba.
Vektor ciri di PC2 memiliki nilai positif untuk cabang lari jarak dekat (100m -400m) dan nilai negatif untuk cabang lari jarak jauh (800m-marathon). Hal ini berarti semakin besar score value pada PC2 maka waktu lari cabang jarak dekat semakin lambat namun waktu lari untuk cabang jarak jauh semakin cepat. Oleh karena itu, PC2 dapat digunakan untuk menentukan negara mana yang pada cabang lari jarak dekat waktunya mirip seperti cabang lari jarak jauh.

Note: Interpretasi komponen utama memiliki subjektifitas yang tinggi, oleh karena itu setiap orang menginterpretasikanya berbeda.

Hal terakhir yang bisa diinterpretasikan adalah score value pada PC1 dan PC2. Score value merupakan observasi/koordinat baru pada peubah komponen utama. Dalam konteks data pelari diatas, observasinya adalah negara, sehingga kita dapat memberi insight cabang perlombaan lari dari setiap negara. Untuk melihat score value pada komponen utama dapat dilihat dengan menggunakan sintaks berikut.

datatable(pca_women_records$x, filter = 'top', 
          options = list(pageLength = 10))

Agar lebih mudah dalam menginterpretasikan score value maka digunakaan grafik di bawah ini.

fviz_pca_ind(pca_women_records,col.ind = "darkred")

Berdasarkan grafik score value dapat diketahui bahwa negara yang memiliki catatan waktu pelari terlambat untuk semua cabang lomba adalah negara wsamoa. Hal ini dikarenakan wsamoa score value wsakoa untuk PC1 (Dim1) paling besar diantara yang lain. Walaupun negara wsamoa memiliki cabang lari terlama disemua cabang lomba, namun perbedaan waktu terkecil antara pelari jarak jauh dan jarak dekat adalah negara wsamoa. Hal ini berarti pelari untuk lomba jarak dekat sangat lambat karena memiliki waktu yang hampir mirip seperti pelari jarak jauh. Sedangkan negara yang memiliki pelari tercepat untuk semua cabang lomba adalah gdr.