代码之家  ›  专栏  ›  技术社区  ›  user1420372

R中的“手动”因素分析

pca r
  •  2
  • user1420372  · 技术社区  · 8 年前

    我试着按照Tabachnick和Fidell在“使用多元统计”中的因素分析章节进行。

    数据和我的步骤如下:

    # data
    dat.ski <- data.frame(skiers = paste0("S", c(1:5), sep=""), cost = c(32, 61, 59, 36, 62), lift=c(64, 37, 40, 62, 46) , depth = c(65, 62, 45, 34, 43), powder = c(67, 65, 43, 35, 40))
    
    # correlation matrix
    cor.ski <- cor(dplyr::select(dat.ski, -skiers)) 
    
    # eigenvalues and eigenvectors
    eig.ski <- eigen(cor.ski)
    

    相关矩阵和特征值(2.02、1.94、0.04和0.00)与书中的一致。前两个特征向量是(.352,-0.251,-0.626,-0.647)和(.514,-.664,.322,.280)。

    然而,这本书接着说,只有前两个特征值被保留,并且“因子分析被重新运行”,这导致以下两个特征值*:2.00,1.91和特征向量(-2,83,0.177,0.568,0.675)和(0.651,-0.685,0.252,0.207)。我无法再现这些特征向量。。。如果我跑 psych::fa(cor.ski, nfactors=2, fm="pa") ,SS荷载对应于新特征值*。

    谢谢。

    1 回复  |  直到 8 年前
        1
  •  0
  •   user1420372    8 年前

    我通过记住R是一种可见的语言来解决这个问题!通过查看 psych::fac

    从相关矩阵(r)开始,假设使用k个因子

    • 得到相关矩阵r的特征值(L)和特征向量(V)
    • 计算C=和(diag(R))
    • 计算荷载,A=V[,1:k]*Sqrt{L[1:k]}(文本eqn 13.6)
    • 设置R*=AA'(相当于文本的13.5,R=AA')
    • 设置C*=和(diag(R*))
    • 更新诊断(R)=诊断(R*)
    推荐文章