首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS中proc princomp与R中princomp命令的差异?

SAS中proc princomp与R中princomp命令的差异?
EN

Stack Overflow用户
提问于 2013-10-31 17:00:57
回答 1查看 1.6K关注 0票数 0

我目前正试图使用SAS中的proc princomp命令和R中的princomp()命令(在stats包中)获得等效的结果。我得到的结果非常相似,这使我怀疑这不是两个命令中不同选项设置的问题。但是,outpus也有很大的不同,以至于每个数据行的组件分数都有明显的不同。它们也是相反的,但这当然不重要。

此分析的最终目标是从PCA生成一组系数,用于在PCA例程之外对数据进行评分(即可以应用于新数据集的公式,以便容易地生成得分数据)。

在不发布所有数据的情况下,我希望有人能够提供一些信息,说明这两个命令在计算中的不同之处。我对PCA的数学不太了解,无法确定这是过程中的概念差异,还是内部舍入的差异。为了简单起见,我将只发布PC1和PC2的特征向量。

在SAS中:

代码语言:javascript
复制
proc princomp data=climate out=pc_out outstat=pc_outstat; 
var MAT MWMT MCMT logMAP logMSP CMI cmiJJA DD_5 NFFD; 
run;

返回

代码语言:javascript
复制
Eigenvectors
       Prin1  Prin2  Prin3  Prin4  Prin5  Prin6  Prin7  Prin8  Prin9 
MAT    0.372  0.257  -.035  -.033  -.106  0.270  -.036  0.216  -.811 
MWMT   0.381  0.077  0.160  -.261  0.627  0.137  -.054  0.497  0.302 
MCMT   0.341  0.324  -.229  0.046  -.544  0.421  0.045  0.059  0.493 
logMAP -.184  0.609  -.311  -.357  -.041  -.548  0.183  0.183  0.000 
logMSP -.205  0.506  0.747  -.137  -.040  0.159  -.156  -.266  0.033 
CMI    -.336  0.287  -.451  0.096  0.486  0.499  0.050  -.318  -.031 
cmiJJA -.365  0.179  0.112  0.688  -.019  0.012  0.015  0.588  0.018 
DD_5   0.379  0.142  0.173  0.368  0.183  -.173  0.725  -.282  0.007 
NFFD   0.363  0.242  -.136  0.402  0.158  -.351  -.637  -.264  0.052 

在R:

代码语言:javascript
复制
PCA.model <- princomp(climate[,c("MAT","MWMT","MCMT","logMAP","logMSP","CMI","cmiJJA","DD.5","NFFD")], scores=T, cor=T)
PCA.model$loadings

返回

代码语言:javascript
复制
Eigenvectors
       Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9
MAT    -0.372 -0.269         0.126        -0.250         0.270  0.789
MWMT   -0.387        -0.171         0.675                0.494 -0.325
MCMT   -0.339 -0.332  0.250  0.164 -0.500 -0.414               -0.510
logMAP  0.174 -0.604  0.309  0.252         0.619 -0.213  0.125       
logMSP  0.202 -0.501 -0.727  0.223        -0.162  0.175 -0.268       
CMI     0.334 -0.293  0.459 -0.222  0.471 -0.495        -0.271       
cmiJJA  0.365 -0.199 -0.174 -0.612 -0.247                0.590       
DD.5   -0.382 -0.143 -0.186 -0.421               -0.695 -0.360       
NFFD   -0.368 -0.227        -0.487         0.309  0.655 -0.205  

正如您所看到的,这些值是相似的(符号相反),但并不相同。得分数据中的差异很重要,其第一行如下所示:

代码语言:javascript
复制
     Prin1  Prin2  Prin3  Prin4  Prin5  Prin6  Prin7  Prin8  Prin9 
SAS  -1.95   1.68  -0.54   0.72  -1.07   0.10  -0.66  -0.02   0.05
R     1.61  -1.99   0.52  -0.42  -1.13  -0.16   0.79   0.12  -0.09

如果我使用GLM (在SAS中)或lm() (在R中)从得分数据中计算系数,除截距外,我得到非常相似的数字(逆符号)。就像这样:

在SAS中:

代码语言:javascript
复制
proc glm order=data data=pc_out;
model Prin1 = MAT MWMT MCMT logMAP logMSP CMI cmiJJA DD_5 NFFD;
run;

在R:

代码语言:javascript
复制
scored <- cbind(PCA.model$scores, climate)
pca.lm <- lm(Comp.1~MAT+MWMT+MCMT+logMAP+logMSP+CMI+cmiJJA+DD.5+NFFD, data=scored)

返回

代码语言:javascript
复制
    Coefficients:
    (Int)  MAT    MWMT   MCMT   logMAP  logMSP  CMI     cmiJJA  DD.5     NFFD 
SAS  0.42   0.04   0.06   0.03  -0.65   -0.69   -0.003  -0.01    0.0002   0.004
R   -0.59  -0.04  -0.06  -0.03   0.62    0.68    0.004   0.02   -0.0002  -0.004

因此,模型拦截似乎改变了得分数据中的值。任何想法,为什么会发生这种情况(为什么拦截是不同的),将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-01 16:08:02

再次感谢所有发表评论的人。令人尴尬的是,我发现SAS proc princomp和R princomp()过程之间的差异实际上是我犯了一个数据错误的结果。对那些花时间帮助回答的人表示歉意。

但是,我不会浪费这个问题,而是在运行主成分分析(PCA)时,提供我发现的SAS和R在统计上等效的过程。

以下过程在统计上是等价的,数据名为“mydata”,变量名为“Var1”、“Var2”和“Var3”。

SAS中的

代码语言:javascript
复制
* Run the PCA on your data;
proc princomp data=mydata out=pc_out outstat=pc_outstat; 
var Var1 Var2 Var3; 
run;
* Use GLM on the individual components to obtain the coefficients to calculate the PCA scoring;
proc glm order=data data=pc_out;
model Prin1 = Var1 Var2 Var3;
run;

R:

代码语言:javascript
复制
PCA.model <- princomp(mydata[,c("Var1","Var2","Var3")], scores=T, cor=T)
scored <- predict(PCA.model, mydata)
scored <- cbind(PCA.model$scores, mydata)
lm(Comp.1~Var1+Var2+Var3, data=scored)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19712532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档