現在、SAS の proc princomp コマンドと R の princomp() コマンド (stats パッケージ内) を使用して、同等の結果を得ようとしています。得られる結果は非常によく似ており、これは 2 つのコマンドのオプション設定が異なることによる問題ではないと思われます。ただし、出力も十分に異なるため、各データ行のコンポーネント スコアは著しく異なります。それらも符号反転されていますが、これはもちろん問題ではありません。
この分析の最終目標は、PCA ルーチンの外部でデータをスコアリングするための PCA から一連の係数を作成することです (つまり、スコアリングされたデータを簡単に作成するために新しいデータセットに適用できる式)。
すべてのデータを投稿することなく、これら 2 つのコマンドが計算でどのように異なるかについて誰かが情報を提供できることを願っています。これがプロセスの概念的な違いなのか、内部の丸めの違いのようなものなのかを判断するのに十分な PCA 数学についてはわかりません。簡単にするために、PC1 と PC2 の固有ベクトルのみを掲載します。
SAS では:
proc princomp data=climate out=pc_out outstat=pc_outstat;
var MAT MWMT MCMT logMAP logMSP CMI cmiJJA DD_5 NFFD;
run;
戻り値
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で:
PCA.model <- princomp(climate[,c("MAT","MWMT","MCMT","logMAP","logMSP","CMI","cmiJJA","DD.5","NFFD")], scores=T, cor=T)
PCA.model$loadings
戻り値
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
ご覧のとおり、値は似ていますが (符号が逆)、同一ではありません。違いはスコアリングされたデータで重要です。最初の行は次のようになります。
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で:
proc glm order=data data=pc_out;
model Prin1 = MAT MWMT MCMT logMAP logMSP CMI cmiJJA DD_5 NFFD;
run;
Rで:
scored <- cbind(PCA.model$scores, climate)
pca.lm <- lm(Comp.1~MAT+MWMT+MCMT+logMAP+logMSP+CMI+cmiJJA+DD.5+NFFD, data=scored)
戻り値
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
したがって、モデルの切片がスコアリングされたデータの値を変更しているように見えます。これが発生する理由 (切片が異なる理由) についての考えをいただければ幸いです。