PCA分析和因子分析


#由此說明使用prcomp函數時,必須使用標准化過的原始數據。如果使用沒有標准化的raw數據(不是相關系數矩陣或者協方差矩陣),必須將參數scale. = T

<result>$sdev #表示標准差,意思是 <result>$sdev[1] = sqrt(var(<result>$x))

<result>$rotation #表示的是特征向量矩陣,也可以由eigen(<輸入的原數據>)$vector 得到

<result>$x #表示的是主成分結果矩陣,可以由<輸入的原數據>%*%<result>$rotation得到

==============================================================

p1 = princomp(scr,cor = T);p1 ###看來,必須把cor = T加上才可以得到正確的值,否則是使用cov計算的結果,並且計算過程中有新的參數加入
#cor = False :cv <- covmat$cov * (1 - 1/n.obs) 

#cor = True: cv <- covmat$cov * (1 - 1/n.obs),sds <- sqrt(diag(cv)),cv <- cv/(sds %o% sds)
#sdev = sqrt(eigen(cv, symmetric = TRUE)$value)
#下面的證明表明,使用cov和使用cor的結果還是十分的不一樣的

<result>$sdev  #主成分結果矩陣每一列的標准差

<result>$loading #特征向量矩陣

<result>$scores # 主成分結果矩陣

注意:在使用princomp函數時,必須使用標准化后的原始矩陣(不能是相關系數矩陣或者協方差矩陣);如果使用未被標准化的原始數據,必須加入參數:cor = T 。

=================================================================================================

library(psych)
p32 = principal(scr,nfactors = 5,rotate = "varimax");p32

p3 = principal(scrcor,nfactors = 5,rotate = "varimax");p3

這兩個運行的結果一樣,說明在principal函數中,可以使用原始數據或相關系數矩陣。這個可以使用相關系數矩陣或者協方差矩陣,是十分不同於之前的兩個主成分求值函數的。

p32$values #特征值,等同於結果矩陣的方差值

scr是經過標准化的數據集;r是原始矩陣,沒有經過標准化的數據。

cor(scr)
cov(scr)

cor(r)

cov(r)

 結果證明,經過標准化的原始矩陣的相關系數矩陣和協方差矩陣一樣;但是沒有經過標准化的數據集的協方差和相關系數矩陣是不一樣的。

ep3 = eigen(cor(scr))
loading = ep3$vectors %*% sqrt(diag(ep3$values))
sign.tot <- vector(mode = "numeric", length = 5);sign.tot
sign.tot <- sign(colSums(loading));sign.tot
sign.tot[sign.tot == 0] <- 1;sign.tot
loadings <- loading %*% diag(sign.tot);loadings
varimax(loadings)$loadings

最后的loadings值就是上面的過程得到的,當然此處參數是 nfactors = 5, rotate = "varimax" , r = scr.

 =====================================================================

以下內容來自於網址:https://site.douban.com/182577/widget/notes/11806604/note/262310174/

最常用的求解PCA的函數是stats包的
prcomp()和princomp( )。
前者采用觀測陣的奇異值分解方法,后者采用相關系數陣的特征值分解方法。
輸出結果上,包括特征值,載荷,主成分得分等,結果基本相似。
同時可以利用print( ),summary( )顯示輸出結果。
plot( )畫scree plot,biplot( )繪制biplot。

SciViews包的pcomp()綜合了上面兩個函數的方法。

psych包的相關函數
這個包是關於心理計量的包,其中有關於主成分的函數principal( )
這個函數是作為因子分析的主成分解法存在的,要和fa.parallel()結合使用。
還有一個心理學的包:psy包,也有相關的函數

====================================================

我想說的是,principal()函數得到結果中,$value 是特征值,$loading是由因子載荷矩陣,是因子分析的主成份解法中的概念,$scores是因子得分系數。

 

============

http://blog.csdn.net/lilanfeng1991/article/details/36190841#

還可以參考上文

原諒我,現在還是有點模糊,都花了好幾天了,算了,以后再慢慢弄明白


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM