因子分析——数学原理及R语言代码

正交因子分析

  • 目的
  • 数学原理
    • 参数估计方法
      • 主成分法
      • 主因子法
      • 极大似然法
    • 因子旋转
    • 模型检验
    • 因子得分
      • 加权最小二乘法
      • 回归法
  • 代码实现
    • 注意事项
    • 例子
  • Reference

目的

FactorAnalysis的目的是从多个高度相关的观测变量中提取出少数几个LatentFactor,这些因子代表了变量背后的共通结构,从而实现降维并提升可解释性。

假设对一组学生进行了以下六门课程的测试:语文、英语、数学、物理、化学、生物,发现语文和英语成绩之间高度相关,数学、物理、化学、生物也彼此高度相关。此时可以猜测:这些成绩可能是由两个更基本的“能力”决定的,比如语言能力和理科能力。通过因子分析就可以提取出这两个潜在因子,并发现语文和英语主要由“语言能力”因子决定,理科四门主要由“理科能力”因子解释。这样就可以用两个因子有效地概括了六个变量的结构,同时让模型更易解释、更简洁。

正交因子分析认为因子间是正交的,即不相关的,斜交因子分析中因子间可以是相关的,本文只探讨正交因子分析。

数学原理

‘ X ‘ `\mathbf{X}` X是一个可观测的 ‘ m ‘ `m` m维随机向量, ‘ E ⁡ ( X ) = μ , Cov ⁡ ( X ) = Σ = ( σ i j ) ‘ `\operatorname{E}(\mathbf{X})=\boldsymbol{\mu},\;\operatorname{Cov}(\mathbf{X})=\Sigma=(\sigma_{ij})` E(X)=μ,Cov(X)=Σ=(σij)。正交因子分析的数学模型为:
X = μ + A F + ε { E ⁡ ( F ) = 0 , Cov ⁡ ( F ) = I n E ⁡ ( ε ) = 0 , Cov ⁡ ( ε ) = D = diag ⁡ { σ 1 2 , … , σ m 2 } Cov ⁡ ( F , ε ) = 0 \begin{gathered} \mathbf{X}=\boldsymbol{\mu}+AF+\varepsilon \\ \begin{cases} \operatorname{E}(F)=\mathbf{0},\;\operatorname{Cov}(F)=I_n \\ \operatorname{E}(\varepsilon)=\mathbf{0},\;\operatorname{Cov}(\varepsilon)=D=\operatorname{diag}\{\sigma_1^2,\dots,\sigma_m^2\} \\ \operatorname{Cov}(F,\varepsilon)=\mathbf{0} \end{cases} \end{gathered} X=μ+AF+ε E(F)=0,Cov(F)=InE(ε)=0,Cov(ε)=D=diag{σ12,,σm2}Cov(F,ε)=0
其中 ‘ F = ( f 1 , … , f n ) T ‘ `F=(f_1,\dots,f_n)^T` F=(f1,,fn)T是不可观测的 ‘ n ‘ `n` n维随机变量, ‘ ε ‘ `\varepsilon` ε是不可观测的 ‘ m ‘ `m` m维随机变量,分别称 ‘ F ‘ `F` F ‘ ε ‘ `\varepsilon` ε为CommonFactor和SpecificFactor。 ‘ A = ( a i j ) ‘ `A=(a_{ij})` A=(aij)是一个非随机矩阵, ‘ a i j ‘ `a_{ij}` aij表示公共因子 ‘ f j ‘ `f_j` fj、随机变量 ‘ X i ‘ `\mathbf{X}_i` Xi的因子载荷。 ‘ a 1 j , a 2 j , … , a i j ‘ `a_{1j},a_{2j},\dots,a_{ij}` a1j,a2j,,aij中至少有两个不为 ‘ 0 ‘ `0` ‘0‘,否则可将 ‘ f i ‘ `f_i` fi并入到 ‘ ε i ‘ `\varepsilon_i` εi中去; ‘ ε i ‘ `\varepsilon_i` εi也仅出现在 ‘ X i ‘ `\mathbf{X}_i` Xi的表达式中。


上述因子分析模型具有如下性质:

  1. ‘ Σ = A A T + D ‘ `\Sigma=AA^T+D` ‘Σ=AAT+D

  2. ‘ X ∗ = C X ‘ `\mathbf{X}^*=C\mathbf{X}` X=CX,则有:
    Y = C μ + C A F + C ε = μ ∗ + A ∗ F + ε ∗ \mathbf{Y}=C\boldsymbol{\mu}+CAF+C\varepsilon=\boldsymbol{\mu}^*+A^*F+\varepsilon^* Y=Cμ+CAF+=μ+AF+ε

  3. 因子载荷不唯一;

  4. ‘ Cov ⁡ ( X , F ) = A ‘ `\operatorname{Cov}(\mathbf{X},F)=A` Cov(X,F)=A,即 ‘ Cov ⁡ ( X i , F j ) = a i j ‘ `\operatorname{Cov}(\mathbf{X}_i,F_j)=a_{ij}` Cov(Xi,Fj)=aij

  5. ‘ h i 2 = ∑ j = 1 n a i j 2 ‘ `h_i^2=\sum\limits_{j=1}^{n}a_{ij}^2` hi2=j=1naij2,则有:
    Var ⁡ ( X i ) = σ i i = ∑ j = 1 n a i j 2 + σ i 2 = h i 2 + σ i 2 , i = 1 , 2 , … , m \operatorname{Var}(\mathbf{X}_i)=\sigma_{ii}=\sum_{j=1}^{n}a_{ij}^2+\sigma_i^2=h_i^2+\sigma_i^2,\;i=1,2,\dots,m Var(Xi)=σii=j=1naij2+σi2=hi2+σi2,i=1,2,,m

  6. ‘ g j 2 = ∑ i = 1 m a i j 2 ‘ `g_j^2=\sum\limits_{i=1}^{m}a_{ij}^2` gj2=i=1maij2,则有:
    ∑ i = 1 m Var ⁡ ( X i ) = ∑ j = 1 n g j 2 + ∑ i = 1 n σ i 2 \sum_{i=1}^{m}\operatorname{Var}(\mathbf{X}_i)=\sum_{j=1}^{n}g_j^2+\sum_{i=1}^{n}\sigma_i^2 i=1mVar(Xi)=j=1ngj2+i=1nσi2

Proof. (1)由[prop:CovMat](3)(4)(5)可得:
Σ = Cov ⁡ ( X ) = Cov ⁡ ( μ + A F + ε , μ + A F + ε ) = Cov ⁡ ( μ , μ + A F + ε ) + Cov ⁡ ( A F , μ + A F + ε ) + Cov ⁡ ( ε , μ + A F + ε ) = Cov ⁡ ( A F , μ ) + Cov ⁡ ( A F ) + Cov ⁡ ( A F , ε ) + Cov ⁡ ( ε , μ ) + Cov ⁡ ( ε , A F ) + Cov ⁡ ( ε ) = A Cov ⁡ ( F ) A T + A Cov ⁡ ( F , ε ) + Cov ⁡ ( ε , F ) A T + D = A A T + D \begin{aligned} \Sigma&=\operatorname{Cov}(\mathbf{X})=\operatorname{Cov}(\boldsymbol{\mu}+AF+\varepsilon,\boldsymbol{\mu}+AF+\varepsilon) \\ &=\operatorname{Cov}(\boldsymbol{\mu},\boldsymbol{\mu}+AF+\varepsilon)+\operatorname{Cov}(AF,\boldsymbol{\mu}+AF+\varepsilon)+\operatorname{Cov}(\varepsilon,\boldsymbol{\mu}+AF+\varepsilon) \\ &=\operatorname{Cov}(AF,\boldsymbol{\mu})+\operatorname{Cov}(AF)+\operatorname{Cov}(AF,\varepsilon)+\operatorname{Cov}(\mathbf{\varepsilon},\boldsymbol{\mu})+\operatorname{Cov}(\varepsilon,AF)+\operatorname{Cov}(\varepsilon) \\ &=A\operatorname{Cov}(F)A^T+A\operatorname{Cov}(F,\varepsilon)+\operatorname{Cov}(\varepsilon,F)A^T+D \\ &=AA^T+D \end{aligned} Σ=Cov(X)=Cov(μ+AF+ε,μ+AF+ε)=Cov(μ,μ+AF+ε)+Cov(AF,μ+AF+ε)+Cov(ε,μ+AF+ε)=Cov(AF,μ)+Cov(AF)+Cov(AF,ε)+Cov(ε,μ)+Cov(ε,AF)+Cov(ε)=ACov(F)AT+ACov(F,ε)+Cov(ε,F)AT+D=AAT+D

(2)显然。

(3)取正交矩阵 ‘ Q ‘ `Q` Q,令 ‘ A ∗ = A Q ‘ `A^*=AQ` A=AQ ‘ F ∗ = Q T F ‘ `F^*=Q^TF` F=QTF,则依然有:
E ⁡ ( F ∗ ) = Q T E ⁡ ( F ) = 0 , Cov ⁡ ( F ∗ ) = Q T Cov ⁡ ( F ) Q = I n , X = μ + A ∗ F ∗ + ε \operatorname{E}(F^*)=Q^T\operatorname{E}(F)=\mathbf{0},\;\operatorname{Cov}(F^*)=Q^T\operatorname{Cov}(F)Q=I_n,\;\mathbf{X}=\boldsymbol{\mu}+A^*F^*+\varepsilon E(F)=QTE(F)=0,Cov(F)=QTCov(F)Q=In,X=μ+AF+ε

(4)由[prop:CovMat](3)(4)(5)可得:
Cov ⁡ ( X , F ) = Cov ⁡ ( μ + A F + ε , F ) = Cov ⁡ ( μ , F ) + Cov ⁡ ( A F , F ) + Cov ⁡ ( ε , F ) = A \operatorname{Cov}(\mathbf{X},F)=\operatorname{Cov}(\boldsymbol{\mu}+AF+\varepsilon,F)=\operatorname{Cov}(\boldsymbol{\mu},F)+\operatorname{Cov}(AF,F)+\operatorname{Cov}(\varepsilon,F)=A Cov(X,F)=Cov(μ+AF+ε,F)=Cov(μ,F)+Cov(AF,F)+Cov(ε,F)=A

(5)由(1)即可得到结论。

(6)由(1)可得:
∑ i = 1 m Var ⁡ ( X i ) = tr ⁡ [ Cov ⁡ ( X ) ] = tr ⁡ ( A A T + D ) = ∑ i = 1 m ∑ j = 1 n a i j 2 + ∑ i = 1 n σ i 2 = ∑ j = 1 n ∑ i = 1 m a i j 2 + ∑ i = 1 n σ i 2 = ∑ j = 1 n g j 2 + ∑ i = 1 n σ i 2 \begin{aligned} \sum_{i=1}^{m}\operatorname{Var}(\mathbf{X}_i)&=\operatorname{tr}[\operatorname{Cov}(\mathbf{X})]=\operatorname{tr}(AA^T+D)=\sum_{i=1}^{m}\sum_{j=1}^{n}a_{ij}^2+\sum_{i=1}^{n}\sigma_i^2 \\ &=\sum_{j=1}^{n}\sum_{i=1}^{m}a_{ij}^2+\sum_{i=1}^{n}\sigma_i^2=\sum_{j=1}^{n}g_j^2+\sum_{i=1}^{n}\sigma_i^2 \end{aligned} i=1mVar(Xi)=tr[Cov(X)]=tr(AAT+D)=i=1mj=1naij2+i=1nσi2=j=1ni=1maij2+i=1nσi2=j=1ngj2+i=1nσi2

‘ h i 2 ‘ `h_i^2` hi2为变量 ‘ X i ‘ `\mathbf{X}_i` Xi的CommonVariance,它反映了公共因子对 ‘ X i ‘ `\mathbf{X}_i` Xi的方差贡献度。称 ‘ σ i 2 ‘ `\sigma_i^2` σi2 ‘ X i ‘ `\mathbf{X}_i` Xi的SpecificVariance,它反映了特殊因子 ‘ ε i ‘ `\varepsilon_i` εi ‘ X i ‘ `\mathbf{X}_i` Xi的方差贡献度。 ‘ g j 2 ‘ `g_j^2` gj2可视为公共因子 ‘ f j ‘ `f_j` fj ‘ X 1 , … , X m ‘ `\mathbf{X}_1,\dots,\mathbf{X}_m` X1,,Xm的总方差贡献度。

参数估计方法

主成分法

设观测变量 ‘ X ‘ `\mathbf{X}` X的协方差矩阵 ‘ Σ ‘ `\Sigma` ‘Σ‘,它的特征值从大到小依次为 ‘ λ 1 , … , λ m ‘ `\lambda_1,\dots,\lambda_m` λ1,,λm,对应的单位正交特征向量分别为 ‘ l 1 , … , l m ‘ `l_1,\dots,l_m` l1,,lm。于是 ‘ Σ ‘ `\Sigma` ‘Σ‘有分解式:
Σ = ( l 1 l 2 ⋯ l m ) ( λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ m ) ( l 1 T l 2 T ⋮ l m T ) = ∑ i = 1 m λ i l i l i T \Sigma= \begin{pmatrix} l_1 & l_2 & \cdots &l_m \end{pmatrix} \begin{pmatrix} \lambda_1 & 0 & \cdots & 0 \\ 0 & \lambda_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_m \end{pmatrix} \begin{pmatrix} l_1^T \\ l_2^T \\ \vdots \\ l_m^T \end{pmatrix} =\sum_{i=1}^{m}\lambda_il_il_i^T Σ=(l1l2lm) λ1000λ2000λm l1Tl2TlmT =i=1mλililiT
由[prop:CovMat](2)和[theo:PositiveSemidefinite](3)的第五条可知 ‘ λ m ⩾ 0 ‘ `\lambda_m\geqslant0` λm0‘。当最后 ‘ m − n ‘ `m-n` mn个特征值较小时, ‘ Σ ‘ `\Sigma` ‘Σ‘有如下近似:
Σ = ∑ i = 1 m λ i l i l i T ≈ ∑ i = 1 n λ i l i l i T + D ^ = A ^ A ^ T + D ^ \Sigma=\sum_{i=1}^{m}\lambda_il_il_i^T\approx\sum_{i=1}^{n}\lambda_il_il_i^T+\hat{D}=\hat{A}\hat{A}^T+\hat{D} Σ=i=1mλililiTi=1nλililiT+D^=A^A^T+D^
其中:
A ^ = ( λ 1 l 1 ⋯ λ n l n ) , D ^ = diag ⁡ ( Σ − A ^ A ^ T ) \hat{A}= \begin{pmatrix} \sqrt{\lambda_1}l_1 & \cdots & \sqrt{\lambda_n}l_n \end{pmatrix},\; \hat{D}=\operatorname{diag}(\Sigma-\hat{A}\hat{A}^T) A^=(λ1 l1λn ln),D^=diag(ΣA^A^T)
与PCA一样,一般通过使 ‘ ( ∑ i = 1 n λ i ) / ( ∑ i = 1 m λ i ) ‘ `\left(\sum\limits_{i=1}^{n}\lambda_i\right)/\left(\sum\limits_{i=1}^{m}\lambda_i\right)` (i=1nλi)/(i=1mλi)大于一定比例来选择 ‘ n ‘ `n` n的具体值。

主因子法

‘ A A T = Σ − D ‘ `AA^T=\Sigma-D` AAT=ΣD。取 ‘ σ ^ 1 2 , … , σ ^ m 2 ‘ `\hat{\sigma}_1^2,\dots,\hat{\sigma}_m^2` σ^12,,σ^m2为特殊方差的合理初始估计((1)全零,(2)取 ‘ max ⁡ j ≠ i σ i j ‘ `\max\limits_{j\ne i}\sigma_{ij}` j=imaxσij),则有:
A A T ^ = ( σ 11 − σ ^ 1 2 σ 12 ⋯ σ 1 m σ 21 σ 22 − σ ^ 2 2 ⋯ σ 2 m ⋮ ⋮ ⋱ ⋮ σ m 1 σ m 2 ⋯ σ m m − σ ^ m 2 ) \widehat{AA^T}= \begin{pmatrix} \sigma_{11}-\hat{\sigma}_1^2 & \sigma_{12} & \cdots & \sigma_{1m} \\ \sigma_{21} & \sigma_{22}-\hat{\sigma}_2^2 & \cdots & \sigma_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{m1} & \sigma_{m2} & \cdots & \sigma_{mm}-\hat{\sigma}_m^2 \end{pmatrix} AAT = σ11σ^12σ21σm1σ12σ22σ^22σm2σ1mσ2mσmmσ^m2
‘ A A T ^ ‘ `\widehat{AA^T}` AAT ‘ n ‘ `n` n个大于 ‘ 0 ‘ `0` ‘0‘的特征值,从大到小依次为 ‘ λ ^ 1 , … , λ ^ n ‘ `\hat{\lambda}_1,\dots,\hat{\lambda}_n` λ^1,,λ^n,对应的单位正交特征向量为 ‘ l ^ 1 , … , l ^ n ‘ `\hat{l}_1,\dots,\hat{l}_n` l^1,,l^n,则有近似的:
A ^ = ( λ ^ 1 l ^ 1 ⋯ λ ^ n l ^ n ) \hat{A}= \begin{pmatrix} \sqrt{\hat{\lambda}_1}\hat{l}_1 & \cdots & \sqrt{\hat{\lambda}_n}\hat{l}_n \end{pmatrix} A^=(λ^1 l^1λ^n l^n)
‘ σ ^ i 2 = σ i i − h ^ i 2 ‘ `\hat{\sigma}_i^2=\sigma_{ii}-\hat{h}_i^2` σ^i2=σiih^i2,继续上面的迭代过程以得到稳定的近似解。

Input: 协方差矩阵 ‘ Σ ‘ `\Sigma` ‘Σ‘,初始特殊方差估计
‘ σ ^ 1 2 , … , σ ^ m 2 ‘ `\hat{\sigma}^2_1, \ldots, \hat{\sigma}^2_m` σ^12,,σ^m2,目标因子数 ‘ n ‘ `n` n
Output: 因子载荷矩阵估计 ‘ A ^ ‘ `\hat{A}` A^,特殊方差估计
‘ σ ^ i 2 ‘ `\hat{\sigma}_i^2` σ^i2

初始化 ‘ σ ^ i 2 ‘ `\hat{\sigma}_i^2` σ^i2 为合理值 构造矩阵
‘ A A T ^ = Σ − diag ⁡ ( σ ^ 1 2 , … , σ ^ m 2 ) ‘ `\widehat{AA^T} = \Sigma - \operatorname{diag}(\hat{\sigma}_1^2, \ldots, \hat{\sigma}_m^2)` AAT =Σdiag(σ^12,,σ^m2)
‘ A A T ^ ‘ `\widehat{AA^T}` AAT 做特征值分解,得到部分特征值
‘ λ ^ 1 ⩾ ⋯ ⩾ λ ^ n ‘ `\hat{\lambda}_1 \geqslant \cdots \geqslant \hat{\lambda}_n` λ^1λ^n,及对应单位正交特征向量
‘ l ^ 1 , … , l ^ n ‘ `\hat{l}_1, \ldots, \hat{l}_n` l^1,,l^n 构造因子载荷矩阵估计:
‘ A ^ = ( a ^ i j ) = ( λ ^ 1 l ^ 1 ⋯ λ ^ n l ^ n ) ‘ `\hat{A}=(\hat{a}_{ij}) = \begin{pmatrix} \sqrt{\hat{\lambda}_1} \hat{l}_1 & \cdots & \sqrt{\hat{\lambda}_n} \hat{l}_n \end{pmatrix}` A^=(a^ij)=(λ^1 l^1λ^n l^n)
‘ h ^ i 2 = ∑ j = 1 n a ^ i j 2 ‘ `\hat{h}_i^2 = \sum\limits_{j=1}^n \hat{a}_{ij}^2` h^i2=j=1na^ij2,更新
‘ σ ^ i 2 = σ i i − h ^ i 2 , i = 1 , 2 , … , m ‘ `\hat{\sigma}_i^2 = \sigma_{ii} - \hat{h}_i^2,\;i=1,2,\dots,m` σ^i2=σiih^i2,i=1,2,,m

极大似然法

推导太过困难,可以参考
Jöreskog, K. G. (1963). Statistical Estimation in Factor Analysis. Almqvist and Wicksell.

Lawley, D. N. and Maxwell, A. E. (1971). Factor Analysis as a Statistical Method. Second edition. Butterworths.

因子旋转

为了提高因子的可解释性,我们希望每个因子对观测变量的影响是集中且明显的,即一个因子主要对少数几个变量有显著影响,对其余变量几乎没有作用。这种结构反映在因子载荷矩阵 ‘ A ‘ `A` A上即为 ‘ A ‘ `A` A每一列的元素 ‘ a i j , i = 1 , 2 , … , m ‘ `a_{ij},\;i=1,2,\dots,m` aij,i=1,2,,m不是均匀地分布在中间水平,而是趋于两极分化:其绝对值要么接近于 ‘ 0 ‘ `0` ‘0‘,要么较大。这样可以使得每个因子更容易被识别和解释——因为它只与一小组变量高度相关。这种结构等价于希望载荷矩阵 ‘ A ‘ `A` A的每一列具有稀疏性,从而便于赋予因子明确的语义标签。

由[prop:FactorAnalysis](3)可知在初步求得因子载荷矩阵 ‘ A ‘ `A` A后,可以使用一个正交矩阵右乘 ‘ A ‘ `A` A,此时仍能得到一个因子模型。使用正交矩阵来右乘 ‘ A ‘ `A` A相当于是对因子 ‘ F ‘ `F` F进行旋转变换,我们可以通过不断旋转 ‘ F ‘ `F` F来得到更加稀疏的因子载荷矩阵,从而提高因子的可解释性。

如何旋转?怎么衡量旋转后因子载荷矩阵的优良性?

令:
d i j 2 = a i j 2 h i 2 , i = 1 , 2 , … , m , j = 1 , 2 , … , n d_{ij}^2=\frac{a_{ij}^2}{h_i^2},\quad i=1,2,\dots,m,\;j=1,2,\dots,n dij2=hi2aij2,i=1,2,,m,j=1,2,,n
‘ d i j 2 ‘ `d_{ij}^2` dij2衡量了因子 ‘ j ‘ `j` j对观测变量 ‘ X i ‘ `\mathbf{X}_i` Xi的影响,且消除了 ‘ a i j ‘ `a_{ij}` aij的正负号带来的差异和各观测变量在因子载荷大小上的不同带来的差异。定义第 ‘ j ‘ `j` j ‘ p ‘ `p` p个数据 ‘ d i j 2 , i = 1 , 2 , … , m ‘ `d_{ij}^2,\;i=1,2,\dots,m` dij2,i=1,2,,m的方差为:
V j = 1 m ∑ i = 1 m ( d i j 2 − d ˉ j ) 2 = 1 m ∑ i = 1 m ( d i j 2 − 1 p ∑ i = 1 m d i j 2 ) = 1 m [ ∑ i = 1 m d i j 4 − m 1 m 2 ( ∑ i = 1 m d i j 2 ) 2 ] = 1 m 2 [ m ∑ i = 1 m d i j 4 − 1 m ( ∑ i = 1 m d i j 2 ) 2 ] = 1 m 2 [ m ∑ i = 1 m a i j 4 h i 4 − 1 m ( ∑ i = 1 m a i j 2 h i 2 ) 2 ] \begin{aligned} V_j&=\frac{1}{m}\sum_{i=1}^{m}(d_{ij}^2-\bar{d}_j)^2=\frac{1}{m}\sum_{i=1}^{m}\left(d_{ij}^2-\frac{1}{p}\sum_{i=1}^{m}d_{ij}^2\right) \\ &=\frac{1}{m}\left[\sum_{i=1}^{m}d_{ij}^4-m\frac{1}{m^2}\left(\sum_{i=1}^{m}d_{ij}^2\right)^2\right] \\ &=\frac{1}{m^2}\left[m\sum_{i=1}^{m}d_{ij}^4-\frac{1}{m}\left(\sum_{i=1}^{m}d_{ij}^2\right)^2\right] \\ &=\frac{1}{m^2}\left[m\sum_{i=1}^{m}\frac{a_{ij}^4}{h_i^4}-\frac{1}{m}\left(\sum_{i=1}^{m}\frac{a_{ij}^2}{h_i^2}\right)^2\right] \end{aligned} Vj=m1i=1m(dij2dˉj)2=m1i=1m(dij2p1i=1mdij2)=m1 i=1mdij4mm21(i=1mdij2)2 =m21 mi=1mdij4m1(i=1mdij2)2 =m21 mi=1mhi4aij4m1(i=1mhi2aij2)2
‘ V j ‘ `V_j` Vj越大,则第 ‘ j ‘ `j` j个因子对观测变量的影响越集中。定义因子载荷矩阵 ‘ A ‘ `A` A的方差为:
V = ∑ j = 1 n V j = 1 m 2 { ∑ j = 1 n [ m ∑ i = 1 m a i j 4 h i 4 − 1 m ( ∑ i = 1 m a i j 2 h i 2 ) 2 ] } V=\sum_{j=1}^{n}V_j=\frac{1}{m^2}\left\{\sum_{j=1}^{n}\left[m\sum_{i=1}^{m}\frac{a_{ij}^4}{h_i^4}-\frac{1}{m}\left(\sum_{i=1}^{m}\frac{a_{ij}^2}{h_i^2}\right)^2\right]\right\} V=j=1nVj=m21 j=1n mi=1mhi4aij4m1(i=1mhi2aij2)2
‘ V ‘ `V` V越大,则表明因子对观测变量的影响越集中。

综上,我们只需使得旋转后得到的因子载荷矩阵 ‘ A ‘ `A` A的方差 ‘ V ‘ `V` V达到最大即可。

模型检验

由上面的讨论可以看出,潜在因子的数目是一个超参数,也是一个非常重要的参数,我们该如何选择呢?有没有什么办法能够确定这一超参数的值?
在正态性假设下(仍需假设 X \mathbf{X} X n n n维正态随机向量),我们可以对求解后的因子分析模型进行似然比检验。
设样本数为 p p p,分别为 X 1 , X 2 , … , X p \mathbf{X_1},\mathbf{X_2},\dots,\mathbf{X_p} X1,X2,,Xp,都独立同分布于 N ⁡ m ( μ , Σ ) \operatorname{N}_m(\boldsymbol{\mu},\Sigma) Nm(μ,Σ)。构建似然比检验假设:
H 0 : Σ = A A T + D , H 1 : Σ 为其它任一正定矩阵 \begin{equation*} H_0:\Sigma=AA^T+D,\quad H_1:\Sigma\text{为其它任一正定矩阵} \end{equation*} H0:Σ=AAT+D,H1:Σ为其它任一正定矩阵
由\cref{def:MultiNormalPDF2}可得此时备择假设下的对数似然函数为:
L 1 = ∑ i = 1 p ln ⁡ { 1 ( 2 π ) m 2 ( det ⁡ Σ ) 1 2 e − 1 2 tr ⁡ [ ( X i − μ ) ( X i − μ ) T Σ − 1 ] } = ∑ i = 1 p { − m 2 ln ⁡ ( 2 π ) − 1 2 ln ⁡ ( det ⁡ Σ ) − 1 2 tr ⁡ [ ( X i − μ ) ( X i − μ ) T Σ − 1 ] } = − p 2 { m ln ⁡ ( 2 π ) + ln ⁡ ( det ⁡ Σ ) + 1 p ∑ i = 1 p tr ⁡ [ ( X i − μ ) ( X i − μ ) T Σ − 1 ] } \begin{align*} L_1&=\sum_{i=1}^{p}\ln\left\{\frac{1}{(2\pi)^{\frac{m}{2}}(\det\Sigma)^{\frac{1}{2}}}e^{-\frac{1}{2}\operatorname{tr}[(\mathbf{X_i}-\boldsymbol{\mu})(\mathbf{X_i}-\boldsymbol{\mu})^T\Sigma^{-1}]}\right\} \\ &=\sum_{i=1}^{p}\left\{-\frac{m}{2}\ln(2\pi)-\frac{1}{2}\ln(\det\Sigma)-\frac{1}{2}\operatorname{tr}[(\mathbf{X_i}-\boldsymbol{\mu})(\mathbf{X_i}-\boldsymbol{\mu})^T\Sigma^{-1}]\right\} \\ &=-\frac{p}{2}\left\{m\ln(2\pi)+\ln(\det\Sigma)+\frac{1}{p}\sum_{i=1}^{p}\operatorname{tr}[(\mathbf{X_i}-\boldsymbol{\mu})(\mathbf{X_i}-\boldsymbol{\mu})^T\Sigma^{-1}]\right\} \end{align*} L1=i=1pln{(2π)2m(detΣ)211e21tr[(Xiμ)(Xiμ)TΣ1]}=i=1p{2mln(2π)21ln(detΣ)21tr[(Xiμ)(Xiμ)TΣ1]}=2p{mln(2π)+ln(detΣ)+p1i=1ptr[(Xiμ)(Xiμ)TΣ1]}
上式可以化为(样本因子分析时需要注意使用协方差矩阵的无偏估计,系数应取 p − 1 p-1 p1):
L 1 ( Σ ) = − p 2 [ m ln ⁡ ( 2 π ) + ln ⁡ ( det ⁡ Σ ) + tr ⁡ ( S Σ − 1 ) ] \begin{equation*} L_1(\Sigma)=-\frac{p}{2}\left[m\ln(2\pi)+\ln(\det\Sigma)+\operatorname{tr}(S\Sigma^{-1})\right] \end{equation*} L1(Σ)=2p[mln(2π)+ln(detΣ)+tr(SΣ1)]
其中 S S S为样本协方差阵。这个似然函数在 Σ = S \Sigma=S Σ=S时取最大值,于是:
L 1 = − p 2 [ m ln ⁡ ( 2 π ) + ln ⁡ ( det ⁡ S ) + p ] \begin{equation*} L_1=-\frac{p}{2}[m\ln(2\pi)+\ln(\det S)+p] \end{equation*} L1=2p[mln(2π)+ln(detS)+p]
同理,此时原假设下的似然函数值为:
L 2 = − p 2 [ m ln ⁡ ( 2 π ) + ln ⁡ ( det ⁡ Σ ^ ) + tr ⁡ ( S Σ ^ ) ] \begin{equation*} L_2=-\frac{p}{2}\left[m\ln(2\pi)+\ln(\det\hat{\Sigma})+\operatorname{tr}(S\hat{\Sigma})\right] \end{equation*} L2=2p[mln(2π)+ln(detΣ^)+tr(SΣ^)]
其中 Σ ^ = A ^ A ^ T − D ^ \hat{\Sigma}=\hat{A}\hat{A}^T-\hat{D} Σ^=A^A^TD^
由似然比检验原理可知:
− 2 [ L 2 ( Σ ) − L 1 ( Σ ) ] = ∼ χ d f 2 \begin{equation*} -2[L_2(\Sigma)-L_1(\Sigma)]=\sim\chi^2_{df} \end{equation*} 2[L2(Σ)L1(Σ)]=∼χdf2

p [ ln ⁡ ( det ⁡ Σ ^ ) + tr ⁡ ( S Σ ^ ) − ln ⁡ ( det ⁡ S ) − p ] > χ 0.95 2 ( d f ) \begin{equation*} p[\ln(\det\hat{\Sigma})+\operatorname{tr}(S\hat{\Sigma})-\ln(\det S)-p]>\chi^2_{0.95}(df) \end{equation*} p[ln(detΣ^)+tr(SΣ^)ln(detS)p]>χ0.952(df)
时应拒绝原假设,即 n n n个因子不足以解释数据,应增大因子个数。其中 χ 0.95 2 ( d f ) \chi^2_{0.95}(df) χ0.952(df)为分布的 0.95 0.95 0.95分位数。

不介绍自由度的计算,有点复杂,R语言factanal函数中使用的自由度计算公式为dof <- 0.5 * ((p - factors)^2 - p - factors),其中p为变量数,factors为潜在因子数。

因子得分

在拟合得到因子载荷矩阵后,我们可以反过来求解各样本因子的取值,这样一来就可以根据因子值去进行进一步的分析。例如在开头的例子里,我们可以得到每个学生语言能力与理科能力的值,进而可以进行分类或选择。
因子得分主要有两种计算方式。

加权最小二乘法

考虑加权最小二乘函数:
φ ( F ) = ( X − μ − A F ) T D − 1 ( X − μ − A F ) \begin{equation*} \varphi(F)=(\mathbf{X}-\boldsymbol{\mu}-AF)^TD^{-1}(\mathbf{X}-\boldsymbol{\mu}-AF) \end{equation*} φ(F)=(XμAF)TD1(XμAF)
求:
F ^ = arg ⁡ min ⁡ φ ( F ) \begin{equation*} \hat{F}=\arg\min\varphi(F) \end{equation*} F^=argminφ(F)
由极值的必要条件得到:
∂ φ ( F ) ∂ F = − 2 A T D − 1 ( X − μ − A F ) = 0 A T D − 1 ( X − μ ) = A T D − 1 A F F = ( A T D − 1 A ) − 1 A T D − 1 ( X − μ ) \begin{gather*} \frac{\partial\varphi(F)}{\partial F}=-2A^TD^{-1}(\mathbf{X}-\boldsymbol{\mu}-AF)=0 \\ A^TD^{-1}(\mathbf{X}-\boldsymbol{\mu})=A^TD^{-1}AF \\ F=(A^TD^{-1}A)^{-1}A^TD^{-1}(\mathbf{X}-\boldsymbol{\mu}) \end{gather*} Fφ(F)=2ATD1(XμAF)=0ATD1(Xμ)=ATD1AFF=(ATD1A)1ATD1(Xμ)
需要注意 A T D − 1 A A^TD^{-1}A ATD1A的可逆性。\par
若认为 X ∼ N ⁡ m ( μ + A F , D ) \mathbf{X}\sim\operatorname{N}_m(\boldsymbol{\mu}+AF,D) XNm(μ+AF,D),则上述解得的 F F F也是极大似然估计的结果。
称加权最小二乘法得到的因子得分为Bartlett因子得分
从求解过程可以看出,该方法实际上是对特殊方差更大的变量施以更宽容的残差值。

回归法

设:
f j = ∑ i = 1 m b j i X i + ε j , Cov ⁡ ( X i , ε j ) = 0 , j = 1 , 2 , … , n \begin{equation*} f_j=\sum_{i=1}^{m}b_{ji}\mathbf{X}_i+\varepsilon_j,\;\operatorname{Cov}(\mathbf{X}_i,\varepsilon_j)=0,\quad j=1,2,\dots,n \end{equation*} fj=i=1mbjiXi+εj,Cov(Xi,εj)=0,j=1,2,,n
由\cref{prop:FactorAnalysis}(4)和\cref{prop:CovMat}(3)(5)可知:
a i j = Cov ⁡ ( X i , f j ) = Cov ⁡ ( X i , ∑ k = 1 m b j k X k + ε j ) = ∑ k = 1 m σ i k b j k \begin{equation*} a_{ij}=\operatorname{Cov}(\mathbf{X}_i,f_j)=\operatorname{Cov}\left(\mathbf{X}_i,\sum_{k=1}^{m}b_{jk}\mathbf{X}_k+\varepsilon_j\right)=\sum_{k=1}^{m}\sigma_{ik}b_{jk} \end{equation*} aij=Cov(Xi,fj)=Cov(Xi,k=1mbjkXk+εj)=k=1mσikbjk
B = ( b i j ) B=(b_{ij}) B=(bij),则有:
A = Σ B T \begin{equation*} A=\Sigma B^T \end{equation*} A=ΣBT
于是 B = A T Σ − 1 B=A^T\Sigma^{-1} B=ATΣ1,需要注意 Σ \Sigma Σ的可逆性。回归法的因子得分即为:
F = A T Σ − 1 X \begin{equation*} F=A^T\Sigma^{-1}\mathbf{X} \end{equation*} F=ATΣ1X

代码实现

R语言中使用Factanal函数进行因子分析,注意它使用极大似然估计法进行参数估计。

factanal(x, factors, data = NULL, covmat = NULL, n.obs = NA,subset, na.action, start = NULL,scores = c("none", "regression", "Bartlett"),rotation = "varimax", control = NULL, ...)
  1. x:formula或矩阵或数据框。formula时要用data参数来指定数据来源,因为因子分析是对变量的考察,所以formula应形如~X_1+X_2+X_3~左侧为空,右端指定观测变量。若为矩阵或数据框,其行数应为样本数,列数应为观测变量数。若covmat被指定,则不应指定x
  2. factors:指定潜在因子个数,应为正整数。
  3. datax为formula时指定数据来源。
  4. covmat:指定观测变量协方差矩阵,被指定时不需要传递x, data
  5. n.obs:样本数,指定covmat时需要明确样本数。
  6. subset, na.action:选择样本子集及缺失值处理
  7. start:特殊方差迭代时的初始值,无需深究,除非你懂了极大似然估计法估计参数。
  8. scores:指定因子得分计算方式,"none"表示不计算因子得分。
  9. rotation:因子旋转,值只能为"varimax"none,前者表示使用varimax函数来进行正交旋转,后者表示不进行因子旋转。

注意事项

  1. factanal()函数只提供正交因子分析,斜交因子分析请另外找包。
  2. 若只提供covmat ,无法进行似然比检验,结果将会输出拟合残差平方和与自由度,但如果此时提供n.obs,则会输出似然比检验的结果。

例子

x<-c(1.000,0.923, 1.000,0.841, 0.851, 1.000,0.756, 0.807, 0.870, 1.000,0.700, 0.775, 0.835, 0.918, 1.000,0.619, 0.695, 0.779, 0.864, 0.928, 1.000,0.633, 0.697, 0.787, 0.869, 0.935, 0.975, 1.000,0.520, 0.596, 0.705, 0.806, 0.866, 0.932, 0.943, 1.000)
names<-c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8")
R<-matrix(0, nrow=8, ncol=8, dimnames=list(names, names))
for (i in 1:8){for (j in 1:i){R[i,j]<-x[(i-1)*i/2+j]; R[j,i]<-R[i,j]}
}
factanal(factors = 3, covmat = R, n.obs = 20)Call:
factanal(factors = 3, covmat = R, n.obs = 20)Uniquenesses:X1    X2    X3    X4    X5    X6    X7    X8 
0.005 0.106 0.144 0.080 0.057 0.038 0.010 0.090 Loadings:Factor1 Factor2 Factor3
X1  0.284   0.956         
X2  0.395   0.851   0.119 
X3  0.543   0.723   0.196 
X4  0.682   0.595   0.318 
X5  0.797   0.501   0.240 
X6  0.900   0.382         
X7  0.914   0.391         
X8  0.913   0.273         Factor1 Factor2 Factor3
SS loadings      4.110   3.139   0.221
Proportion Var   0.514   0.392   0.028
Cumulative Var   0.514   0.906   0.934Test of the hypothesis that 3 factors are sufficient.
The chi square statistic is 0.79 on 7 degrees of freedom.
The p-value is 0.998 
  1. Uniquenesses即为特殊方差的值
  2. loadings表示因子载荷,其中较小的因子载荷会显示空值
  3. SS loadings为 g j 2 g_j^2 gj2,Proportion Var为因子对所有观测变量总方差的贡献率,即 g j 2 / ∑ i = 1 m Var ⁡ ( X i ) g_j^2/\sum\limits_{i=1}^m\operatorname{Var}(\mathbf{X}_i) gj2/i=1mVar(Xi),Cumulative Var为累计方差贡献率。
  4. 最底下是似然比检验的结果,若p值小于0.05,则应增大潜在因子数。

Reference

1.薛毅,统计建模与R软件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ACL访问控制列表:access-list 10 permit 192.168.10.1

ACL访问控制列表 标准ACL语法 1. 创建ACL access-list <编号> <动作> <源IP> <通配符掩码> // 编号范围 1-99 // 动作&#xff1a;permit 允许 、 deny 拒绝2. 示例 //允许192.168.1.0/24g整个网络,0.0.0.255 反掩码 access-list 10 permit 192.1…

解决社区录音应用横屏状态下,录音后无法播放的bug

最近看到社区有小伙伴反映&#xff0c;社区录音应用横屏时&#xff0c;录音后无法播放的问题。现分享解决办法。 社区录音应用的来源&#xff1a;https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-5.0.2-Release/code/SystemFeature/Media/Recorder …

每周靶点分享:Angptl3、IgE、ADAM9及文献分享:抗体的多样性和特异性以及结构的新见解

本期精选了《脂质代谢的关键调控者Angptl3》《T细胞活化抑制因子VISTA靶点》《文献分享&#xff1a;双特异性抗体重轻链配对设计》三篇文章。以下为各研究内容的概述&#xff1a; 1. 脂质代谢的关键调控者Angptl3 血管生成素相关蛋白3&#xff08;Angptl3&#xff09;是血管生…

保持Word中插入图片的清晰度

大家有没有遇到这个问题&#xff0c;原本绘制的高清晰度图片&#xff0c;插入word后就变模糊了。先说原因&#xff0c;word默认启动了自动压缩图片功能&#xff0c;分享一下如何关闭这项功能&#xff0c;保持Word中插入图片的清晰度。 ①在Word文档中&#xff0c;点击左上角的…

Datawhale AI春训营 day

待补充 2025星火杯应用赛入门应用 创空间 魔搭社区 {"default": {"system": "你是星火大模型&#xff0c;一个由科大讯飞研发的人工智能助手。请用简洁、专业、友好的方式回答问题。","description": "默认系统提示词"}…

项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台

目录 思维导图 前置知识 Docker是什么&#xff1f; Docker的核心概念&#xff1a; Docker在本项目中的作用 1. 环境隔离与一致性 2. 简化部署流程 3. 资源管理与扩展性 4. 服务整合与通信 5. 版本控制和回滚 6. 开发与生产环境一致性 总结 前端 1.小程序 2.web …

正则表达式实用指南:原理、场景、优化与引擎对比

正则表达式实用指南&#xff1a;原理、场景、优化与引擎对比 正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 regexp&#xff09;是程序员处理文本数据时不可或缺的“瑞士军刀”。无论是表单校验、日志分析、数据清洗&#xff0c;还是敏感信息脱敏&#…

OSCP - Hack The Box - Sau

主要知识点 CVE-2023-27163漏洞利用systemd提权 具体步骤 执行nmap扫描&#xff0c;可以先看一下55555端口 Nmap scan report for 10.10.11.224 Host is up (0.58s latency). Not shown: 65531 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp o…

5.1.1 WPF中Command使用介绍

WPF 的命令系统是一种强大的输入处理机制,它比传统的事件处理更加灵活和可重用,特别适合 MVVM (Model, View, ViewModel)模式开发。 一、命令系统核心概念 1.命令系统基本元素: 命令(Command): 即ICommand类,使用最多的是RoutedCommand,也可以自己继承ICommand使用自定…

Dagster Pipes系列-2:增强外部脚本与Dagster的交互能力

在现代数据工程中&#xff0c;自动化和监控是确保数据管道高效运行的关键因素。Dagster作为一款强大的数据编排工具&#xff0c;提供了多种方式来实现这些目标。本文将深入探讨如何使用Dagster Pipes修改外部代码&#xff0c;以实现日志记录、结构化元数据报告以及资产检查等功…

C++类和对象进阶 —— 与数据结构的结合

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 […

Java中进阶并发编程

第一章、并发编程的挑战 并发和并行&#xff1a;指多线程或多进程 线程的本质&#xff1a;操作系统能够进行运算调度的最小单位&#xff0c;是进程&#xff08;Process&#xff09;中的实际工作单元 进程的本质&#xff1a;操作系统进行资源分配和调度的基本单位&#xff0c…

《 指针变量类型与内存访问:揭秘背后的奥秘》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、指针变量类型的基本概念二、指针类型与内存访问字节数的关系&#xff08;一&#xff09;整型指针&#xff08;二&#xff09;字符型指针&#xff08;三&…

mapbox进阶,使用mapbox-plugins插件加载饼状图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀使用mapbox-plugins插件加载饼状图1. ☘…

GraphicLayer与BusineDataLayer层级控制

补充说明&#xff1a; 当参与层级控制的元素是点型元素时&#xff0c;是无法参与ZIndex层级控制的&#xff0c;此时可以换个解决方案 1.给不同的高度值实现&#xff0c;元素间的层级控制覆盖 import * as mars3d from "mars3d"export let map // mars3d.Map三维地…

uniapp 百家云直播插件打包失败

打包错误日志 Android自有证书 打包失败 错误日志: https://app.liuyingyong.cn/build/errorLog/cf41a610-effe-11ef-88db-05262d4c3e5d原因&#xff1a;需要导入插件依赖 依赖地址&#xff1a;https://ext.dcloud.net.cn/plugin?id16289 百家云直播插件地址 直播插…

【C++】”如虎添翼“:模板初阶

泛型编程&#xff1a; C中一种使用模板来实现代码重用和类型安全的编程范式。它允许程序员编写与数据类型无关的代码&#xff0c;从而可以用相同的代码逻辑处理不同的数据类型。模板是泛型编程的基础 模板分为两类&#xff1a; 函数模板&#xff1a;代表了一个函数家族&#x…

十五、多态与虚函数

十五、多态与虚函数 15.1 引言 面向对象编程的基本特征&#xff1a;数据抽象&#xff08;封装&#xff09;、继承、多态基于对象&#xff1a;我们创建类和对象&#xff0c;并向这些对象发送消息多态&#xff08;Polymorphism&#xff09;&#xff1a;指的是相同的接口、不同的…

点云特征提取的两大经典范式:Voxel-based 与 Pillar-based

点云特征提取的两大经典范式&#xff1a;Voxel-based 与 Pillar-based 在点云处理领域&#xff0c;尤其是针对 3D 目标检测任务&#xff0c;特征提取是核心环节之一。目前&#xff0c;Voxel-based&#xff08;体素化&#xff09;和 Pillar-based&#xff08;柱状化&#xff09…

前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…