Büyük veri setleri birçok disiplinde giderek yaygınlaşmaktadır. Bu tür veri kümelerini yorumlamak için, verilerdeki bilgilerin çoğu korunacak şekilde boyutsallıklarını yorumlanabilir bir şekilde önemli ölçüde azaltmak için yöntemlere ihtiyaç vardır. Bu amaç için birçok teknik geliştirilmiştir, ancak temel bileşenler analizi (PCA) en eski ve en yaygın kullanılanlardan biridir. Fikri basittir – mümkün olduğunca çok ‘değişkenliği’ korunurken bir veri kümesinin boyutu azaltılır.
PCA, veri kümelerinin boyutunu azaltmak (indirgemek), yorumlanabilirliği arttırmak ve aynı zamanda bilgi kaybını en aza indirmek için kullanılan bir tekniktir. Bunu, varyansı (eigenvalue) yüksek korele olmayan yeni değişkenler oluşturarak yapar.
PCA, MANOVA ve disrimant fonksiyon analizine çok benzerdir. PCA’da genel olarak korelasyon matrisi ele alınmaktadır. Değişkenler arasındaki ilişki değerlendirildikten sonra özvektörler (eigenvectors)’e temel teşkil eden özdeğerler (eigenvalues) hesaplanır. Özdeğerler bir faktör tarafından açıklanan varyansın miktarını ve özvektörün önem derecesini gösterir. Özvektörler belirli bir faktör üzerinde belirli bir değişkenin yükünü gösteren elemanlardır. Geniş özdeğerleri olan değişkenler aynı zamanda yüksek varyansa sahip olan değişkenler anlamına geldiğinden varyansı yüksek faktörlerin boyut indirgeme (dimension reduction)’de kullanılması gerekir.
Temel bileşenlere ait elde edilen özvektör (varyans) grafiği bükülme noktası (point of inflexion)’nın solunda kalan bileşenler seçilmesi gereklidir. Diğer taraftan Kaiser (1960) özvektör (açıklanan varyans) değeri 1’in üzerinde olan bütün faktörlerin alınması gerekiğini savunmaktadır. Diğer bir ifadeyle, yüzde olarak bakıldığında % 10’un üzerinde özvektör (percentage of explained variance) değerine sahip faktörlerin alınması gerektiğini öne sürmektedir. Ancak Jolliffe (1972, 1986) Kaiser’in kriterinin çok katı olduğunu, bu yüzden özvektör (açıklanan varyans) değeri 0,7 üzerinde olan bütün faktörlerin alınmasının daha doğru bir yaklaşım olacağını düşünmektedir.
Temel bileşenler analizinde örneklem yeterliliğinin ölçümünde KMO (the Kaiser-Meyer-Olkin) kullanılmaktadır. Kaiser (1974)’göre KMO katsayısı
- 0-0,5 arası kabul edilemez
- 0,5 ise asgari
- 0,5-0,7 arası orta
- 0,7-0,8 arası iyi
- 0,8-0,9 arası çok iyi
- 0,9 ve üstü mükemmel
olarak değerlendirilmektedir.
Temel bileşenler analizinde küreselliğin, anti-image korelasyon ve kovaryans matrislerinin değerlendirilmesi Bartlett testi ile yapılmaktadır.
Bu çalışmada örnek uygulama üzerinden PCA’nın işleyişi anlatılacaktır.
Metodoloji ve Uygulama Sonuçları
Bu kısımda veri seti üzerinden R programlama dili kullanılarak adım adım temel bileşenler analizi (PCA) yapılacaktır. Analizde kullanılan veri seti basit ve anlaşılması kolay bir veri setidir. Bu veri seti R’da bulunan mtcars veri setinden oluşmaktadır. Bu veri seti, bir Amerikan otomobil dergisinden (1974 Motor Trend Magazine) alınan 32 otomobil modeline ait verilerden oluşmakta olup, Veri setindeki değişken sayısı 11, gözlem sayısı ise 32’dir.
- mpg: Yakıt tüketimi (ABD galonu başına mil): Daha güçlü ve daha ağır arabalar daha fazla yakıt tüketme eğilimindedir. Veri türü nicel ve süreklidir.
- cyl: Silindir sayısı: Daha güçlü otomobillerde genellikle daha fazla silindir bulunur. Veri türü nicel ve kesiklidir.
- disp: Motor hacmi: Motor silindirlerinin birleşik hacmini gösterir. Veri türü nicel ve kesiklidir.
- hp: Brüt beygir gücü: Otomobilin ürettiği gücün bir ölçüsüdür. Veri türü nicel ve kesiklidir.
- drat: Arka aks oranı: Tahrik milinin bir dönüşünün tekerleklerin dönüşüne nasıl karşılık geldiğini açıklar. Yüksek değerler yakıt verimliliğini düşürecektir. Veri türü nicel ve süreklidir.
- wt: Ağırlık (1000 lbs). Veri türü nicel ve süreklidir.
- qsec: 1/4 mil süresi: Araçların hızını ve ivmesini gösterir.
- vs: Motor bloğu: Bu, aracın motorunun “V” şeklinde mi yoksa düz mü olduğunu gösterir (0 = V şeklinde, 1 = düz). Veri türü nitel ve nominaldir.
- am: Şanzıman: Otomobilin şanzımanının otomatik (0) veya manuel (1) olduğunu gösterir (0 = otomatik, 1 = manuel). Veri türü nitel ve nominaldir.
- vites: İleri vites sayısı: spor otomobillerde daha fazla vites bulunur.Veri türü nicel ve kesiklidir.
- carb: Karbüratör sayısı: karbüratör benzinli motorlarda benzini hava karışımı yoluyla silindirlere göndererek yakıtın yanmasını sağlar. İçten yanmalı motorlarda kullanılan bir aygıttır. Daha güçlü motorlarla ilişkilidir. Veri türü nicel ve kesiklidir.
Yüklenecek R kütüphaneleri
kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","aod", "fpc", "DescTools","factoextra","dendextend", "viridis","ggpurr","psych","writexl","explore", "yardstick","MASS")
sapply(kütüphaneler, require, character.only = TRUE)
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler
veri<-mtcars
str(veri)
#veri setindeki ilk 6 değişkenin görselleştirilmesi
veri[,c(1:6)] %>%
explore_all()
#veri setindeki 7, 10 ve 11. değişkenlerin görselleştirilmesi
veri[,c(7,10,11)] %>%
explore_all()
#veri setindeki ilk 10 gözlem
formattable(head(as_tibble(veri) %>% add_column (model=rownames(veri), .before="mpg"),10))
#Pearson korelasyon matrisi
cor.plot(veri[,c(1:7,10,11)], main="Korelasyon Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki il 6 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 7, 10 ve 11. değişkenlerin grafiği aşağıda verilmiştir.Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra mtcars veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra mtcars veri setindeki nicel sürekli ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir.

Anti-image korelasyon matrisinin oluşturulması
Anti-image korelasyon matrisinin oluşturulan R kod bloğu aşağıda verilmiştir. Bu korelasyon matrisinde elde edilen diyagonal (çapraz) elemanların her birinin değeri en az 0,5 ve ondan büyük olması gerekir. Aksi takdirde 0,5’in altında olan değişkenlerin çıkarılarak KMO testi yapılması gereklidir.
kor <- cor(veri[,c(1:7,10,11)])#korelasyon katsayıları
ikor <- ginv(kor)#inverse korelasyon matrisi
dkm <- diag(diag((ikor^-1)))#diyagonal korelasyon matrisi
aik <- dkm%*%ikor%*%dkm# anti-image kovaryans matriksi
IS <- kor+aik-2*dkm # image kovaryans matriksi
Dai <- sqrt(diag(diag(aik)))
ikm<- ginv(Dai)%*%IS%*%ginv(Dai)# image korelasyon matrisi
aikor <- ginv(Dai)%*%aik%*%ginv(Dai)# anti-image korelasyon matrisi
colnames(aikor)<-names(veri[,c(1:7,10,11)])#değişken adlarını sütun başlıkları olarak alma
rownames(aikor)<-names(veri[,c(1:7,10,11)])#değişken adlarını satır başlıkları olarak alma
aikor
#sonuç
karar<-ifelse(diag(aikor)>0.49,"Olumlu", "Sistemden çıkarılması gerekir") %>% as_tibble() %>% rename(Karar=value)%>% add_column("Değişken"=names(veri[,c(1:7,10,11)]), .before="Karar")
formattable(karar)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen anti-image korelasyon matrisi aşağıda verilmiştir.
mpg cyl disp hp drat wt
mpg 1.00000000 0.08990633 -0.15162998 0.20531934 -0.14221041 0.4020566
cyl 0.08990633 1.00000000 -0.33355584 -0.08920034 0.32737768 0.1056715
disp -0.15162998 -0.33355584 1.00000000 -0.53403056 -0.08992011 -0.7736905
hp 0.20531934 -0.08920034 -0.53403056 1.00000000 0.05271878 0.3288915
drat -0.14221041 0.32737768 -0.08992011 0.05271878 1.00000000 0.1118390
wt 0.40205657 0.10567149 -0.77369054 0.32889151 0.11183904 1.0000000
qsec -0.17881370 0.37891422 0.39104087 -0.03038108 0.11786361 -0.6040859
gear -0.18035484 0.46087753 -0.04706130 -0.14058318 -0.10318424 0.1275266
carb 0.06507771 -0.28162379 0.65281874 -0.49866931 -0.20722976 -0.6269640
qsec gear carb
mpg -0.17881370 -0.1803548 0.06507771
cyl 0.37891422 0.4608775 -0.28162379
disp 0.39104087 -0.0470613 0.65281874
hp -0.03038108 -0.1405832 -0.49866931
drat 0.11786361 -0.1031842 -0.20722976
wt -0.60408591 0.1275266 -0.62696403
qsec 1.00000000 0.2419748 0.31793748
gear 0.24197479 1.0000000 -0.43453521
carb 0.31793748 -0.4345352 1.00000000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen anti-image korelasyon matrisindeki çapraz (diyagonal) elemanlara göre verilen kararlara ilişkin tablo aşağıda verilmiştir. Tabloda görüleceği üzere bütün kararlar çapraz eleman değerleri 0,5’in üzerinde olduğundan olumlu karar verilmiştir. Bu aşamadan sonra KMO ve Bartlett testine geçilir.

Örneklem yeterliliğinin ve küreselliğin test edilmesi
Temel bileşenler analizinde örneklem yeterliliğinin ölçümünde kullanılan KMO (the Kaiser-Meyer-Olkin) ve küreselliğin değerlendirilmesinde kullanılan Bartlett testinin yapılmasına yönelik yazılan R kod bloğu aşağıdadır.
#KMO (the Kaiser-Meyer-Olkin) örneklem yeterliliği testi
verimatris<-Cov(veri[,c(1:7,10,11)])
KMO(verimatris)
# Bartlett'in Testi
bt<-cortest.bartlett(veri[,c(1:7,10,11)])
formattable(tibble("Ki-Kare"=bt$chisq, "Serbestlik Derecesi"=bt$df, "p değeri"= format(round(bt$p.value, 5), nsmall=5), Sonuç=ifelse(bt$p.value<0.05, "Anlamlı", "Anlamsız")))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen KMO sonuçları aşağıda verilmiştir. Örneklem minimum KMO katsayısı olan 0,5’i karşılamaktadır. Düşük çıkmasının sebebi veri setimizin 32 gözlemden oluşmasından kaynaklanmaktadır.
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = verimatris)
Overall MSA = 0.5
MSA for each item =
mpg cyl disp hp drat wt qsec gear carb
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Bartlett’in küresellik (sphericity) test sonuçları aşağıdaki tabloda verilmiştir. Elde edilen sonuçlar istatistiksel olarak anlamlı olmalıdır. Ortaya konulan aşağıdaki sonuçlar da Bartlett test sonucunun istatistiksel olarak anlamlı olduğunu göstermektedir (p<0.05). Bu test sonucu anlamlıysa temel bileşen analizi (PCA) yapmak uygundur.

PCA modelinin kurulması
Temel bileşenler analizi (PCA) modeli kurulurken nitel kategorik değişkenler dışarıda bırakılmıştır. Bunun nedeni modelin nicel veri türlerinde daha iyi sonuç vermesinden kaynaklanmaktadır. Kurulan modele ilişkin R kod bloğu aşağıda verilmiştir. Veriyi normalize ederek modele dahil edilmesi burada önemli bir husustur.
veripca <- prcomp(veri[,c(1:7,10,11)], center = TRUE, scale. = TRUE)
summary(veripca)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen modele ilişkin sonuçlar aşağıda verilmiştir. Elde edilen bulgular temel PC1 (“mpg” değişkenine ait) ve PC2 (“cyl” değişkenine ait)’nin varyansları (0.6284100+0.2313100) toplamının PCA modelindeki toplam varyansın % 86’sını açıkladığını göstermektedir. Modelde PC1’den PC9’a kadar sunulan değerler kurulan modelde belirlenen değişken sayısa bağlı olarak değişmektedir. Diğer bir ifadeyle kurulan modelde biz 9 değişken belirlediğimiz için 9 ayrı temel bileşen (PCA) değeri hesaplamış olduk.
Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6 PC7
Standard deviation 2.3782 1.4429 0.71008 0.51481 0.42797 0.35184 0.32413
Proportion of Variance 0.6284 0.2313 0.05602 0.02945 0.02035 0.01375 0.01167
Cumulative Proportion 0.6284 0.8598 0.91581 0.94525 0.96560 0.97936 0.99103
PC8 PC9
Standard deviation 0.2419 0.14896
Proportion of Variance 0.0065 0.00247
Cumulative Proportion 0.9975 1.00000
Şimdi de aşağı yazılan R kod bloğu ile kurulan modeldeki değişkenlerin standart sapmalarına, varyanslarına ve toplam varyans içindeki oranlarına ayrı ayrı bakalım.
#standart sapma
sd<-mtcars.pca$sdev
#varyanslar: özvektör değerine eşittir.
var<-veripca$sdev^2
#varyansın toplam varyans içindeki yüzdesi (Proportion of Variance)
varoranı<-varoranı<-round(var/sum(var)*100,2)
##bütünleşik gösterim
etkiket<-paste(rep("PC",9),1:9)
tablo<-tibble(PC=etkiket, Varyans=var, SSapma=sd, "Varyans Oranı(%)"=varoranı)
formattable(tablo,
align =rep("r",4),
list(formatter(
"span", style = ~ style(color = "grey",font.weight = "bold")),
`Varyans` = color_bar("#98FB98"),
`SSapma` = color_bar("#7FFFD4"),
`Varyans Oranı (%)` = color_bar("#FF6347")
))
Yukarıdaki R kod bloğu ile kurulan modeldeki değişkenlerin standart sapmaları, varyansları ve toplam varyans içindeki oranları aşağıdaki tabloda verilmiştir. Burada hesaplanan varyans özvektör değerlerine eşittir. Tablodaki bulgulardan şöyle bir yorum yapabiliriz: eğer standart sapma yüksekse varyans da yüksektir. Çünkü varyans standart sapmanın karesine eşit olup, sapma artıkça varyans da artmaktadır. Bu da bize değişkenler arasında ilişkinin düşük olduğunu göstermektedir. Toplam içindeki varyans oranları da bu yorumu destekler niteliktedir. Varyans oranı en yüksek iki PCA (PC1 (“mpg” değişkenine ait) ve PC2 (“cyl” değişkenine ait)) kurulan modeldeki varyansın % 86’sını açıklamaktadır.

Yukarıdaki tabloya ilave olarak şimdi de aşağı yazılan R kod bloğu ile kurulan modeldeki değişkenlerin özvektör (eigenvector) değerlerine ya da açıklanan varyans oranlarını grafikte verelim.
eig.val$eigenvalue #özvektör (varyans) değerleri
eig.val$variance.percent ##özvektör (varyans) değerlerinin yüzdesi
#özvektör değerlerinin grafikle gösterimi
fviz_eig(veripca, addlabels = TRUE, main= "Öz Vektör Grafiği")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra temel bileşenlere ait elde edilen özvektör (varyans) grafiği aşağıda verilmiştir. Grafikte 3. bileşen (dimension 3) bükülme noktası (point of inflexion)’dır. Bu noktanın solunda kalan iki bileşen seçilmesi gereklidir. Kaiser (1960) özvektör (açıklanan varyans) değeri 1’in üzerinde olan bütün faktörlerin alınmasını savunmaktadır. Diğer bir ifadeyle, yüzde olarak bakıldığında % 10’un üzerinde özvektör (percentage of explained variance) değeri faktörlerin alınması gerektiğini öne sürmektedir. Bu açıdan grafiğe bakıldığında % 10’un üzerinde olan ilk iki faktör bulunmaktadır ve bu faktörler bükülme noktasının solunda kalmaktadır.

Değişkenlerin temel bileşenlere (PCs) katkısı
katki <- get_pca_var(veripca)
# Değişkenlerin temel bileşenlere katkısı
katki<-round(katki$contrib,3) %>% as_tibble() %>% add_column ("Değişken"=colnames(veri[,c(1:7,10,11)]), .before="Dim.1")
formattable(katki)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra değişkelerin temel bileşenlere sağladığı katkı düzeyleri aşağıdaki tabloda verilmiştir.

Değişkelerin temel bileşenlere sağladığı katkı düzeylerinin grafiği ise aşağıdaki R kod bloğunda verilmiştir.
pc1<-fviz_contrib(veripca, choice = "var", axes = 1)+ggtitle("PC1")
pc2<-fviz_contrib(veripca, choice = "var", axes = 2)+ggtitle("PC2")
pc3<-fviz_contrib(veripca, choice = "var", axes = 3)+ggtitle("PC3")
pc4<-fviz_contrib(veripca, choice = "var", axes = 4)+ggtitle("PC4")
pc5<-fviz_contrib(veripca, choice = "var", axes = 5)+ggtitle("PC5")
pc6<-fviz_contrib(veripca, choice = "var", axes = 6)+ggtitle("PC6")
pc7<-fviz_contrib(veripca, choice = "var", axes = 7)+ggtitle("PC7")
pc8<-fviz_contrib(veripca, choice = "var", axes = 8)+ggtitle("PC8")
pc9<-fviz_contrib(veripca, choice = "var", axes = 9)+ggtitle("PC9")
ggarrange(pc1, pc2, pc3, pc4, pc5)#İlk 5 değişken
ggarrange(pc6, pc7, pc8, pc9)#son dört değişken
İlk 5 değişkenin temel bileşenlere sağladığı katkı düzeyleri aşağıdaki grafiklerde verilmiştir.

Son 4 değişkenin temel bileşenlere sağladığı katkı düzeyleri aşağıdaki grafiklerde verilmiştir.

Gözlemlerin ve değişkenlerin biplotu
Gözlemlerle (araba modelleri) değişkenler arasındaki ilişkiyi gösteren biplot bileşen 1 ve 2 (PC1 ve PCA2)’ye göre aşağıdaki R kod bloğunda verilmiştir. Bunun nedeni açıklanan varyansın oranının bu bileşenlerde yüksek olmasıdır.
fviz_pca_biplot(veripca, repel = TRUE, axes = c(1, 2),
col.var = "#2E9FDF",
col.ind = "#696969"
)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra bileşen 1 ve 2 (PC1 ve PCA2)’ye göre elde edilen biplot aşağıda verilmiştir.

Sonuç
Bu çalışmada “mtcars” veri seti üzerinden örnek uygulama yapılarak boyut indirgeme yöntemlerinden biri olan PCA’nın işleyişi açıklanmıştır. Çalışmada elde bulgular, mpg ve cyl değişkenleri kurulan PCA modelindeki varyansın % 86’sını açıkladığını göstermektedir. Boyut indirgeme aşamasından sonra atılacak adım seçilecek analiz yöntemi ile bağımlı değişkenin tahmin edilmesidir. Ancak burada PCA’nın yanında boyut indirgemede kullanılan diğer yöntemler de vardır. Örneğin rastgele orman, karar ağaçları ve yapay sinir ağları bunlardan sadece bir kaçıdır. Bu yöntemlerle değişkenlerin önem düzeyleri bulunarak model oluşturulabilir ve bağımlı değişken tahmin edilebilir. Bahsedilen bu yöntemlere ilişkin yapmış olduğum örnek uygulamalar bulunmakta olup, linkleri aşağıda verilmiştir.
Prediction of Birth Rates in the USA Using LM, ANN, SVMs Methods
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Saygılarımla.
Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
Note: It can not be cited or copied without referencing.
Yararlanılan Kaynaklar
- https://www.r-project.org/
- Kaiser, H. F. (1960). The application of electronic computers to factor analysis. Educational and Psychological Measurement, 20, 141–151. https://doi.org/10.1177/001316446002000116
- Jolliffe I.T. (1986) Principal Components in Regression Analysis. In: Principal Component Analysis. Springer Series in Statistics. Springer, New York, NY
- Jolliffe, I.T. (1972), Discarding Variables in a Principal Component Analysis. I: Artificial Data. Journal of the Royal Statistical Society: Series C (Applied Statistics), 21: 160-173. doi:10.2307/2346488
- https://stat.ethz.ch/R-manual/R devel/library/datasets/html/mtcars.html
- Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391–411.
- https://cran.r-project.org/web/packages/explore/vignettes/explore_mtcars.html
- https://www.geo.fu-berlin.de/en/v/soga/Geodata-analysis/Principal-Component-Analysis/PCA-an-example/Principal-Component-Analysis/index.html
- https://rstudio-pubs-static.s3.amazonaws.com/363499_73a1c1a94da148b6ad81e6eb8dc1b771.html
- Field, Andy. (2009). Discovering Statistics Using SPSS, Third Edition.
- Kaiser, H.F. (1974) An index of factorial simplicity. Psychometrika, 39, 31-36. http://dx.doi.org/10.1007/BF02291575
- Abdi, H. and Williams, L.J. (2010), Principal component analysis. WIREs Comp Stat, 2: 433-459. doi:10.1002/wics.101