英文:
Does factor in Stata do the same thing as princomp in R?
问题
我需要在R中重新创建一个使用Stata的factor
命令创建的变量。
我正在寻找R中类似于Stata的factor
命令的相应命令,例如:
factor v1 v2 v3 v4 v5
score newvar1
根据这份Stata文档,这是一个主成分因子分析。
我尝试使用R中的因子分析 fa()
命令来执行相同的操作。然而,我在语法上遇到了困难。我认为相似的R代码应该如下所示:
library(psych)
df$newvar1 <- fa(df, values = c(v1, v2, v3, v4, v5))
然而,当我使用mtcars虚拟数据进行测试时,我没有得到一个因子变量作为结果:
mtcars <- mtcars
library('psych')
mtcars$newvar1 <- fa(mtcars, values=c(mpg, cyl, hp))
错误信息:
Error in
$<-.data.frame
(*tmp*
, fa, value = list(residual =
c(0.124759140589603, : replacement has 49 rows, data has 32 In
addition: Warning message: In fa.stats(r = r, f = f, phi = phi, n.obs
= n.obs, np.obs = np.obs, : The estimated weights for the factor scores are probably incorrect. Try a different factor score
estimation method.
我是不是漏掉了某些参数,还是我误解了语法?
英文:
Edit: for spelling and based on initial response, because I am still struggling with the syntax
I need to recreate a variable in R that was created in Stata using the factor
command.
I am looking for the analogous command in R to Stata's factor command, written for example as:
factor v1 v2 v3 v4 v5
score newvar1
which, according to this Stata documentation, is a principal-factor analysis.
I am trying to use the factor analysis fa() command in R do the same thing. However, I am struggling with the syntax. I think the analogous R code to the Stata code above should look something like this:
library(psych)
df$newvar1 <- fa(df, values = c(v1, v2, v3, v4, v5))
However, when I trial it out using the mtcars dummy data, I do not get a factor variable as a result:
mtcars <- mtcars
library('psych')
mtcars$newvar1 <- fa(mtcars, values=c(mpg, cyl, hp))
> Error in $<-.data.frame
(*tmp*
, fa, value = list(residual =
> c(0.124759140589603, : replacement has 49 rows, data has 32 In
> addition: Warning message: In fa.stats(r = r, f = f, phi = phi, n.obs
> = n.obs, np.obs = np.obs, : The estimated weights for the factor scores are probably incorrect. Try a different factor score
> estimation method.
Am I missing some argument, or am I misinterpreting the syntax?
答案1
得分: 1
以下是R代码的翻译部分:
library(psych)
set.seed(123)
data(mtcars)
f <- fa(mtcars[,c("mpg", "disp", "hp", "qsec")], nfactors=1, SMC=TRUE, fm="pa", rotate="none", max.iter=1)
#> 最大迭代次数已超出
loadings(f)
#>
#> 因子载荷:
#> PA1
#> mpg -0.860
#> disp 0.872
#> hp 0.928
#> qsec -0.633
#>
#> PA1
#> 因子SS载荷 2.76
#> 方差比例 0.69
以下是Stata代码的翻译部分:
. factor mpg disp hp qsec, pf factors(1)
(obs=32)
因子分析/相关性 观测数 = 32
方法: 主要因子 保留的因子 = 1
旋转: (未旋转) 参数数 = 4
--------------------------------------------------------------------------
因子 | 特征值 差异 比例 累积
-------------+------------------------------------------------------------
因子1 | 2.75999 2.42226 0.9543 0.9543
因子2 | 0.33773 0.42422 0.1168 1.0711
因子3 | -0.08649 0.03268 -0.0299 1.0412
因子4 | -0.11917 . -0.0412 1.0000
--------------------------------------------------------------------------
LR检验: 独立 vs. 饱和: chi2(6) = 94.62 Prob>chi2 = 0.0000
因子载荷 (模式矩阵) 和唯一方差
---------------------------------------
变量 | 因子1 | 唯一性
-------------+----------+--------------
mpg | -0.8595 | 0.2613
disp | 0.8719 | 0.2397
hp | 0.9277 | 0.1393
qsec | -0.6327 | 0.5997
---------------------------------------
请注意,fa()
函数的fm="pa"
选项默认执行迭代主轴因子分析(等同于Stata的ipf
选项)。要使fa()
函数执行一次性主轴因子分析解决方案,需要设置max.iter=1
。
英文:
Here is the equivalent in R:
library(psych)
set.seed(123)
data(mtcars)
f <- fa(mtcars[,c("mpg", "disp", "hp", "qsec")], nfactors=1, SMC=TRUE, fm="pa", rotate="none", max.iter=1)
#> maximum iteration exceeded
loadings(f)
#>
#> Loadings:
#> PA1
#> mpg -0.860
#> disp 0.872
#> hp 0.928
#> qsec -0.633
#>
#> PA1
#> SS loadings 2.76
#> Proportion Var 0.69
<sup>Created on 2023-01-10 by the reprex package (v2.0.1)</sup>
Stata:
. factor mpg disp hp qsec, pf factors(1)
(obs=32)
Factor analysis/correlation Number of obs = 32
Method: principal factors Retained factors = 1
Rotation: (unrotated) Number of params = 4
--------------------------------------------------------------------------
Factor | Eigenvalue Difference Proportion Cumulative
-------------+------------------------------------------------------------
Factor1 | 2.75999 2.42226 0.9543 0.9543
Factor2 | 0.33773 0.42422 0.1168 1.0711
Factor3 | -0.08649 0.03268 -0.0299 1.0412
Factor4 | -0.11917 . -0.0412 1.0000
--------------------------------------------------------------------------
LR test: independent vs. saturated: chi2(6) = 94.62 Prob>chi2 = 0.0000
Factor loadings (pattern matrix) and unique variances
---------------------------------------
Variable | Factor1 | Uniqueness
-------------+----------+--------------
mpg | -0.8595 | 0.2613
disp | 0.8719 | 0.2397
hp | 0.9277 | 0.1393
qsec | -0.6327 | 0.5997
---------------------------------------
Note, the fa()
function with fm="pa"
does iterated principal axis factoring by default (equivalent to Stata's, ipf
option). To have fa()
do the one-shot principal axis factoring solution, set max.iter=1
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论