


圖注:常見精神疾病的因子結構示例,似乎可以歸納為兩個潛在的維度,即內在性和外在性疾病。
因子分析主要存在兩種形式:
探索性因子分析(Exploratory Factor Analysis,EFA)無需事先獲知潛在因子數量,即無需先驗知識,需要提取的因子數量透過資料判斷,並使用因子載荷瞭解因子和變數間的關係。EFA目標是確定變數和因子之間的最相關關係。
驗證性因子分析(Confirmatory Factor Analysis,CFA)是結構方程模型(SEM)的一種方法,試圖確定因子的數量以及觀測變數在因子上的載荷是否符合基於既定理論的預期。CFA從先驗知識出發,預先確定一組簡單的因子結構,包括假定潛在的因子數量和組成、以及因子間的影響方式等,並透過擬合優度對假設結構進行資料相關性評估。
EFA和CFA的最主要區別在於,既定因子結構是否是由先驗知識獲得的。
lavaan的CFA方法
EFA已在前文作了簡介,本篇簡介R包lavaan的CFA方法。
資料集
lavaan包的內建資料集HolzingerSwineford1939,由來自兩個不同學校(Pasteur和Grant-White)的七年級和八年級孩子的智力測驗得分組成(變數X1-Xn),以及孩子的年齡、性別等資訊。
library(lavaan)
#資料集,詳情 ?HolzingerSwineford1939
hz <- HolzingerSwineford1939
head(hz)

已知測驗(變數)X1、X2、X3的分數和視覺(visual)能力有關, X4、X5、X6的分數和寫作(writing)能力有關,X7、X8、X9的分數和數學(maths)能力有關。
因此,這三類學習能力可視為代表該資料集智力測驗得分的潛在因子。
CFA模型
接下來對該資料集執行CFA,看使用假定的三種學習能力是否能夠有效代表原資料集中9種測驗得分間的關係。
#因子和變數關係的書寫格式,=~ 表示“由…表示”
hz.model <- '
visual =~ x1 + x2 + x3
writing =~ x4 + x5 + x6
maths =~ x7 + x8 + x9'
#執行 CFA 的一個簡單方法,詳情 ?cfa
hz.fit <- cfa(model = hz.model, data = hz)
summary(hz.fit, standardized = TRUE)
概要中主要包含如下部分,包含了擬合度指標和統計檢驗結果:
引數估計(Parameter Estimates),觀測變數到潛在因子的標準化權重;
潛在變數(Latent Variables),估計的潛在因子的因子得分;
因子協方差(Covariances),潛在因子之間的協方差;
誤差方差(Variances),每個觀測變數的誤差方差的估計值。

透過樹狀圖評估因子和變數間的關係。
例如,邊的粗細分別代表引數估計值或標準化的引數估計值。對於變數和因子,邊越粗代表變數在因子上的載荷越高;對於因子,邊越粗代表因子間的相關性越強。
#視覺化因子和變數間的關係,詳情 ?semPaths
library(semPlot)
par(mfrow = c(1, 2))
semPaths(hz.fit, what = 'est', layout = 'tree')
semPaths(hz.fit, what = 'std', layout = 'tree')

擬合優度評估
評估CFA的整體擬合度,可透過fitmeasures()函式實現。
#模型擬合度,詳情 ?fitmeasures
fitmeasures(hz.fit, c('cfi', 'rmsea', 'rmsea.ci.upper', 'bic'))

比較擬合指數(comparative fit index,CFI)介於0和1之間,根據一般經驗,良好擬合模型的閾值通常要求CFI>0.9。
近似值的均方根誤差(Root Mean Square Error of Approximation,RMSEA)值等於0.01、0.05和0.08分別表示優秀、良好和中等的擬合度, RMSEA<0.05通常用作合理擬合模型的臨界值。
整體來看,本次CFA還不錯,儘管擬合指數表明(特別是RMSEA值高於0.05),模型可以改進。
其它情況,擬合度較差時的可能原因:
變數的數量,儘管RMSEA趨勢會隨變數數量增加而變差,但其它擬合統計量一般會提升;
模型的複雜性,不同的統計量在簡約模型中的改變程度不同;
樣本數量,不同的統計量存在差異,有些會隨樣本數量增加而提升,但有些會變差;
資料的非正態性(趨於)會使擬合度變差,一般而言,CFA要求輸入資料儘可能滿足多元正態性假設。
模型最佳化
如果期望最佳化現有的CFA結果,首先確定需要修改哪些變數與哪些因子之間的潛在關聯。
#檢查修改索引
mf <- modificationindices(hz.fit)
mf <- mf[order(mf$mi, mf$epc, decreasing = TRUE), ] #按 MI 值排序
mf

lhs、op、rhs指示了推薦修改的因子與變數間關係。MI值越高,代表這種關係更有利於改善現有模型。
例如這裡將最大MI的對應路徑新增到模型中。
#追加 X9 與 visual 的關係
hz.model.2 <- '
visual =~ x1 + x2 + x3 + x9
writing =~ x4 + x5 + x6
maths =~ x7 + x8 + x9'
hz.fit.2 <- cfa(model = hz.model.2, data = hz)
#summary(hz.fit.2, standardized = TRUE)
#semPaths(hz.fit.2, what = 'std', layout = 'tree')
fitmeasures(hz.fit.2, c('cfi', 'rmsea', 'rmsea.ci.upper', 'bic'))

與上述初始建立的CFA相比,CFI和RMSEA值都有所改善,如果期望想進一步最佳化模型,可嘗試其它改進方法。
推薦一次最佳化步驟只嘗試一種推薦的路徑,因為每次修改因子和變數的關係對時,MI值都會改變,根據MI值排序後的順序可能並非和先前的一致。
在模型最佳化過程中,切記注意不要強行建立不相干變數與因子間的潛在關聯,因為MI可能會建議沒有實質意義的路徑。儘管它們在數值上、數學上統計出相關性,但也必須注意這種相關是否是真實合理的。
此外,也儘可能避免很多路徑的出現,使模型產生過擬合問題。
參考資料



