P3 SPK_Metode SAW

Sistem Pendukung Keputusan Penilaian Kinerja Guru

A. Metode SAW

Sumber : https://doi.org/10.32877/bt.v7i1.1608

1. Input matriks keputusan

data_matriks <- matrix(c(
  3,3,2,2,3,   # H. Ahyad
  2,2,2,3,3,   # Djoeniati, SH., S.Pd
  3,2,3,3,3,   # Saddam Husain
  2,3,3,2,3,   # Siti Hawa, S.Ag
  3,1,1,2,2    # Reni Regislawati, S.Pd
), nrow = 5, byrow = TRUE)

rownames(data_matriks) <- c(
  "H. Ahyad",
  "Djoeniati, SH., S.Pd",
  "Saddam Husain",
  "Siti Hawa, S.Ag",
  "Reni Regislawati, S.Pd"
)

colnames(data_matriks) <- c(
  "Absensi",
  "Jumlah Mengajar",
  "Disiplin",
  "Tugas Tambahan",
  "Pengembangan Profesi"
)

data_matriks
##                        Absensi Jumlah Mengajar Disiplin Tugas Tambahan
## H. Ahyad                     3               3        2              2
## Djoeniati, SH., S.Pd         2               2        2              3
## Saddam Husain                3               2        3              3
## Siti Hawa, S.Ag              2               3        3              2
## Reni Regislawati, S.Pd       3               1        1              2
##                        Pengembangan Profesi
## H. Ahyad                                  3
## Djoeniati, SH., S.Pd                      3
## Saddam Husain                             3
## Siti Hawa, S.Ag                           3
## Reni Regislawati, S.Pd                    2

2. Jenis kriteria (1 = benefit, -1 = cost)

jenis_kriteria <- c(1, 1, 1, 1, 1)

jenis_kriteria
## [1] 1 1 1 1 1

3. Fungsi normalisasi

normalisasi <- function(data, jenis) {
  
  norm_matriks <- matrix(0, nrow = nrow(data), ncol = ncol(data))
  
  for (j in 1:ncol(data)) {
    
    if (jenis[j] == 1) {  
      # benefit (nilai lebih besar lebih baik)
      norm_matriks[, j] <- data[, j] / max(data[, j])
      
    } else {  
      # cost (nilai lebih kecil lebih baik)
      norm_matriks[, j] <- min(data[, j]) / data[, j]
    }
  }
  
  rownames(norm_matriks) <- rownames(data)
  colnames(norm_matriks) <- colnames(data)
  
  return(norm_matriks)
}

# Proses normalisasi
normal <- normalisasi(data_matriks, jenis_kriteria)
normal
##                          Absensi Jumlah Mengajar  Disiplin Tugas Tambahan
## H. Ahyad               1.0000000       1.0000000 0.6666667      0.6666667
## Djoeniati, SH., S.Pd   0.6666667       0.6666667 0.6666667      1.0000000
## Saddam Husain          1.0000000       0.6666667 1.0000000      1.0000000
## Siti Hawa, S.Ag        0.6666667       1.0000000 1.0000000      0.6666667
## Reni Regislawati, S.Pd 1.0000000       0.3333333 0.3333333      0.6666667
##                        Pengembangan Profesi
## H. Ahyad                          1.0000000
## Djoeniati, SH., S.Pd              1.0000000
## Saddam Husain                     1.0000000
## Siti Hawa, S.Ag                   1.0000000
## Reni Regislawati, S.Pd            0.6666667

4. Bobot kriteria (jumlah harus = 1)

bobot <- c(0.15,0.10,0.25,0.25,0.25)
bobot
## [1] 0.15 0.10 0.25 0.25 0.25

5. Hitung skor akhir SAW

skor <- normal %*% bobot
skor 
##                             [,1]
## H. Ahyad               0.8333333
## Djoeniati, SH., S.Pd   0.8333333
## Saddam Husain          0.9666667
## Siti Hawa, S.Ag        0.8666667
## Reni Regislawati, S.Pd 0.6000000

6. Membuat tabel hasil dan rank

hasil <- data.frame(
  Alternatif = rownames(normal),
  Skor_SAW = as.numeric(skor)
)

# Mengurutkan dari nilai terbesar
hasil <- hasil[order(-hasil$Skor_SAW), ]

# Menambahkan kolom Rank
hasil$Rank <- rank(-hasil$Skor_SAW, ties.method = "first")
hasil
##               Alternatif  Skor_SAW Rank
## 3          Saddam Husain 0.9666667    1
## 4        Siti Hawa, S.Ag 0.8666667    2
## 1               H. Ahyad 0.8333333    3
## 2   Djoeniati, SH., S.Pd 0.8333333    4
## 5 Reni Regislawati, S.Pd 0.6000000    5

B. Metode WP

S_wp_norm <- apply(normal, 1, function(x) prod(x^bobot))
hasil_wp <- data.frame(
  Alternatif = rownames(data_matriks),
  Skor_WP = as.numeric(S_wp_norm)
)

# ranking
hasil_wp <- hasil_wp[order(-hasil_wp$Skor_WP), ]

hasil_wp$Rank <- rank(-hasil_wp$Skor_WP, ties.method = "first")

print(hasil_wp)
##               Alternatif   Skor_WP Rank
## 3          Saddam Husain 0.9602645    1
## 4        Siti Hawa, S.Ag 0.8502830    2
## 1               H. Ahyad 0.8164966    3
## 2   Djoeniati, SH., S.Pd 0.8164966    4
## 5 Reni Regislawati, S.Pd 0.5558555    5

(Weighted Aggregated Sum Product Assessment) WASPAS

Gabungan [ WSM + WPM ]

# Komponen WSM (penjumlahan berbobot)
Q1_wsm <- apply(normal, 1, function(x) sum(x * bobot))

# Komponen WPM (perkalian berbobot)
Q2_wpm <- apply(normal, 1, function(x) prod(x^bobot))

lambda <- 0.5 # seimbang tidak condong ke wsp atau wpm

Q_waspas <- lambda * Q1_wsm + (1 - lambda) * Q2_wpm

hasil_waspas <- data.frame(
  Alternatif = rownames(data_matriks),
  Skor_WASPAS = as.numeric(Q_waspas)
)

hasil_waspas <- hasil_waspas[order(-hasil_waspas$Skor_WASPAS), ]

hasil_waspas$Rank <- rank(-hasil_waspas$Skor_WASPAS, ties.method = "first")

print(hasil_waspas)
##               Alternatif Skor_WASPAS Rank
## 3          Saddam Husain   0.9634656    1
## 4        Siti Hawa, S.Ag   0.8584748    2
## 1               H. Ahyad   0.8249150    3
## 2   Djoeniati, SH., S.Pd   0.8249150    4
## 5 Reni Regislawati, S.Pd   0.5779278    5