我试图在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 }},fa
,factanal
,以及其他一些R命令。我根本无法提取与Stata相同的特征值。我还阅读了Stata手册,试图找出Stata使用的确切方法,但无法用足够的特异性来解决这个问题。
我喜欢任何帮助!如果您需要任何其他信息来回答这个问题,请与我们联系。
答案 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函数。反过来,我愿意纠正这个小问题。