Temel Bileşen Analizi


Bugün sizlerle temel bileşen analizi üzerine bir yazımı paylaşacağım. Temel bileşen analizi genel olarak çok boyutlu bir veri setinde boyut düşürme tekniğidir. Yüz tanıma sistemleri, resim sıkıştırma gibi alanlarda kullanılmaktadır.

R programlamada temel veri analizi için “princomp” komutu kullanılmaktadır ve bu komut “psych” paketi içerisindedir. Genel kullanımı şu şekildedir.

> princomp(formula, data = NULL, subset, na.action, ...)

Argümanlara bir bakalım; “formula” argümanı yerine yanıt değişkeni içeren bir formüla girilmesi gerekmekte, “data” kısmında bir veri seti olması gerekli ki bu veri seti bir data frame olmalıdır, “subset” veri seti içerisinde gözlemlenmek istenen değişkenleri barındırmaktadır. Görüldüğü gibi kullanımı gayet basit bir komut. Şimdi örnekle inceleyelim.

ÖRNEK – I

Peki bu analizi R programında nasıl yapacağız bir bakalım. Kodlara geçmeden önce bir veri seti bulmamız gerekli. Aşağıdaki  tablo muhtemelen işimizi görecektir. Bu tabloyu bir text dosyasına kopyalayın ve dosyayı dilediğiniz isimle kaydedin.

Veri Seti

 

x1

x2

x3

x4

x5

x6

x7

x8

x9

 

 

belcika

3,3

0,9

27,6

0,9

8,2

19,1

6,2

26,6

7,2

 

danimark

9,2

0,1

21,8

0,6

8,3

14,6

6,5

32,2

7,1

 

fransa

10,8

0,8

27,5

0,9

8,9

16,8

6

22,6

5,7

 

B.almanya

6,7

1,3

35,8

0,9

7,3

14,4

5

22,3

6,1

 

irlanda

23,2

1

20,7

1,3

7,5

16,8

2,8

20,8

6,1

 

italya

15,9

0,6

27,6

0,5

10

18,1

1,6

20,1

5,7

 

lüksemburg

7,7

3,1

30,8

0,8

9,2

18,5

4,6

19,2

6,2

 

hollanda

6,3

0,1

22,5

1

9,9

18

6,8

28,5

6,8

 

ingiltere

2,7

1,4

30,2

1,4

6,9

16,9

5,7

28,3

6,4

 

avusturya

12,7

1,1

30,2

1,4

9

16,8

4,9

16,8

7

 

finlandiya

13

0,4

25,9

1,3

7,4

14,7

5,5

24,3

7,6

 

yunanistan

41,4

0,6

17,6

0,6

8,1

11,5

2,4

11

6,7

 

norvec

9

0,5

22,4

0,8

8,6

16,9

4,7

27,6

9,4

 

portekiz

27,8

0,3

24,5

0,6

8,4

13,3

2,7

16,7

5,7

 

ispanya

22,9

0,8

28,5

0,7

11,5

9,7

8,5

11,8

5,5

 

isvec

6,1

0,4

25,9

0,8

7,2

14,4

6

32,4

6,8

 

isvicre

7,7

0,2

37,8

0,8

9,5

17,5

5,3

15,4

5,7

 

turkiye

66,8

0,7

7,9

0,1

2,8

5,2

1,1

11,9

3,2

 

bulgaristan

23,6

1,9

32,3

0,6

7,9

8

0,7

18,2

6,7

 

cekoslavakya

16,5

2,9

35,5

1,2

8,7

9,2

0,9

17,9

7

 

D.almanya

4,2

2,9

41,2

1,3

7,6

11,2

1,2

22,1

8,4

 

macaristan

21,7

3,1

29,6

1,9

8,2

9,4

0,9

17,2

8

 

polonya

31,1

2,5

25,7

0,9

8,4

7,5

0,9

16,1

6,9

 

romanya

34,7

2,1

30,1

0,6

8,7

5,9

1,3

11,7

5

 

S.birligi

23,7

1,4

25,8

0,6

9,2

6,1

0,5

23,6

9,3

 

yugoslavya

48,7

1,5

16,8

1,1

4,9

6,4

11,3

5,3

4

                                         

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bu veri dosyasını r programlamada aşağıdaki komutla okutabiliriz.

> veri = read.table (“D:/dosyaadi.txt”,header=T)

Veriyi okuttuktan sonra işimize yarayacak olan kısmı tek bir data framede toplamak mantıklı olacak. Data frameler R programı için vazgeçilmez veri tipidir. Bunun için şu komutu uygularız.

> dt = data.frame(veri[1:9])

Veriye ait 1. ve 9. Sütun arasındaki veriyi dt isimli bir değikene attık. Şimdide elimizdeki veriyi standardize edelim ve oluşturulan veriyi tek bir frame içerisinde toplayalım.

> df = data.frame(scale(dt))

Şimdi yavaştan korelasyon testlerine başlayabiliriz. Fakat öncelikle teste ait paketi indirmemiz gerekli.

> install.packages("psych")

İndirme işleminin ardından Barlett korelasyon testini uygulayabiliriz.

> cortest.bartlett(df)

R was not square, finding R from data

$chisq

[1] 274.0533

$p.value

[1] 2.097573e-38

$df

[1] 36

Yukarıda Ki-Kare ve p değerlerini görebiliyoruz. Konuyu çok fazla uzatmamak için yorumlama yapmıyorum ve hemen temel bileşen analizine geçiyorum. Komutlar aşağıdaki gibidir.

> fit=princomp(df,cor=T)

Call:

princomp(x = df, cor = T)

 

Standard deviations:

     Comp.1      Comp.2      Comp.3      Comp.4      Comp.5      Comp.6      Comp.7      Comp.8

1.867391569 1.459511268 1.048311791 0.997237674 0.737033056 0.619215363 0.475135828 0.369851221

     Comp.9

0.006754636

 

 9  variables and  26 observations.

 

Oluşturduğumuz son değişken “fit”e ait bir özet görmek istersek;

> summary(fit)

Komutunu kullanabiliriz.

Bize döndüreceği sonuç yukarıdaki gibidir. Component matrisi görebilmek için;

> principal(df,nFactor=3)

Principal Components Analysis

Call: principal(r = df, nFactor = 3)

Standardized loadings (pattern matrix) based upon correlation matrix

     PC1      h2    u2 com

x1 -0.98 9.6e-01 0.043   1

x2  0.00 6.1e-06 1.000   1

x3  0.65 4.2e-01 0.579   1

x4  0.48 2.3e-01 0.772   1

x5  0.61 3.7e-01 0.631   1

x6  0.71 5.0e-01 0.499   1

x7  0.14 1.9e-02 0.981   1

x8  0.72 5.2e-01 0.477   1

x9  0.69 4.7e-01 0.531   1

 

                PC1

SS loadings    3.49

Proportion Var 0.39

 

Mean item complexity =  1

Test of the hypothesis that 1 component is sufficient.

 

The root mean square of the residuals (RMSR) is  0.21

 with the empirical chi square  83.06  with prob <  1.3e-07

 

Fit based upon off diagonal values = 0.69

 

Bu işlemleri istediğimiz grafiğe dökebiliriz.

> plot(fit,type="line")

 

Konu ile ilgili soru ve önerileriniz için facebook sayfamdan irtibata geçebiliriz.

KAYNAK

https://stat.ethz.ch/R-manual/R-devel/library/stats/html/princomp.html

http://www.statmethods.net/advstats/factor.html

http://www.zafercomert.com/IcerikDetay.aspx?zcms=78

 

Yazar Kimdir?

Sıtkı Cansu, 19 Ekim 1985 yilinda Konya-Beyşehir'de dogmustur.İlk, orta ve liseyi Beyşehir'de bitirmis olup Konya-Ereğli Selçuk MYO Bilgisayar programcılığı ve Mugla Sıtkı Koçman Üniversitesi İstatistik bölümünden mezun olmustur. Çesitli yerlerde web tasarımcı ve veri tabani yöneticisi olarak çalışan yazar, son üç senedir ingilizce öğretmenliği yapmaktadir. Şu anda yüksek lisansını tamamlamak üzere Mugla Üniversitesinde öğrenim görmektedir.