私は部分最小二乗(PLS)が非常に新しくplsr()
、pls
パッケージ内のR関数の出力を理解しようとしています。データをシミュレートしてPLSを実行します。
library(pls)
n <- 50
x1 <- rnorm(n); xx1 <- scale(x1)
x2 <- rnorm(n); xx2 <- scale(x2)
y <- x1 + x2 + rnorm(n,0,0.1); yy <- scale(y)
p <- plsr(yy ~ xx1+xx2, ncomp=1)
私は次の数字と期待していました
> ( w <- loading.weights(p) )
Loadings:
Comp 1
xx1 0.723
xx2 0.690
Comp 1
SS loadings 1.0
Proportion Var 0.5
> a <- w["xx1",]
> b <- w["xx2",]
> a^2+b^2
[1] 1
最大化するために計算されます
> cor(y, a*xx1+b*xx2)
[,1]
[1,] 0.9981291
しかし、これは正確には当てはまりません:
> f <- function(ab){
+ a <- ab[1]; b <- ab[2]
+ cor(y, a*xx1+b*xx2)
+ }
> optim(c(0.7,0.6), f, control=list(fnscale=-1))
$par
[1] 0.7128259 0.6672870
$value
[1] 0.9981618
それは数値エラーですか、またはと性質を誤解していますか?b
また、これらの係数は何ですか?
> p$coef
, , 1 comps
yy
xx1 0.6672848
xx2 0.6368604
編集:今私は何であるかを見るp$coef
:
> x <- a*xx1+b*xx2
> coef(lm(yy~0+x))
x
0.9224208
> coef(lm(yy~0+x))*a
x
0.6672848
> coef(lm(yy~0+x))*b
x
0.6368604
だから私はとbの性質については正しいと思う。
編集: @chlによって与えられたコメントを考慮して、私は私の質問が十分に明確ではないと感じているので、詳細を提供させてください。私の例でありベクトルでの応答と二列の行列X予測子のは、私は正規化されたバージョンを使用〜YのYと正規化されたバージョンを〜XのX(センタリングおよび標準偏差で割った値)。コンポーネント第PLSの定義T 1で、T 1 = A 〜X 1 + B 〜X 2とし、B内積の最大値持つために選ばれた。したがって、それはt 1とYの間の相関を最大化することと同等ではありませんか?
?coef.mvr
pls
このJSS論文には、パッケージとPLS回帰の概要が記載されています。