Persiapan Data

1.)Input Dataset dan inisiasi nama; 2.)Mengambil 38baris sesuai 38Provinsi; 3.)Mengambil hanya kolom numerik (kolom2-13); 4.)Dari cek missing value diketahui kolom13(Tenaga Kesehatan Tradisional) memiliki >50% data NAN, maka tersisa 11kolom.

data_raw <- read.csv("Tenaga_Kesehatan.csv", stringsAsFactors = FALSE)
library(knitr)
kable(data_raw, caption = "Data Tenaga Kesehatan Menurut Provinsi", align = "l")
Data Tenaga Kesehatan Menurut Provinsi
Provinsi Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika Tenaga.Kesehatan.Tradisional
Aceh 21 21 4 4 1 1 6 77 484 2 2 NA
Sumatera Utara 24 25 5 4 986 2 12 45 516 2 4 9
Sumatera Barat 12 9 3 2 641 1 5 31 380 2 2 2
Riau 13 10 4 2 487 770 6 60 466 1 2 2
Jambi 8 7 2 1 474 521 3 30 218 857 1 9
Sumatera Selatan 17 15 4 3 1 1 6 49 418 2 3 NA
Bengkulu 5 5 1 1 330 578 1 16 86 367 931 NA
Lampung 13 11 3 1 758 806 4 25 327 1 2 56
Kepulauan Bangka Belitung 4 2 1 479 156 247 1 20 114 402 585 NA
Kepulauan Riau 5 3 2 509 342 273 3 25 140 549 805 2
DKI Jakarta 39 7 13 1 743 1 28 333 2 5 8 166
Jawa Barat 74 33 26 4 2 3 33 263 2 9 12 40
Jawa Tengah 66 30 25 4 2 3 21 240 3 8 10 34
DI Yogyakarta 12 3 5 490 398 634 6 178 599 2 2 4
Jawa Timur 74 33 22 4 2 4 26 230 2 7 11 187
Banten 19 10 6 1 537 815 12 91 766 2 3 10
Bali 13 6 4 1 556 788 8 53 427 1 2 16
Nusa Tenggara Barat 13 8 3 1 622 1 3 29 284 2 2 2
Nusa Tenggara Timur 16 12 3 3 1 2 2 11 191 2 2 1
Kalimantan Barat 11 7 2 1 661 853 3 25 199 1 2 2
Kalimantan Tengah 8 5 2 738 322 584 2 25 145 617 1 NA
Kalimantan Selatan 10 6 3 1 657 1 3 57 265 2 2 3
Kalimantan Timur 11 5 4 1 390 496 4 41 406 950 2 6
Kalimantan Utara 3 1 708 356 126 144 744 6 51 223 357 NA
Sulawesi Utara 10 3 2 1 552 720 3 17 217 643 904 1
Sulawesi Tengah 9 7 2 3 714 688 2 32 135 570 1 2
Sulawesi Selatan 27 20 6 5 1 2 7 21 615 3 4 5
Sulawesi Tenggara 10 8 3 4 795 1 2 16 129 1 2 NA
Gorontalo 4 2 731 1 248 579 750 3 39 238 501 NA
Sulawesi Barat 4 4 692 947 278 340 665 1 57 182 353 NA
Maluku 7 4 946 2 661 747 1 11 63 246 825 NA
Maluku Utara 4 4 772 2 319 496 838 3 56 262 812 NA
Papua Barat 2 1 451 339 90 186 442 3 26 96 332 1
Papua Barat Daya 2 1 415 427 144 238 428 3 13 81 228 NA
Papua 4 2 963 661 240 333 928 2 41 159 789 NA
Papua Selatan 2 992 272 272 90 125 324 2 17 67 231 NA
Papua Tengah 3 1 501 492 196 150 523 4 21 97 404 NA
Papua Pegunungan 1 613 202 316 74 74 221 1 5 20 144 64
Indonesia 583 334 165 65 25 36 220 2 17 61 90 624
NA NA NA NA NA NA NA NA NA NA NA NA
Catatan NA NA NA NA NA NA NA NA NA NA NA NA
1Tenaga medis terdiri atas dokter, dokter gigi, dokter spesialis, dan dokter gigi spesialis baik di dalam maupun di luar negari yang diakui oleh pemerintah RI sesuai dengan peraturan perundang-undangan (UU No.17 Tahun 2023 tentang Kesehatan)/ Medical worker includes doctor, dentist, medical specialist, and dentist specialist at home and abroad recognized by Indonesian government in accordance with the laws and regulations (Law No. 17 year 2023 regarding Health) NA NA NA NA NA NA NA NA NA NA NA NA
data <- data_raw[1:38,]
data <- data[,2:12]
kable(data, caption = "Data Tenaga Kesehatan Menurut Provinsi", align = "l")
Data Tenaga Kesehatan Menurut Provinsi
Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
21 21 4 4 1 1 6 77 484 2 2
24 25 5 4 986 2 12 45 516 2 4
12 9 3 2 641 1 5 31 380 2 2
13 10 4 2 487 770 6 60 466 1 2
8 7 2 1 474 521 3 30 218 857 1
17 15 4 3 1 1 6 49 418 2 3
5 5 1 1 330 578 1 16 86 367 931
13 11 3 1 758 806 4 25 327 1 2
4 2 1 479 156 247 1 20 114 402 585
5 3 2 509 342 273 3 25 140 549 805
39 7 13 1 743 1 28 333 2 5 8
74 33 26 4 2 3 33 263 2 9 12
66 30 25 4 2 3 21 240 3 8 10
12 3 5 490 398 634 6 178 599 2 2
74 33 22 4 2 4 26 230 2 7 11
19 10 6 1 537 815 12 91 766 2 3
13 6 4 1 556 788 8 53 427 1 2
13 8 3 1 622 1 3 29 284 2 2
16 12 3 3 1 2 2 11 191 2 2
11 7 2 1 661 853 3 25 199 1 2
8 5 2 738 322 584 2 25 145 617 1
10 6 3 1 657 1 3 57 265 2 2
11 5 4 1 390 496 4 41 406 950 2
3 1 708 356 126 144 744 6 51 223 357
10 3 2 1 552 720 3 17 217 643 904
9 7 2 3 714 688 2 32 135 570 1
27 20 6 5 1 2 7 21 615 3 4
10 8 3 4 795 1 2 16 129 1 2
4 2 731 1 248 579 750 3 39 238 501
4 4 692 947 278 340 665 1 57 182 353
7 4 946 2 661 747 1 11 63 246 825
4 4 772 2 319 496 838 3 56 262 812
2 1 451 339 90 186 442 3 26 96 332
2 1 415 427 144 238 428 3 13 81 228
4 2 963 661 240 333 928 2 41 159 789
2 992 272 272 90 125 324 2 17 67 231
3 1 501 492 196 150 523 4 21 97 404
1 613 202 316 74 74 221 1 5 20 144
str(data)
## 'data.frame':    38 obs. of  11 variables:
##  $ Perawat                          : int  21 24 12 13 8 17 5 13 4 5 ...
##  $ Bidan                            : int  21 25 9 10 7 15 5 11 2 3 ...
##  $ Kefarmasian                      : int  4 5 3 4 2 4 1 3 1 2 ...
##  $ Tenaga.Kesehatan.Masyarakat      : int  4 4 2 2 1 3 1 1 479 509 ...
##  $ Tenaga.Kesehatan.Lingkungan      : int  1 986 641 487 474 1 330 758 156 342 ...
##  $ Tenaga.Gizi                      : int  1 2 1 770 521 1 578 806 247 273 ...
##  $ Tenaga.Medis                     : int  6 12 5 6 3 6 1 4 1 3 ...
##  $ Tenaga.Kesehatan.Psikologi.Klinis: int  77 45 31 60 30 49 16 25 20 25 ...
##  $ Tenaga.Keterapian.Fisik          : int  484 516 380 466 218 418 86 327 114 140 ...
##  $ Tenaga.Keteknisan.Medis          : int  2 2 2 1 857 2 367 1 402 549 ...
##  $ Tenaga.Teknik.Biomedika          : int  2 4 2 2 1 3 931 2 585 805 ...
summary(data)
##     Perawat          Bidan         Kefarmasian    Tenaga.Kesehatan.Masyarakat
##  Min.   : 1.00   Min.   :  1.00   Min.   :  1.0   Min.   :  1.0              
##  1st Qu.: 4.00   1st Qu.:  3.25   1st Qu.:  3.0   1st Qu.:  1.0              
##  Median :10.00   Median :  7.00   Median :  4.5   Median :  3.5              
##  Mean   :15.26   Mean   : 50.95   Mean   :179.3   Mean   :160.1              
##  3rd Qu.:15.25   3rd Qu.: 11.75   3rd Qu.:254.5   3rd Qu.:333.2              
##  Max.   :74.00   Max.   :992.00   Max.   :963.0   Max.   :947.0              
##  Tenaga.Kesehatan.Lingkungan  Tenaga.Gizi      Tenaga.Medis  
##  Min.   :  1.0               Min.   :  1.00   Min.   :  1.0  
##  1st Qu.: 99.0               1st Qu.:  2.25   1st Qu.:  3.0  
##  Median :326.0               Median :242.50   Median :  6.0  
##  Mean   :357.8               Mean   :321.26   Mean   :159.9  
##  3rd Qu.:605.5               3rd Qu.:582.75   3rd Qu.:174.0  
##  Max.   :986.0               Max.   :853.00   Max.   :928.0  
##  Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik
##  Min.   :  1.00                    Min.   :  2.0          
##  1st Qu.:  7.25                    1st Qu.: 39.5          
##  Median : 25.00                    Median :137.5          
##  Mean   : 54.71                    Mean   :208.6          
##  3rd Qu.: 52.00                    3rd Qu.:366.8          
##  Max.   :333.00                    Max.   :766.0          
##  Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
##  Min.   :  1.0           Min.   :  1            
##  1st Qu.:  2.0           1st Qu.:  2            
##  Median : 14.5           Median :  6            
##  Mean   :175.8           Mean   :218            
##  3rd Qu.:244.0           3rd Qu.:356            
##  Max.   :950.0           Max.   :931
colSums(is.na(data))
##                           Perawat                             Bidan 
##                                 0                                 0 
##                       Kefarmasian       Tenaga.Kesehatan.Masyarakat 
##                                 0                                 0 
##       Tenaga.Kesehatan.Lingkungan                       Tenaga.Gizi 
##                                 0                                 0 
##                      Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis 
##                                 0                                 0 
##           Tenaga.Keterapian.Fisik           Tenaga.Keteknisan.Medis 
##                                 0                                 0 
##           Tenaga.Teknik.Biomedika 
##                                 0

Analisis Awal

Tidak digunakan dalam analisis utama, hanya untuk melihat struktur varians data. 1.)Standarisasi data setiap variabel diubah menjadi rata-rata=0 dan simpangan baku=1, agar variabel besrkala besar tidak mendominasi PCA; 2.)Covariance dihitung dari data standar untuk mengetahui seberapa kuat hubungan antar jenis tenaga kesehatan; 3.)Eigen value merupakan komponen utama dengan nilai lebih dari satu dipertahankan dan nilai minimal 0,4; 4.)Boxplot menunjukkan banyaknya outlier, tapi dalam analisis ini masih menggunakan PCA secara general dan untuk outlier ada khusus RPCA.

data_scale = scale(data)
kable(data_scale, caption = "Data Tenaga Kesehatan Menurut Provinsi", align = "l")
Data Tenaga Kesehatan Menurut Provinsi
Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
0.3114538 -0.1618297 -0.5736386 -0.6038207 -1.2740839 -1.0300908 -0.5441251 0.2729808 1.3257755 -0.6682368 -0.6798203
0.4743241 -0.1402145 -0.5703660 -0.6038207 2.2430605 -1.0268744 -0.5229109 -0.1189255 1.4797970 -0.6682368 -0.6735249
-0.1771572 -0.2266753 -0.5769111 -0.6115567 1.0111673 -1.0300908 -0.5476608 -0.2903845 0.8252056 -0.6682368 -0.6798203
-0.1228671 -0.2212715 -0.5736386 -0.6115567 0.4612787 1.4433120 -0.5441251 0.0647806 1.2391384 -0.6720813 -0.6798203
-0.3943176 -0.2374829 -0.5801836 -0.6154248 0.4148595 0.6424313 -0.5547322 -0.3026316 0.0454718 2.6188204 -0.6829680
0.0942933 -0.1942525 -0.5736386 -0.6076887 -1.2740839 -1.0300908 -0.5441251 -0.0699372 1.0081061 -0.6682368 -0.6766726
-0.5571880 -0.2482905 -0.5834561 -0.6154248 -0.0993220 0.8257654 -0.5618036 -0.4740906 -0.5898669 0.7350099 2.2443927
-0.1228671 -0.2158677 -0.5769111 -0.6154248 1.4289398 1.5591020 -0.5511965 -0.3638670 0.5701075 -0.6720813 -0.6798203
-0.6114781 -0.2645020 -0.5834561 1.2334961 -0.7206247 -0.2388592 -0.5618036 -0.4251023 -0.4550981 0.8695678 1.1552886
-0.5571880 -0.2590982 -0.5801836 1.3495371 -0.0564735 -0.1552331 -0.5547322 -0.3638670 -0.3299556 1.4347109 1.8477826
1.2886758 -0.2374829 -0.5441859 -0.6154248 1.3753792 -1.0300908 -0.4663398 3.4082314 -0.9941733 -0.6567032 -0.6609341
3.1888296 -0.0969841 -0.5016431 -0.6038207 -1.2705132 -1.0236580 -0.4486613 2.5509363 -0.9941733 -0.6413252 -0.6483433
2.7545088 -0.1131955 -0.5049156 -0.6038207 -1.2705132 -1.0236580 -0.4910897 2.2692536 -0.9893601 -0.6451697 -0.6546387
-0.1771572 -0.2590982 -0.5703660 1.2760445 0.1434860 1.0058832 -0.5441251 1.5099351 1.8792902 -0.6682368 -0.6798203
3.1888296 -0.0969841 -0.5147332 -0.6038207 -1.2705132 -1.0204416 -0.4734112 2.1467829 -0.9941733 -0.6490142 -0.6514910
0.2028736 -0.2212715 -0.5670935 -0.6154248 0.6398140 1.5880495 -0.5229109 0.4444398 2.6830899 -0.6682368 -0.6766726
-0.1228671 -0.2428867 -0.5736386 -0.6154248 0.7076574 1.5012070 -0.5370537 -0.0209489 1.0514247 -0.6720813 -0.6798203
-0.1228671 -0.2320791 -0.5769111 -0.6154248 0.9433239 -1.0300908 -0.5547322 -0.3148787 0.3631411 -0.6682368 -0.6798203
0.0400032 -0.2104639 -0.5769111 -0.6076887 -1.2740839 -1.0268744 -0.5582679 -0.5353260 -0.0844838 -0.6682368 -0.6798203
-0.2314473 -0.2374829 -0.5801836 -0.6154248 1.0825814 1.7102723 -0.5547322 -0.3638670 -0.0459785 -0.6720813 -0.6798203
-0.3943176 -0.2482905 -0.5801836 2.2353172 -0.1278876 0.8450638 -0.5582679 -0.3638670 -0.3058897 1.6961377 -0.6829680
-0.2857374 -0.2428867 -0.5769111 -0.6154248 1.0682986 -1.0300908 -0.5547322 0.0280394 0.2716909 -0.6682368 -0.6798203
-0.2314473 -0.2482905 -0.5736386 -0.6154248 0.1149203 0.5620216 -0.5511965 -0.1679138 0.9503481 2.9763599 -0.6798203
-0.6657682 -0.2699058 1.7302165 0.7577277 -0.8277458 -0.5701472 2.0652190 -0.5965614 -0.7583279 0.1814002 0.4376131
-0.2857374 -0.2590982 -0.5801836 -0.6154248 0.6933745 1.2824926 -0.5547322 -0.4618436 0.0406586 1.7960950 2.1594048
-0.3400275 -0.2374829 -0.5801836 -0.6076887 1.2718288 1.1795682 -0.5582679 -0.2781375 -0.3540214 1.5154456 -0.6829680
0.6371945 -0.1672335 -0.5670935 -0.5999526 -1.2740839 -1.0268744 -0.5405894 -0.4128553 1.9563010 -0.6643923 -0.6735249
-0.2857374 -0.2320791 -0.5769111 -0.6038207 1.5610559 -1.0300908 -0.5582679 -0.4740906 -0.3829005 -0.6720813 -0.6798203
-0.6114781 -0.2645020 1.8054845 -0.6154248 -0.3921198 0.8289818 2.0864332 -0.6333026 -0.8160859 0.2390679 0.8908819
-0.6114781 -0.2536944 1.6778562 3.0437366 -0.2849986 0.0602650 1.7858990 -0.6577967 -0.7294488 0.0237753 0.4250223
-0.4486078 -0.2536944 2.5090767 -0.6115567 1.0825814 1.3693351 -0.5618036 -0.5353260 -0.7005698 0.2698240 1.9107366
-0.6114781 -0.2536944 1.9396579 -0.6115567 -0.1385997 0.5620216 2.3975745 -0.6333026 -0.7342620 0.3313362 1.8698165
-0.7200583 -0.2699058 0.8891785 0.6919711 -0.9562912 -0.4350589 0.9974386 -0.6333026 -0.8786572 -0.3068527 0.3589206
-0.7200583 -0.2699058 0.7713678 1.0323582 -0.7634731 -0.2678067 0.9479389 -0.6333026 -0.9412284 -0.3645204 0.0315598
-0.6114781 -0.2645020 2.5647095 1.9374785 -0.4206854 0.0377502 2.7157872 -0.6455496 -0.8064596 -0.0646485 1.7974194
-0.7200583 5.0852635 0.3033972 0.4328128 -0.9562912 -0.6312586 0.5802264 -0.6455496 -0.9219757 -0.4183435 0.0410029
-0.6657682 -0.2699058 1.0528046 1.2837805 -0.5777965 -0.5508489 1.2838300 -0.6210555 -0.9027230 -0.3030082 0.5855550
-0.7743484 3.0372220 0.0743207 0.6030063 -1.0134225 -0.7952944 0.2160497 -0.6577967 -0.9797338 -0.5990356 -0.2328469
data_cov = cov(scale(data))
kable(data_cov, caption = "Data Tenaga Kesehatan Menurut Provinsi", align = "l")
Data Tenaga Kesehatan Menurut Provinsi
Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
Perawat 1.0000000 -0.1300632 -0.3449156 -0.3614376 -0.2157498 -0.3537037 -0.3379673 0.8456187 -0.0367492 -0.2995013 -0.3853765
Bidan -0.1300632 1.0000000 0.0309971 0.0953984 -0.2378612 -0.1811718 0.0840626 -0.1227109 -0.2121202 -0.1305131 -0.0368505
Kefarmasian -0.3449156 0.0309971 1.0000000 0.4028614 -0.1868143 0.0898443 0.8636873 -0.3462255 -0.4730986 0.0025985 0.5818651
Tenaga.Kesehatan.Masyarakat -0.3614376 0.0953984 0.4028614 1.0000000 -0.2883224 -0.0181896 0.4777468 -0.2439764 -0.3005442 0.1450279 0.2867113
Tenaga.Kesehatan.Lingkungan -0.2157498 -0.2378612 -0.1868143 -0.2883224 1.0000000 0.3849522 -0.3065639 -0.0577553 0.2772048 0.0749156 -0.1007136
Tenaga.Gizi -0.3537037 -0.1811718 0.0898443 -0.0181896 0.3849522 1.0000000 -0.0304783 -0.2415989 0.2123368 0.3724006 0.2366158
Tenaga.Medis -0.3379673 0.0840626 0.8636873 0.4777468 -0.3065639 -0.0304783 1.0000000 -0.3282850 -0.4585780 -0.0247873 0.4618531
Tenaga.Kesehatan.Psikologi.Klinis 0.8456187 -0.1227109 -0.3462255 -0.2439764 -0.0577553 -0.2415989 -0.3282850 1.0000000 -0.0228300 -0.2705053 -0.3723339
Tenaga.Keterapian.Fisik -0.0367492 -0.2121202 -0.4730986 -0.3005442 0.2772048 0.2123368 -0.4585780 -0.0228300 1.0000000 -0.1374370 -0.4268518
Tenaga.Keteknisan.Medis -0.2995013 -0.1305131 0.0025985 0.1450279 0.0749156 0.3724006 -0.0247873 -0.2705053 -0.1374370 1.0000000 0.3467604
Tenaga.Teknik.Biomedika -0.3853765 -0.0368505 0.5818651 0.2867113 -0.1007136 0.2366158 0.4618531 -0.3723339 -0.4268518 0.3467604 1.0000000
data_eigen = eigen(data_cov)
data_eigen$values
##  [1] 3.5858033 2.2627688 1.2438903 1.0116230 0.8145284 0.6175847 0.5849378
##  [8] 0.3938078 0.2667156 0.1227123 0.0956282
data_eigen$vectors
##              [,1]       [,2]        [,3]        [,4]        [,5]         [,6]
##  [1,]  0.35316688 -0.3612052 -0.37170019 -0.02960520  0.04744833 -0.033081603
##  [2,] -0.07614987 -0.2058978  0.59746353 -0.37412269  0.49463516 -0.266481531
##  [3,] -0.43566054 -0.1449990 -0.14309811  0.36964507  0.14394537 -0.009257167
##  [4,] -0.32646380 -0.1249120  0.08219773 -0.11386657 -0.58914162 -0.607253511
##  [5,]  0.11203632  0.4525012 -0.07518883  0.27639382  0.39625514 -0.369691809
##  [6,] -0.10360297  0.4821338 -0.20892539  0.02373193  0.12526164 -0.399326278
##  [7,] -0.42565434 -0.2158043 -0.04211642  0.33519365 -0.01296780 -0.027074844
##  [8,]  0.34076788 -0.3034006 -0.39974528 -0.01058452  0.05408908 -0.397073075
##  [9,]  0.26825616  0.3411363  0.27692683  0.27382036 -0.38464734  0.137141600
## [10,] -0.16577563  0.3086182 -0.30681966 -0.65894877 -0.13047526  0.088371509
## [11,] -0.39123220  0.0552830 -0.30974625 -0.10458506  0.21094270  0.279105273
##              [,7]        [,8]        [,9]       [,10]       [,11]
##  [1,]  0.18305996 -0.03131303 -0.07703804  0.50713115 -0.55209817
##  [2,]  0.24184093  0.01669182 -0.26894605  0.06985004 -0.05677866
##  [3,]  0.11931871 -0.19833814 -0.18967397  0.54037607  0.47926734
##  [4,] -0.17119212  0.26995448 -0.02405127  0.16966997 -0.10345584
##  [5,] -0.54339543  0.01722436 -0.25725204  0.09540011 -0.18999584
##  [6,]  0.63147156 -0.03148217  0.36323223 -0.02623134 -0.07124098
##  [7,]  0.09608818 -0.39195096 -0.23297636 -0.47147488 -0.46668195
##  [8,]  0.11722364  0.07699307 -0.32927735 -0.41046542  0.41803065
##  [9,]  0.36854124  0.10636698 -0.58279057  0.07568167 -0.02698249
## [10,] -0.06741602 -0.43163658 -0.35873611  0.06194977  0.02652718
## [11,]  0.08415172  0.72667880 -0.23669436 -0.08378310 -0.12812647
boxplot(data, las = 2, col = "lightblue", main = "Boxplot Jumlah Tenaga Kesehatan per Provinsi 2025")

# Uji Kelayakan Analisis Faktor 1.)Matriks Korelasi Berdasarkan matriks korelasi antar variabel tenaga kesehatan, terdapat 8 dari 55 korelasi (14,5%) yang signifikan pada tingkat 0,01.

mat_corr = round(cor(data),3)
library(knitr)
kable(mat_corr, caption = "Matriks Korelasi Variabel Tenaga Kesehatan")
Matriks Korelasi Variabel Tenaga Kesehatan
Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
Perawat 1.000 -0.130 -0.345 -0.361 -0.216 -0.354 -0.338 0.846 -0.037 -0.300 -0.385
Bidan -0.130 1.000 0.031 0.095 -0.238 -0.181 0.084 -0.123 -0.212 -0.131 -0.037
Kefarmasian -0.345 0.031 1.000 0.403 -0.187 0.090 0.864 -0.346 -0.473 0.003 0.582
Tenaga.Kesehatan.Masyarakat -0.361 0.095 0.403 1.000 -0.288 -0.018 0.478 -0.244 -0.301 0.145 0.287
Tenaga.Kesehatan.Lingkungan -0.216 -0.238 -0.187 -0.288 1.000 0.385 -0.307 -0.058 0.277 0.075 -0.101
Tenaga.Gizi -0.354 -0.181 0.090 -0.018 0.385 1.000 -0.030 -0.242 0.212 0.372 0.237
Tenaga.Medis -0.338 0.084 0.864 0.478 -0.307 -0.030 1.000 -0.328 -0.459 -0.025 0.462
Tenaga.Kesehatan.Psikologi.Klinis 0.846 -0.123 -0.346 -0.244 -0.058 -0.242 -0.328 1.000 -0.023 -0.271 -0.372
Tenaga.Keterapian.Fisik -0.037 -0.212 -0.473 -0.301 0.277 0.212 -0.459 -0.023 1.000 -0.137 -0.427
Tenaga.Keteknisan.Medis -0.300 -0.131 0.003 0.145 0.075 0.372 -0.025 -0.271 -0.137 1.000 0.347
Tenaga.Teknik.Biomedika -0.385 -0.037 0.582 0.287 -0.101 0.237 0.462 -0.372 -0.427 0.347 1.000
library(sjPlot)
tab_corr(data)
  Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
Perawat   -0.130 -0.345* -0.361* -0.216 -0.354* -0.338* 0.846*** -0.037 -0.300 -0.385*
Bidan -0.130   0.031 0.095 -0.238 -0.181 0.084 -0.123 -0.212 -0.131 -0.037
Kefarmasian -0.345* 0.031   0.403* -0.187 0.090 0.864*** -0.346* -0.473** 0.003 0.582***
Tenaga.Kesehatan.Masyarakat -0.361* 0.095 0.403*   -0.288 -0.018 0.478** -0.244 -0.301 0.145 0.287
Tenaga.Kesehatan.Lingkungan -0.216 -0.238 -0.187 -0.288   0.385* -0.307 -0.058 0.277 0.075 -0.101
Tenaga.Gizi -0.354* -0.181 0.090 -0.018 0.385*   -0.030 -0.242 0.212 0.372* 0.237
Tenaga.Medis -0.338* 0.084 0.864*** 0.478** -0.307 -0.030   -0.328* -0.459** -0.025 0.462**
Tenaga.Kesehatan.Psikologi.Klinis 0.846*** -0.123 -0.346* -0.244 -0.058 -0.242 -0.328*   -0.023 -0.271 -0.372*
Tenaga.Keterapian.Fisik -0.037 -0.212 -0.473** -0.301 0.277 0.212 -0.459** -0.023   -0.137 -0.427**
Tenaga.Keteknisan.Medis -0.300 -0.131 0.003 0.145 0.075 0.372* -0.025 -0.271 -0.137   0.347*
Tenaga.Teknik.Biomedika -0.385* -0.037 0.582*** 0.287 -0.101 0.237 0.462** -0.372* -0.427** 0.347*  
Computed correlation used pearson-method with listwise-deletion.

2.)Measures of Sampling Adequacy Ukuran kecukupan sample untuk mengukur tingkat interkorelasi di antara variabe dan kesesuaian analisis faktoreksploratori. Nilai MSA harus di atas 0.50 sebelum melanjutkan analisis faktor. Dari KMO pertama didapat MSA kecil pada variable ke-2 bidan 0.39 diikuti variabel ke-5 Tenaga Kesehatan Lingkungan 0.48. Setelah mereduksi bertahap variabel ke-2 dan menjalankan ulang didapat MSA normal dengan overal 0.66. Untuk menjalankan perlu melakukan Instalasi Packages: install.packages(“sjPlot”)

library(psych)
library(GPArotation)
## 
## Attaching package: 'GPArotation'
## The following objects are masked from 'package:psych':
## 
##     equamax, varimin
KMO(mat_corr)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = mat_corr)
## Overall MSA =  0.64
## MSA for each item = 
##                           Perawat                             Bidan 
##                              0.57                              0.39 
##                       Kefarmasian       Tenaga.Kesehatan.Masyarakat 
##                              0.68                              0.70 
##       Tenaga.Kesehatan.Lingkungan                       Tenaga.Gizi 
##                              0.48                              0.65 
##                      Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis 
##                              0.70                              0.62 
##           Tenaga.Keterapian.Fisik           Tenaga.Keteknisan.Medis 
##                              0.66                              0.58 
##           Tenaga.Teknik.Biomedika 
##                              0.79
data_reduksi = data[, -2]
mat_corr_red <- cor(data_reduksi)
KMO(mat_corr_red)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = mat_corr_red)
## Overall MSA =  0.66
## MSA for each item = 
##                           Perawat                       Kefarmasian 
##                              0.59                              0.67 
##       Tenaga.Kesehatan.Masyarakat       Tenaga.Kesehatan.Lingkungan 
##                              0.71                              0.52 
##                       Tenaga.Gizi                      Tenaga.Medis 
##                              0.62                              0.70 
## Tenaga.Kesehatan.Psikologi.Klinis           Tenaga.Keterapian.Fisik 
##                              0.61                              0.74 
##           Tenaga.Keteknisan.Medis           Tenaga.Teknik.Biomedika 
##                              0.61                              0.80

3.)Barlett Test Uji Barlett menggunakan function dari prof.Shigenobu Aoki yang dilakukan untuk mengetahui adanya korelasi antar variabel. Uji Bartlett yang signifikan secara statistik <0,5. Didapatkan p-value < 2.2e-16 yang berarti terdapat korelasi yang signifikan antar variabel.

uji_bartlett <- function(x)
{
  method <- "Bartlett's test of sphericity"
  data.name <- deparse(substitute(x))
  x <- subset(x, complete.cases(x))
  n <- nrow(x)
  p <- ncol(x)
  chisq <- (1-n+(2*p+5)/6) * log(det(cor(x)))
  df <- p*(p-1)/2
  p.value <- pchisq(chisq, df, lower.tail=FALSE)
  names(chisq) <- "khi-squared"
  names(df) <- "df"
  result <- list(
    statistic = chisq,
    parameter = df,
    p.value = p.value,
    method = method,
    data.name = data.name
  )
  
  class(result) <- "htest"
  return(result)
}

uji_bartlett(mat_corr_red)
## 
##  Bartlett's test of sphericity
## 
## data:  mat_corr_red
## khi-squared = 245.67, df = 45, p-value < 2.2e-16

4.)Partial Correlation Matrix korelasi parsial menunjukkan bahwa hanya dua pasangan variabel yang memiliki nilai lebih besar dari 0,50, yaitu antara Perawat dengan Tenaga Kesehatan Psikologi Klinis (0,786) serta antara Kefarmasian dengan Tenaga Medis (0,757). Sementara itu, sebagian besar nilai korelasi parsial lainnya berada di bawah 0,50. Secara kolektif, temuan ini menunjukkan bahwa struktur korelasi data masih memadai dan kumpulan variabel yang digunakan sesuai untuk dilakukan analisis faktor.

library(ppcor)
## Loading required package: MASS
parsial_corr <- pcor(data)
mat_parsial <- round(parsial_corr$estimate,3)
kable(mat_parsial, caption = "Matriks Korelasi Parsial Variabel Tenaga Kesehatan")
Matriks Korelasi Parsial Variabel Tenaga Kesehatan
Perawat Bidan Kefarmasian Tenaga.Kesehatan.Masyarakat Tenaga.Kesehatan.Lingkungan Tenaga.Gizi Tenaga.Medis Tenaga.Kesehatan.Psikologi.Klinis Tenaga.Keterapian.Fisik Tenaga.Keteknisan.Medis Tenaga.Teknik.Biomedika
Perawat 1.000 -0.248 0.075 -0.393 -0.440 -0.132 -0.167 0.786 -0.178 -0.085 -0.139
Bidan -0.248 1.000 -0.062 -0.086 -0.275 -0.013 -0.061 0.027 -0.312 -0.201 -0.141
Kefarmasian 0.075 -0.062 1.000 0.008 0.106 0.184 0.757 -0.117 -0.177 -0.219 0.335
Tenaga.Kesehatan.Masyarakat -0.393 -0.086 0.008 1.000 -0.311 -0.042 0.132 0.253 -0.131 0.078 -0.061
Tenaga.Kesehatan.Lingkungan -0.440 -0.275 0.106 -0.311 1.000 0.235 -0.246 0.259 -0.107 -0.097 -0.152
Tenaga.Gizi -0.132 -0.013 0.184 -0.042 0.235 1.000 -0.092 0.113 0.287 0.327 0.135
Tenaga.Medis -0.167 -0.061 0.757 0.132 -0.246 -0.092 1.000 0.049 -0.103 -0.052 -0.139
Tenaga.Kesehatan.Psikologi.Klinis 0.786 0.027 -0.117 0.253 0.259 0.113 0.049 1.000 -0.076 -0.093 -0.021
Tenaga.Keterapian.Fisik -0.178 -0.312 -0.177 -0.131 -0.107 0.287 -0.103 -0.076 1.000 -0.293 -0.289
Tenaga.Keteknisan.Medis -0.085 -0.201 -0.219 0.078 -0.097 0.327 -0.052 -0.093 -0.293 1.000 0.213
Tenaga.Teknik.Biomedika -0.139 -0.141 0.335 -0.061 -0.152 0.135 -0.139 -0.021 -0.289 0.213 1.000

Analisis Utama

1.)A priori criterion Berdasarkan kriteria Kaiser (eigenvalue > 1), diperoleh empat komponen utama yang dipertahankan. Komponen pertama memiliki eigenvalue sebesar 3,59 dan mampu menjelaskan 32,6% variansi, komponen kedua sebesar 2,26 (20,6%), komponen ketiga sebesar 1,24 (11,3%), dan komponen keempat sebesar 1,01 (9,2%). Secara kumulatif, keempat komponen tersebut mampu menjelaskan 73,7% total variansi data. Untuk menjalankan perlu melakukan Instalasi Packages: install.packages(“psych”, dependencies = TRUE)

pca = prcomp(data, scale. = TRUE)
eigenvalues = pca$sdev^2
prop_var = eigenvalues / sum(eigenvalues) * 100
cum_var = cumsum(prop_var)
tabel_eigen <- data.frame(
  Component = 1:length(eigenvalues),
  Total = round(eigenvalues, 2),
  `Percent of Variance` = round(prop_var, 1),
  `Cumulative Percent` = round(cum_var, 1)
)

kable(tabel_eigen, caption = "Eigenvalues dan Persentase Variansi PCA Tenaga Kesehatan")
Eigenvalues dan Persentase Variansi PCA Tenaga Kesehatan
Component Total Percent.of.Variance Cumulative.Percent
1 3.59 32.6 32.6
2 2.26 20.6 53.2
3 1.24 11.3 64.5
4 1.01 9.2 73.7
5 0.81 7.4 81.1
6 0.62 5.6 86.7
7 0.58 5.3 92.0
8 0.39 3.6 95.6
9 0.27 2.4 98.0
10 0.12 1.1 99.1
11 0.10 0.9 100.0

2.)Scree Test Uji Scree menunjukkan tiga komponen valid dengan mempertimbangkan perubahan nilai eigen(titik belok) untuk analisis lebih lanjut Untuk menjalankan perlu melakukan Instalasi Packages: install.packages(“ppcor”, dependencies = TRUE)

library(factoextra)
## Loading required package: ggplot2
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
## The following object is masked from 'package:sjPlot':
## 
##     set_theme
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
eig.val <-get_eigenvalue(pca)
eig.val
##        eigenvalue variance.percent cumulative.variance.percent
## Dim.1   3.5858033       32.5982116                    32.59821
## Dim.2   2.2627688       20.5706251                    53.16884
## Dim.3   1.2438903       11.3080934                    64.47693
## Dim.4   1.0116230        9.1965726                    73.67350
## Dim.5   0.8145284        7.4048039                    81.07831
## Dim.6   0.6175847        5.6144063                    86.69271
## Dim.7   0.5849378        5.3176160                    92.01033
## Dim.8   0.3938078        3.5800705                    95.59040
## Dim.9   0.2667156        2.4246871                    98.01509
## Dim.10  0.1227123        1.1155664                    99.13065
## Dim.11  0.0956282        0.8693473                   100.00000
plot(eig.val$eigenvalue,xlab = 'Eigenvalue number', ylab = 'Eigenvalue size', 
     main = 'Scree Plot Penelitian',   type = "b")
abline(h = 1, col = 'red', lty = 7)

Menentukan PC

Nilai komunalitas yang sebelumnya diambil hanya 3PC tidak ada yang menyentuh 0.5, tetapi setelah diambil 4PC menjadi naik terutama Tenaga Keteknisan Medis (h² = 0,65) dan Bidan (h² = 0,55). Hal ini menunjukkan bahwa model empat faktor lebih mampu menjelaskan variasi masing-masing variabel dibandingkan model tiga faktor. Untuk menjalankan perlu melakukan Instalasi Packages: install.packages(“factoextra”)

scores_reduced <- pca$x[, 1:4]
loadings_4 <- pca$rotation[, 1:4]
h2_4 <- rowSums(loadings_4^2)
tabel_pca_4 <- cbind(round(loadings_4, 2), h2 = round(h2_4, 2))
kable(tabel_pca_4, caption = "Matriks Loading PCA (PC1–PC4) dan Komunalitas (h²)")
Matriks Loading PCA (PC1–PC4) dan Komunalitas (h²)
PC1 PC2 PC3 PC4 h2
Perawat -0.35 0.36 -0.37 -0.03 0.39
Bidan 0.08 0.21 0.60 -0.37 0.55
Kefarmasian 0.44 0.14 -0.14 0.37 0.37
Tenaga.Kesehatan.Masyarakat 0.33 0.12 0.08 -0.11 0.14
Tenaga.Kesehatan.Lingkungan -0.11 -0.45 -0.08 0.28 0.30
Tenaga.Gizi 0.10 -0.48 -0.21 0.02 0.29
Tenaga.Medis 0.43 0.22 -0.04 0.34 0.34
Tenaga.Kesehatan.Psikologi.Klinis -0.34 0.30 -0.40 -0.01 0.37
Tenaga.Keterapian.Fisik -0.27 -0.34 0.28 0.27 0.34
Tenaga.Keteknisan.Medis 0.17 -0.31 -0.31 -0.66 0.65
Tenaga.Teknik.Biomedika 0.39 -0.06 -0.31 -0.10 0.26

Faktor Analisis

variansi PC sebelum di rotasi

eigenvalues_4 <- pca$sdev[1:4]^2
ss_loadings    <- colSums(loadings_4^2)
prop_var       <- ss_loadings / ncol(data)
cum_var        <- cumsum(prop_var)
prop_explained <- ss_loadings / sum(eigenvalues_4)
cum_proportion <- cumsum(prop_explained)

summary_tabel <- rbind(
  "SS loadings"        = round(ss_loadings,    2),
  "Proportion Var"     = round(prop_var,        2),
  "Cumulative Var"     = round(cum_var,          2),
  "Proportion Explained" = round(prop_explained, 2),
  "Cumulative Proportion" = round(cum_proportion, 2)
)
colnames(summary_tabel) <- paste0("PC", 1:4)

kable(summary_tabel, caption = "Ringkasan Varians PCA (Tanpa Rotasi, 4 PC)")
Ringkasan Varians PCA (Tanpa Rotasi, 4 PC)
PC1 PC2 PC3 PC4
SS loadings 1.00 1.00 1.00 1.00
Proportion Var 0.09 0.09 0.09 0.09
Cumulative Var 0.09 0.18 0.27 0.36
Proportion Explained 0.12 0.12 0.12 0.12
Cumulative Proportion 0.12 0.25 0.37 0.49

Penyederhanaan maksimum tercapai jika hanya terdapat angka 1 dan 0 dalam sebuah kolom. VARIMAX memaksimalkan jumlah varians dari muatan yang dibutuhkan matriks vaktor

library(psych)
fa_pca <- principal(data, nfactors = 4, rotate = "varimax", scores = TRUE)
loadings_varimax <- fa_pca$loadings
h2_varimax       <- fa_pca$communality
tabel_varimax <- cbind(round(unclass(loadings_varimax), 2), h2 = round(h2_varimax, 2))

kable(tabel_varimax, caption = "Matriks Loading PCA Dirotasi Varimax (RC1–RC4) dan Komunalitas (h²)")
Matriks Loading PCA Dirotasi Varimax (RC1–RC4) dan Komunalitas (h²)
RC1 RC3 RC2 RC4 h2
Perawat -0.22 -0.92 -0.07 -0.15 0.92
Bidan -0.09 0.30 -0.77 -0.06 0.70
Kefarmasian 0.92 0.20 0.05 -0.09 0.89
Tenaga.Kesehatan.Masyarakat 0.51 0.25 -0.30 0.15 0.44
Tenaga.Kesehatan.Lingkungan -0.32 0.25 0.65 -0.01 0.59
Tenaga.Gizi -0.03 0.37 0.58 0.38 0.62
Tenaga.Medis 0.89 0.20 -0.09 -0.15 0.87
Tenaga.Kesehatan.Psikologi.Klinis -0.22 -0.87 0.01 -0.12 0.82
Tenaga.Keterapian.Fisik -0.63 0.26 0.37 -0.31 0.69
Tenaga.Keteknisan.Medis 0.01 0.17 0.09 0.91 0.87
Tenaga.Teknik.Biomedika 0.66 0.19 0.10 0.45 0.69

Variasi PCA setelah di rotasi Varimax Menunjukkan intrepetasi yang lebih mudah dipahami, variansi yang tadinya mirip menjadi “dipusatkan” ke faktor yang memang dominan.

ss_rc       <- colSums(unclass(loadings_varimax)^2)
prop_rc     <- ss_rc / ncol(data)
cum_rc      <- cumsum(prop_rc)
prop_exp_rc <- ss_rc / sum(ss_rc)
cum_prop_rc <- cumsum(prop_exp_rc)

summary_varimax <- rbind(
  "SS loadings"           = round(ss_rc,       2),
  "Proportion Var"        = round(prop_rc,     2),
  "Cumulative Var"        = round(cum_rc,      2),
  "Proportion Explained"  = round(prop_exp_rc, 2),
  "Cumulative Proportion" = round(cum_prop_rc, 2)
)
colnames(summary_varimax) <- paste0("RC", 1:4)

kable(summary_varimax, caption = "Ringkasan Varians PCA Dirotasi Varimax (RC1–RC4)")
Ringkasan Varians PCA Dirotasi Varimax (RC1–RC4)
RC1 RC2 RC3 RC4
SS loadings 2.94 2.17 1.63 1.37
Proportion Var 0.27 0.20 0.15 0.12
Cumulative Var 0.27 0.46 0.61 0.74
Proportion Explained 0.36 0.27 0.20 0.17
Cumulative Proportion 0.36 0.63 0.83 1.00
loadings_4 <- pca$rotation[, 1:4]
h2_4 <- rowSums(loadings_4^2)
loadings_4 <- round(loadings_4, 2)
loadings_4[abs(loadings_4) < 0.40] <- NA
dominan <- apply(abs(pca$rotation[, 1:4]), 1, which.max)
loadings_sorted <- loadings_4[order(dominan), ]
h2_sorted <- round(h2_4[order(dominan)], 2)
tabel_pca_4 <- cbind(loadings_sorted, h2 = h2_sorted)

kable(tabel_pca_4, caption = "Simplified PCA Loading Matrix", na = " ")
Simplified PCA Loading Matrix
PC1 PC2 PC3 PC4 h2
Kefarmasian 0.44 NA NA NA 0.37
Tenaga.Kesehatan.Masyarakat NA NA NA NA 0.14
Tenaga.Medis 0.43 NA NA NA 0.34
Tenaga.Teknik.Biomedika NA NA NA NA 0.26
Tenaga.Kesehatan.Lingkungan NA -0.45 NA NA 0.30
Tenaga.Gizi NA -0.48 NA NA 0.29
Tenaga.Keterapian.Fisik NA NA NA NA 0.34
Perawat NA NA NA NA 0.39
Bidan NA NA 0.6 NA 0.55
Tenaga.Kesehatan.Psikologi.Klinis NA NA -0.4 NA 0.37
Tenaga.Keteknisan.Medis NA NA NA -0.66 0.65
fa_pca <- principal(data, nfactors = 4, rotate = "varimax", scores = TRUE)
load_mat <- as.matrix(fa_pca$loadings)
h2_varimax <- fa_pca$communality
load_asli <- load_mat
load_mat <- round(load_mat, 2)
load_mat[abs(load_mat) < 0.40] <- NA
dominan <- apply(abs(load_asli), 1, which.max)
load_sorted <- load_mat[order(dominan), ]
h2_sorted <- round(h2_varimax[order(dominan)], 2)
tabel_varimax <- cbind(load_sorted, h2 = h2_sorted)

kable(tabel_varimax, caption = "Simplified Rotated Factor-Loading Matrix ", na = "")
Simplified Rotated Factor-Loading Matrix
RC1 RC3 RC2 RC4 h2
Kefarmasian 0.92 NA NA NA 0.89
Tenaga.Kesehatan.Masyarakat 0.51 NA NA NA 0.44
Tenaga.Medis 0.89 NA NA NA 0.87
Tenaga.Keterapian.Fisik -0.63 NA NA NA 0.69
Tenaga.Teknik.Biomedika 0.66 NA NA 0.45 0.69
Perawat NA -0.92 NA NA 0.92
Tenaga.Kesehatan.Psikologi.Klinis NA -0.87 NA NA 0.82
Bidan NA NA -0.77 NA 0.70
Tenaga.Kesehatan.Lingkungan NA NA 0.65 NA 0.59
Tenaga.Gizi NA NA 0.58 NA 0.62
Tenaga.Keteknisan.Medis NA NA NA 0.91 0.87

Interpreting the Faktor

#Faktor Pelayanan dan Teknologi Medis (RC1) Kefarmasian, Tenaga Kesehatan Masyarakat, Tenaga Medis, Tenaga Keterapian Fisik, Tenaga Teknik Biomedika #Faktor Pelayanan Rawat dan Psikologis (RC2) Perawat dan Tenaga Kesehatan psikologika Klinik #Faktor Kesehatan Preventif dan Komunitas (RC3) Bidan, Tenaga Kesehatan Lingkungan dan Tenaga Gizi #Faktor Spesialis Teknis Medis (RC4) Tenaga Keteknisan Medis dan Tenaga Teknik Biomedika