如何复制Stata" factor" R中的命令

时间:2014-05-01 19:33:08

标签: r stata factor-analysis

我试图在R中复制一些Stata结果并且遇到了很多麻烦。具体来说,我想恢复与Stata在探索性因子分析中所做的相同的特征值。为了提供具体示例,Stata中的factor帮助使用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命令中的大多数(如果不是全部)选项{{1 }},fafactanal,以及其他一些R命令。我根本无法提取与Stata相同的特征值。我还阅读了Stata手册,试图找出Stata使用的确切方法,但无法用足够的特异性来解决这个问题。

我喜欢任何帮助!如果您需要任何其他信息来回答这个问题,请与我们联系。

1 个答案:

答案 0 :(得分:3)

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

明智与否,你是使用相同的数据,因为你处理了Stata中的6个成本变量,并且那些是R中的标识符。

另一种注意到的方法是发现你在一个案例中有6个特征值而在另一个案例中有7个特征值。

然而,重要的原则是eigen(cor(bg2))只是根据相关矩阵从主成分分析中给出特征值。因此,您可以验证Stata中的pca是否与您从R报告的内容相匹配。

到目前为止,这么清楚。

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

简而言之,PCA不等于主轴方法因子分析。

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

P.S。我不是R人,但我认为你所谓的R命令是严格的R函数。反过来,我愿意纠正这个小问题。