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()
