library(readxl)
## Warning: package 'readxl' was built under R version 4.4.2
data <- read_xlsx("C:\\Users\\User\\Desktop\\File Nida\\Alpro\\DATA TUGAS.xlsx")
head(data)
## # A tibble: 6 × 9
##   `No Sek` TAHUN `Status Sekolah` Provinsi  `Mutu Lulusan` `Proses Pembelajaran`
##      <dbl> <dbl> <chr>            <chr>              <dbl>                 <dbl>
## 1        1  2020 Swasta           JAWA TIM…           88.6                  90  
## 2        2  2020 Swasta           SUMATERA…           82.9                  86.7
## 3        3  2020 Swasta           JAWA BAR…           74.3                  83.3
## 4        4  2020 Negeri           BALI                94.3                  96.7
## 5        5  2020 Negeri           SUMATERA…           97.1                  96.7
## 6        6  2020 Swasta           JAWA BAR…           82.9                  90  
## # ℹ 3 more variables: `Mutu Guru` <dbl>, `Manajemen S/M` <dbl>,
## #   `Peringkat Akreditasi` <chr>

Hitung Rata-Rata Tiap Variabel Per Provinsi

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data_rata <- data %>%
  group_by(Provinsi) %>%
  summarise(
    Rata_ML = mean(`Mutu Lulusan`, na.rm=TRUE),
    Rata_PP = mean(`Proses Pembelajaran`, na.rm=TRUE),
    Rata_MG = mean(`Mutu Guru`, na.rm=TRUE),
    Rata_MSM = mean(`Manajemen S/M`, na.rm=TRUE)
  )

data_rata <- data_rata %>%
  mutate(Kode_Provinsi = 1:n()) %>%
select(Kode_Provinsi, Provinsi, everything())
data_rata
## # A tibble: 34 × 6
##    Kode_Provinsi Provinsi      Rata_ML Rata_PP Rata_MG Rata_MSM
##            <int> <chr>           <dbl>   <dbl>   <dbl>    <dbl>
##  1             1 ACEH             85.0    84.5    82.1     85.4
##  2             2 BALI             93.4    91.9    91.9     95.5
##  3             3 BANTEN           91.3    90.4    88.3     92.1
##  4             4 BENGKULU         93.4    88.5    87.0     91.2
##  5             5 DI YOGYAKARTA    91.8    92.0    87.1     93.7
##  6             6 DKI JAKARTA      94.5    91.1    88.8     92.7
##  7             7 GORONTALO        87.4    85.8    83.9     89.2
##  8             8 JAMBI            91.9    89.2    88.8     93.1
##  9             9 JAWA BARAT       91.6    90.1    88.3     93.1
## 10            10 JAWA TENGAH      92.5    91.0    88.5     93.3
## # ℹ 24 more rows

Menhitung akar ciri dan vektor ciri dari sigma

data_numerik <- data_rata %>%
  select(Rata_ML, Rata_PP, Rata_MG, Rata_MSM)

sigma <- cov(data_numerik, use="complete.obs")
sigma
##            Rata_ML  Rata_PP   Rata_MG  Rata_MSM
## Rata_ML  10.399816 8.644934 10.355117 10.114022
## Rata_PP   8.644934 8.794596  9.667536  9.293849
## Rata_MG  10.355117 9.667536 13.138778 11.048581
## Rata_MSM 10.114022 9.293849 11.048581 12.328560
hasil_eigen <- eigen(sigma)
hasil_eigen$values #akar ciri
## [1] 40.9576162  1.6905585  1.1482850  0.8652905
hasil_eigen$vectors #vektor ciri
##            [,1]        [,2]       [,3]       [,4]
## [1,] -0.4830764  0.12779493 -0.7635520 -0.4090158
## [2,] -0.4443967 -0.03485035 -0.1929188  0.8741163
## [3,] -0.5424766 -0.73158057  0.3435127 -0.2291464
## [4,] -0.5242785  0.66876287  0.5116343 -0.1269592

Persamaan KU 1 sampai dengan KU 4

# 2. Hitung akar ciri dari matriks sigma berukuran 4x4

data_pca <- data_rata %>%
  select(Rata_ML, Rata_PP, Rata_MG, Rata_MSM)


# 3. Cari Persamaan Komponen Utama 1 sampai 4
pca_result <- prcomp(data_pca, scale. = FALSE)
pca_result$rotation
##                PC1         PC2        PC3        PC4
## Rata_ML  0.4830764 -0.12779493 -0.7635520  0.4090158
## Rata_PP  0.4443967  0.03485035 -0.1929188 -0.8741163
## Rata_MG  0.5424766  0.73158057  0.3435127  0.2291464
## Rata_MSM 0.5242785 -0.66876287  0.5116343  0.1269592

Hitung keragaman yang dijelaskan oleh komponen utama 1-4

# proporsi keragaman tiap komponen
prop_ragam <- hasil_eigen$values / sum(hasil_eigen$values)

keragaman <- data.frame(
  komponen = paste0("KU", 1:4),
  proporsi_ragam = round(prop_ragam, 3),
  proporsi_kumulatif = round(cumsum(prop_ragam), 3)
)

keragaman
##   komponen proporsi_ragam proporsi_kumulatif
## 1      KU1          0.917              0.917
## 2      KU2          0.038              0.955
## 3      KU3          0.026              0.981
## 4      KU4          0.019              1.000

Hitung Persentase KU 1 dan KU 2 dalam menjelaskan keragaman model

## Hitung persentase masing-masing komponen utama
persentase_KU1 <- prop_ragam[1] * 100
persentase_KU2 <- prop_ragam[2] * 100
persentase_KU3 <- prop_ragam[3] * 100
persentase_KU4 <- prop_ragam[4] * 100

## Jika ingin menampilkan semua hasil persentase KU1–KU4
data.frame(
  Komponen = paste0("KU", 1:4),
  Persentase = round(c(persentase_KU1, persentase_KU2, persentase_KU3, persentase_KU4), 2)
)
##   Komponen Persentase
## 1      KU1      91.71
## 2      KU2       3.79
## 3      KU3       2.57
## 4      KU4       1.94
## Hitung berapa persen KU1 dan KU2 menjelaskan keragaman total
persentase_KU12 <- sum(prop_ragam[1:2]) * 100

cat("Komponen Utama 1 dan 2 menjelaskan sebesar", round(persentase_KU12, 2), "% dari total keragaman data.\n")
## Komponen Utama 1 dan 2 menjelaskan sebesar 95.49 % dari total keragaman data.

Plot Provinsi Berdasarkan KU 1 dan KU 2

## --- Hitung skor komponen utama (PC scores) ---
skor_pca <- as.data.frame(pca_result$x)  # skor KU1, KU2, KU3, dst
skor_pca$Provinsi <- data_rata$Provinsi  # tambahkan nama provinsi

head(skor_pca)
##         PC1        PC2        PC3        PC4      Provinsi
## 1 -7.335566  0.8188716  0.1750006 -0.2857346          ACEH
## 2 10.604447  0.4279200  0.9079008  0.1892718          BALI
## 3  5.201902  0.2389251 -0.1728770 -0.6398109        BANTEN
## 4  4.208035 -0.3581633 -2.3191420  1.4474299      BENGKULU
## 5  6.343829 -1.6495489 -0.4198079 -1.8914077 DI YOGYAKARTA
## 6  7.644546 -0.1154747 -2.2932871  0.2414377   DKI JAKARTA
## --- Plot sebaran provinsi berdasarkan KU1 dan KU2 ---
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
ggplot(skor_pca, aes(x = PC1, y = PC2, label = Provinsi)) +
  geom_point(color = "steelblue", size = 3) +
  geom_text(vjust = -0.5, size = 3) +
  labs(
    title = "Peta Sebaran Provinsi Berdasarkan Komponen Utama 1 dan 2",
    x = "Komponen Utama 1 (KU1)",
    y = "Komponen Utama 2 (KU2)"
  ) +
  theme_minimal()

## --- Hitung skor komponen utama (PC scores) ---
skor_pca <- as.data.frame(pca_result$x)  # skor KU1, KU2, KU3, dst
skor_pca$Kode_Provinsi <- data_rata$Kode_Provinsi  # tambahkan kode provinsi

## --- Plot sebaran provinsi berdasarkan KU1 dan KU2 ---
library(ggplot2)
library(ggrepel)
## Warning: package 'ggrepel' was built under R version 4.4.2
ggplot(skor_pca, aes(x = PC1, y = PC2, label = Kode_Provinsi)) +
  geom_point(color = "steelblue", size = 3) +
  geom_text_repel(size = 3) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
  labs(
    title = "Sebaran Provinsi Berdasarkan Komponen Utama 1 dan 2",
    x = "Komponen Utama 1 (KU1)",
    y = "Komponen Utama 2 (KU2)"
  ) +
  theme_minimal()