1

我正在尝试在 R 中复制一些 Stata 结果,但遇到了很多麻烦。具体来说,我想恢复与 Stata 在探索性因子分析中相同的特征值。举一个具体的例子,factorStata 中的帮助使用bg2数据(关于医生费用)并为您提供以下结果:

    webuse bg2
    factor bg2cost1-bg2cost6

(obs=568)

Factor analysis/correlation                        Number of obs    =      568
Method: principal factors                      Retained factors =        3
Rotation: (unrotated)                          Number of params =       15

--------------------------------------------------------------------------
     Factor  |   Eigenvalue   Difference        Proportion   Cumulative
-------------+------------------------------------------------------------
    Factor1  |      0.85389      0.31282            1.0310       1.0310
    Factor2  |      0.54107      0.51786            0.6533       1.6844
    Factor3  |      0.02321      0.17288            0.0280       1.7124
    Factor4  |     -0.14967      0.03951           -0.1807       1.5317
    Factor5  |     -0.18918      0.06197           -0.2284       1.3033
    Factor6  |     -0.25115            .           -0.3033       1.0000
--------------------------------------------------------------------------
LR test: independent vs. saturated:  chi2(15) =  269.07 Prob>chi2 = 0.0000

我对表格第一列的特征值感兴趣。当我在 R 中使用相同的数据时,我得到以下结果:

   bg2 = read.dta("bg2.dta")
   eigen(cor(bg2)

   $values
   [1] 1.7110112 1.4036760 1.0600963 0.8609456 0.7164879 0.6642889 0.5834942

如您所见,这些值与 Stata 的结果有很大不同。这两个程序很可能使用不同的方法来计算特征值,但我尝试了多种不同的方法来提取特征值,包括 R 命令中的大多数(如果不是全部)fa选项其他一些 R 命令。我根本无法提取与 Stata 相同的特征值。我还通读了 Stata 的手册,试图弄清楚 Stata 使用的确切方法,但无法以足够的特异性弄清楚。factanalprincipal

我很想得到任何帮助!如果您需要任何其他信息来回答问题,请告诉我。

4

1 回答 1

3

我建议不要对数据中的所有变量进行因子分析,bg2因为其中一个变量是clinid,这是一个任意标识符 1..568 并且不携带任何信息,除非是偶然的。

明智与否,您没有使用与您在 Stata 中处理 6 个成本变量以及在 R 中处理标识符的数据相同的数据。

另一种注意到这一点的方法是发现你在一种情况下得到 6 个特征值,在另一种情况下得到 7 个。

然而,重要的原则是,eigen(cor(bg2))它只会为您提供基于相关矩阵的主成分分析的特征值。因此,您可以验证pca在 Stata 中是否与您从 R 报告的内容相匹配。

到目前为止,很清楚。

但你更大的问题仍然存在。我不知道如何在 R 中模仿 Stata 的(默认)因子分析。如果有的话,您可能需要一个因子分析专家。

总之,主成分分析不等于主轴法因子分析。

计算特征值的不同方法不是这里的问题。我敢打赌,给定相同的矩阵 Stata 和 R 在报告特征值时匹配得很好。关键是不同的技术原则上意味着不同的特征值。

PS我不是R人,但我认为你所说的R命令严格来说是R函数。反过来,我愿意在那个小点上进行更正。

于 2014-05-01T21:43:59.863 回答