【问题标题】:"Manual" Factor Analysis in RR中的“手动”因子分析
【发布时间】:2018-06-12 13:12:22
【问题描述】:

我正在尝试按照 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 载荷对应于新的特征值*。

任何关于如何根据文本返回特征向量的帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: r pca


    【解决方案1】:

    我通过记住 R 是一种可见语言来解决这个问题!通过查看psych::fac的定义,我看到作者实际上已经进行了7次因子分析迭代,而不是仅仅“取前两个特征向量并重新运行FA”;我也终于明白了因子分析是如何进行的,并且可以将其与后面的文字联系起来,简而言之就是:

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

    • 获取相关矩阵r的特征值(L)和特征向量(V)
    • 计算 C = sum(diag(R))
    • 计算载荷,A = V[,1:k] * Sqrt{L[1:k]}(文本的 eqn 13.6)
    • 设置 R* = AA'(文本 eqn 13.5,R=AA')
    • 设置 C* = sum(diag(R*))
    • 更新 diag(R) = diag(R*)
    • 重复上述步骤,直到达到最大迭代次数,或直到 e = abs(C-C*) 小于某个阈值

    【讨论】:

    • 经过合理的迭代,您能否重现您的特征向量:(-2,83, 0.177, 0.568, 0.675)(0.651, -0.685, 0.252, 0.207)??
    • 是的,我提取了 psych::fac 函数的相关部分并存储了特征向量,然后它仅用值覆盖了从特征函数返回的列表。
    • 好。然后,您可能应该通过提供逐步实现的代码来完成您的答案。这将使您对上述问题的答案可重现。
    猜你喜欢
    • 2010-12-21
    • 2020-09-24
    • 2015-09-05
    • 2017-04-24
    • 2019-04-13
    • 2019-01-27
    • 2016-07-11
    • 2020-10-18
    • 2013-03-23
    相关资源
    最近更新 更多