R語言主成分和因子分析篇

轉載自 R語言主成分和因子分析篇
另可參考 R in action讀書筆記(19)第十四章 主成分和因子分析

主成分分析(PCA)是一種數據降維技巧,它能將大量相關變量轉化為一組很少的不相關變量,這些無關變量稱為主成分。
探索性因子分析(EFA)是一系列用來發現一組變量的潛在結構的方法,通過尋找一組更小 的、潛在的或隱藏的結構來解釋已觀測到的、變量間的關系。

1. R中的主成分和因子分析

R的基礎安裝包中提供了PCA和EFA的函數,分別為princomp()和factanal()
psych包中有用的因子分析函數

函數 描述
principal() 含多種可選的方差放置方法的主成分分析
fa() 可用主軸、最小殘差、加權最小平方或最大似然法估計的因子分析
fa.parallel() 含平等分析的碎石圖
factor.plot() 繪制因子分析或主成分分析的結果
fa.diagram() 繪制因子分析或主成分分析的載荷矩陣
scree() 因子分析和主成分分析的碎石圖

PCA/EFA 分析流程:
(1)數據預處理;PCA和EFA都是根據觀測變量間的相關性來推導結果。用戶可以輸入原始數據矩陣或相關系數矩陣列到principal()和fa()函數中,若輸出初始結果,相關系數矩陣將會被自動計算,在計算前請確保數據中沒有缺失值;
(2)選擇因子分析模型。判斷是PCA(數據降維)還是EFA(發現潛在結構)更符合你的分析目標。若選擇EFA方法時,還需要選擇一種估計因子模型的方法(如最大似然估計)。
(3)判斷要選擇的主成分/因子數目;
(4)選擇主成分/因子;
(5)旋轉主成分/因子;
(6)解釋結果;
(7)計算主成分或因子得分。

2.主成分分析

PCA的目標是用一組較少的不相關變量代替大量相關變量,同時盡可能保留初始變量的信息,這些推導所得的變量稱為主成分,它們是觀測變量的線性組合。如第一主成分為:

PC1=a1X1+a2X2+……+akXk 它是k個觀測變量的加權組合,對初始變量集的方差解釋性最大。

第二主成分是初始變量的線性組合,對方差的解釋性排第二, 同時與第一主成分正交(不相關)。后面每一個主成分都最大化它對方差的解釋程度,同時與之前所有的主成分都正交,但從實用的角度來看,都希望能用較少的主成分來近似全變量集。

(1)判斷主成分的個數

PCA中需要多少個主成分的準則:
根據先驗經驗和理論知識判斷主成分數;
根據要解釋變量方差的積累值的閾值來判斷需要的主成分數;
通過檢查變量間k*k的相關系數矩陣來判斷保留的主成分數。
最常見的是基于特征值的方法,每個主成分都與相關系數矩陣的特征值關聯,第一主成分與最大的特征值相關聯,第二主成分與第二大的特征值相關聯,依此類推。
Kaiser-Harris準則建議保留特征值大于1的主成分,特征值小于1的成分所解釋的方差比包含在單個變量中的方差更少。
Cattell碎石檢驗則繪制了特征值與主成分數的圖形,這類圖形可以展示圖形彎曲狀況,在圖形變化最大處之上的主成分都保留。
最后,還可以進行模擬,依據與初始矩陣相同大小的隨機數矩陣來判斷要提取的特征值。若基于真實數據的某個特征值大于一組隨機數據矩陣相應的平均特征值,那么該主成分可以保留。該方法稱作平行分析。

利用fa.parallel()函數,可同時對三種特征值判別準則進行評價。

library(psych)  
fa.parallel(USJudgeRatings[,-1], fa="PC", n.iter=100,
      show.legend=FALSE, main="Screen plot with parallel analysis") 
image

碎石頭、特征值大于1準則和100次模擬的平行分析(虛線)都表明保留一個主成分即可保留數據集的大部分信息,下一步是使用principal()函數挑選出相應的主成分。

(2)提取主成分

principal()函數可根據原始數據矩陣或相關系數矩陣做主成分分析,格式為:principal(r,nfactors=,rotate=,scores=)

其中:r是相關系數矩陣或原始數據矩陣;
nfactors設定主成分數(默認為1);
rotate指定旋轉的方式[默認最大方差旋轉(varimax)]
**scores&&設定是否需要計算主成分得分(默認不需要)。

# 美國法官評分的主成分分析  
library(psych)  
pc<-principal(USJudgeRatings[,-1],nfactors=1)  
pc  
image

此處,輸入的是沒有ONT變量的原始,并指定獲取一個未旋轉的主成分。由于PCA只對相關系數矩陣進行分析,在獲取主成分前,原始數據將會被自動轉換為相關系數矩陣。

PC1欄包含了成分載荷,指觀測變量與主成分的相關系數。如果提取不止一個主成分,則還將會有PC2、PC3等欄。成分載荷(component loadings)可用來解釋主成分的含義。此處可看到,第一主成分(PC1)與每個變量都高度相關,也就是說,它是一個可用來進行一般性評價的維度。
h2柆指成分公因子方差-----主成分對每個變量的方差解釋度。
u2欄指成分唯一性-------方差無法 被主成分解釋的比例(1-h2)。

SS loadings行包含了主成分相關聯的特征值,指的是與特定主成分相關聯的標準化后的方差值。
Proportin Var行表示的是每個主成分對整個數據集的解釋程度。
結果不止一個主成分的情況

library(psych)  
fa.parallel(Harman23.cor$cov,n.obs=302,fa="pc",n.iter=100,show.legend=FALSE,main="Scree plot with parallel analysis")  
image

載荷陣解釋了成分和因子的含義,第一成分與每個身體測量指標都正相關,看起來似乎是一個一般性的衡量因子;第二主成分與前四個變量負相關,與后四個變量正相關,因此它看起來似乎是一個長度容量因子。但理念上的東西都不容易構建,當提取了多個成分時,對它們進行旋轉可使結果更具有解釋性。

3)主成分旋轉

旋轉是一系列將成分載荷陣變得更容易解釋的數學方法,它們盡可能地對成分去噪。
旋轉方法有兩種:使選擇的成分保持不相關(正效旋轉),和讓它們變得相關(斜交旋轉)。
旋轉方法也會依據去噪定義的不同而不同。
最流行的下次旋轉是方差極大旋轉,它試圖對載荷陣的列進行去噪,使得每個成分只是由一組有限的變量來解釋(即載荷陣每列只有少數幾個很大的載荷,其他都是很小的載荷)。

install.packages("GPArotation")  
library(GPArotation)  
rc<-principal(Harman23.cor$cov,nfactors=2,rotate="varimax")  
rc  
image

列名從PC變成了RC,以表示成分被旋轉
觀察可以發現第一主成分主要由前四個變量來解釋,第二主成分主要由變量5到變量8來解釋。
注意兩個主成分仍不相關,對變量的解釋性不變,這是因為變量的群組沒有發生變化。另外,兩個主成分放置后的累積方差解釋性沒有變化,變的只是各個主成分對方差的解釋(成分1從58%變為44%,成分2從22%變為37%)。各成分的方差解釋度趨同,準確來說,此時應該稱它們為成分而不是主成分。

(4)獲取主成分得分

利用principal()函數,很容易獲得每個調查對象在該主成分上的得分。

  1. 從原始數據中獲取成分得分
library(psych)  
pc<-principal(USJudgeRatings[,-1],nfactors=1,score=TRUE)  
head(pc$scores)  
image

當scores=TRUE時,主成分得分存儲在principal()函數返回對象的scores元素中。

cor(USJudgeRatings$CONT,PC$scores)  
  1. 獲取主成分得分的系數
library(psych)  
rc<-principal(Harman23.cor$cov,nfactor=2,rotate="varimax")  
round(unclass(rc$weights),2)  
image

得到主成分得分:

PC1=0.28height+0.30arm.span+0.30forearm+0.29lower.leg-0.06weight-0.08bitro.diameter-0.10chest.girth-0.04chest.width

PC2=-0.05height-0.08arm.span-0.09forearm-0.06lower.leg+0.33weight+0.32bitro.diameter+0.34chest.girth+0.27chest.width

3.探索性因子分析

EFA的目標是通過發掘隱藏在數據下的一組較少的、更為基本的無法觀測的變量,來解釋一組可觀測變量的相關性。這些虛擬的、無法觀測的變量稱作因子。(每個因子被認為可解釋多個觀測變量間共有的方差,也叫作公共因子)

模型的形式為:

Xi=a1F1+a2F2+……apFp+Ui

Xi是第i個可觀測變量(i=1,2,……k)

Fj是公共因子(j=1,2,……p)

并且p<k

[plain] view plaincopy

<embed id="ZeroClipboardMovie_10" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_10" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=10&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_36" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_36" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=36&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. options(digits=2)
  2. covariances<-ability.cov$cov
  3. correlations<-cov2cor(covariances)
  4. correlations
image

ability.cov提供了變量的協方差矩陣

cov2cor()函數將其轉化為相關系數矩陣

(1)判斷需提取的公共因子數

[plain] view plaincopy

<embed id="ZeroClipboardMovie_11" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_11" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=11&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_37" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_37" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=37&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. library(psych)
  2. convariances<-ability.cov$cov
  3. correlations<-cov2cor(covariances)
  4. fa.parallel(correlations,n.obs=112,fa="both",n.iter=100,main="Scree plots with parallel analysis")
image

若使用PCA方法,可能會選擇一個成分或兩個成分。當搖擺不定時,高估因子數通常比低估因子數的結果好,因為高估因子數一般較少曲解“真實”情況。

(2)提取公共因子

可使用fa()函數來提取因子

fa()函數的格式為:

fa(r,nfactors=,n.obs=,rotate=,scores=,fm)

r是相關系數矩陣或原始數據矩陣;

nfactors設定提取的因子數(默認為1);

n.obs是觀測數(輸入相關系數矩陣時需要填寫);

rotate設定放置的方法(默認互變異數最小法);

scores設定是否計算因子得分(默認不計算);

fm設定因子化方法(默認極小殘差法)。

與PCA不同,提取公共因子的方法很多,包括最大似然法(ml)、主軸迭代法(pa)、加權最小二乘法(wls)、廣義加權最小二乘法(gls)和最小殘差法(minres)。

[plain] view plaincopy

<embed id="ZeroClipboardMovie_12" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_12" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=12&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_38" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_38" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=38&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>未旋轉的主軸迭代因子法</strong>

[plain] view plaincopy

<embed id="ZeroClipboardMovie_13" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_13" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=13&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_39" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_39" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=39&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. fa<-fa(correlations,nfactors=2,rotate="none",fm="pa")
  2. fa
image

(3)因子旋轉

[plain] view plaincopy

<embed id="ZeroClipboardMovie_14" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_14" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=14&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_40" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_40" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=40&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>用正交旋轉提取因子</strong>

[plain] view plaincopy

<embed id="ZeroClipboardMovie_15" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_15" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=15&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_41" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_41" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=41&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. fa.varimax<-fa(correlations,nfactors=2,rotate="varimax",fm="pa")
  2. fa.varimax

[plain] view plaincopy

<embed id="ZeroClipboardMovie_16" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_16" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=16&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_42" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_42" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=42&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>正交放置將人為地強制兩個因子不相關</strong>

[plain] view plaincopy

<embed id="ZeroClipboardMovie_17" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_17" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=17&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_43" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_43" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=43&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>正交旋轉,因子分析的重點在于因子結構矩陣(變量與因子的相關系數)</strong>
image

用斜交旋轉提取因子

[plain] view plaincopy

<embed id="ZeroClipboardMovie_18" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_18" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=18&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_44" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_44" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=44&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. fa.promax<-fa(correlations,nfactors=2,rotate="promax",fm="pa")
  2. fa.promax

[plain] view plaincopy

<embed id="ZeroClipboardMovie_19" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_19" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=19&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_45" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_45" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=45&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>對于斜交旋轉,因子分析會考慮三個矩陣:因子結構矩陣、因子模式矩陣和因子關聯矩陣</strong>

[plain] view plaincopy

<embed id="ZeroClipboardMovie_20" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_20" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=20&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_46" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_46" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=46&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>因子模式矩陣即標準化的回歸系數矩陣,它列出了因子的預測變量的權重;</strong>

[plain] view plaincopy

<embed id="ZeroClipboardMovie_21" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_21" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=21&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_47" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_47" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=47&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>因子關聯矩陣即因子相關系數矩陣;</strong>

[plain] view plaincopy

<embed id="ZeroClipboardMovie_22" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_22" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=22&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_48" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_48" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=48&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. <strong>因子結構矩陣(或稱因子載荷陣),可使用公式F=P*Phi來計算得到,其中F是載荷陣,P為因子模式矩陣,Phi為因子關聯矩陣。</strong>
image

[plain] view plaincopy

<embed id="ZeroClipboardMovie_23" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_23" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=23&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_49" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_49" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=49&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. fsm<-function(oblique){
  2. if(class(oblique)[2]=="fa"&is.null(oblique$Phi)){
  3. warning("Object doesn't look like oblique EFA")
  4. }else{
  5. P<-unclass(oblique$loading)
  6. F<-P%*%oblique$Phi
  7. colnames(F)<-c("PA1","PA2")
  8. return (F)
  9. }
  10. }
  11. fsm(fa.promax)
image

可以看到變量與因子間的相關系數。將它們與正交旋轉所得因子載荷陣相比,發現該載荷陣列的噪音較大,這是因為之前允許潛在因子相關。雖然斜交方法更為復雜,但模型將更加符合真實數據。

使用factor.plot()或fa.diagram()函數,可繪制正交或斜交結果的圖形

[plain] view plaincopy

<embed id="ZeroClipboardMovie_24" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_24" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=24&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_50" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_50" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=50&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. factor.plot(fa.promax,labels=rownames(fa.promax$loadings))
image

[plain] view plaincopy

<embed id="ZeroClipboardMovie_25" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_25" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=25&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_51" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_51" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=51&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. fa.diagram(fa.promax,simple=TRUE)
image

(4)因子得分

EFA并不十分關注因子得分,在fa()函數中添加score=TRUE選項,便可輕松地得到因子得分。另外還可以得到得分系數(標準化的回歸權重),它在返回對象的weights元素中。

[plain] view plaincopy

<embed id="ZeroClipboardMovie_26" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_26" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=26&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

<embed id="ZeroClipboardMovie_52" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_52" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=52&width=16&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">

  1. fa.promax$weights
image

4.其他

(1)

對因子分析非常有用的軟件包,FactoMineR包不僅提供了PCA和EFA方法,還包含潛變量模型。

FAiR包使用遺傳算法來估計因子分析模型,增強了模型參數估計能力,能夠處理不等式的約束條件;

GPArotation包提供了許多因子旋轉方法

nFactors包,提供了用來判斷因子數目方法。

(2)其他潛變量模型

先驗知識的模型:先從一些先驗知識開始,比如變量背后有幾個因子、變量在因子上的載荷是怎樣的、因子間的相關性如何,然后通過收集數據檢驗這些先驗知識。這種方法稱作驗證性因子分析(CFA)。   做CFA的軟件包:sem、openMx和lavaan等。

ltm包可以用來擬合測驗和問卷中各項目的潛變量模型。

潛類別模型(潛在的因子被認為是類別型而非連續型)可通過FlexMix、lcmm、randomLCA和poLC包進行擬合。lcda包可做潛類別判別分析,而lsa可做潛在語義分析----一種自然語言處理中的方法。ca包提供了可做簡單和多重對應分析的函數。

R中還包含了眾多的多維標度法(MDS)計算工具。MDS即可用發現解釋相似性和可測對象間距離的潛在維度。

cmdscale()函數可做經典的MDS

MASS包中的isoMDS()函數可做非線性MDS

vagan包中則包含了兩種MDS的函數

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374