2015-05-24 3 views
1

Я новичок в R. Я хочу показать связь между матрицей конвариантности Σ и собственными векторами и собственными значениями. Я знаю, что Σ может быть факторизован таким образом, что: ∃P, ∃D: Σ = P. D. P 'с P матрица собственного вектора и D - диагональная матрица, диагональными элементами которой являются соответствующие собственные значения. Но мой результат - это не то же самое, что ковариационная матрица. Мой Σ равен матрице корреляции. Вот мой код:quesstion о языке PCA R

> data<-scale(swiss,center=T,scale=F) 
> test<-princomp(data,cor=T) 
> D=test$sdev 
> Var=D^2 
> Var 
> Var=diag(Var) 
> Loa=test$loadings 
> Loa 
> Loa=Loa[1:6,1:6] 
> sigma= Loa %*% Var %*% t(Loa) 
> sigma 
        Fertility Agriculture Examination Education Catholic Infant.Mortality 
Fertility   1.0000000 0.35307918 -0.6458827 -0.66378886 0.4636847  0.41655603 
Agriculture  0.3530792 1.00000000 -0.6865422 -0.63952252 0.4010951  -0.06085861 
Examination  -0.6458827 -0.68654221 1.0000000 0.69841530 -0.5727418  -0.11402160 
Education  -0.6637889 -0.63952252 0.6984153 1.00000000 -0.1538589  -0.09932185 
Catholic   0.4636847 0.40109505 -0.5727418 -0.15385892 1.0000000  0.17549591 
Infant.Mortality 0.4165560 -0.06085861 -0.1140216 -0.09932185 0.1754959  1.00000000 

> cov(data) 
       Fertility Agriculture Examination Education Catholic Infant.Mortality 
Fertility  156.04250 100.169149 -64.366929 -79.729510 241.56320  15.156193 
Agriculture  100.16915 515.799417 -124.392831 -139.657401 379.90438  -4.025851 
Examination  -64.36693 -124.392831 63.646623 53.575856 -190.56061  -2.649537 
Education  -79.72951 -139.657401 53.575856 92.456059 -61.69883  -2.781684 
Catholic   241.56320 379.904376 -190.560611 -61.698830 1739.29454  21.318116 
Infant.Mortality 15.15619 -4.025851 -2.649537 -2.781684 21.31812   8.483802 
> 

Может кто-нибудь объяснить, где мой Probleme? Большое спасибо заранее.

ответ

1

Вы явно сказали princomp использовать кор отношения матрицы в этой строке:

test<-princomp(data,cor=T) 

Если опустить параметр и использовать только test <- printcomp(data), он будет использовать ковариационную матрицу и вы получите результаты (примерно) вы ожидаете.

+0

Вы правы. Большое спасибо @ Anton –

+0

Добро пожаловать. Если вы удовлетворены ответом, примите его, чтобы он закрыл вопрос. – Anton

Смежные вопросы