- 昨日の続き
- PLSモデルはパッケージparcorでも
- lasso, adaptive lasso, PLS, and Ridge Regression, model selection for lasso, adaptive lasso and Ridge regression based on cross-validation.
- 重回帰→主成分回帰→PLSRという展開

- 重回帰
- 主成分回帰

- ここで
はloadings行列と呼ばれるとともに、
なる特異値分解を構成する行列でもある
- また
はスコア行列と呼ばれるとともに、特異値分解の構成行列を用いて
と書き表せる
- PLSRでも同じ形を作る。そしてその構成行列を算出するのに少し手間がかかる
- PCRの行列がXのみの情報を使っているのに対して、PLSRの行列は、
の特異値分解から計算を始め、その後も
の両方に関する残差を説明する因子を加えていくことで最終的に残差をなくす繰り返し処理をしていることに反映されているように「X,Y対称性を持った回帰」を目指したものになっている
- PCRでの
(スコア行列)に相当するものとしてPSLRにおけるスコア行列(PCRのそれと区別するために
と書くことにする)を求めたい
,
を射影行列(projection行列)と言う
- PCRでは
であり
をloadings行列と呼んだ
- PCRでは
であったが、PLSRでは
である
- ここで
がほしい
,
は2つの行列
((Xの)loadings 行列)と
(weight loadings 行列)とから計算される
- これらの
が繰り返し計算によって得られるので
もそうなり、結局
もそうなる
- Rのplsパッケージのplsr()関数の出力では、これらの
はそれぞれ、"coefficients","scores","loadings","loading.weights","projection"と呼ばれ、リストの第1,2,3,4,7番要素として出力される
- それを確かめてみる
- 式を再掲する

- 重回帰
- 主成分回帰
- PLSR
- PCRでは、回帰が
と
のみで計算できることを以下で確かめた
for(i in 1:maxa){
tmpT<-Ts[[i]]
print(pcr.out$fitted.values[,,i]-tmpT%*%(solve(t(tmpT)%*%tmpT)%*%t(tmpT)%*%Y))
}
-
- PLSRでは
を
で置き換えよう
pls.out<-plsr(Y~X)
for(i in 1:maxa){
tmpT<-pls.out$scores[,1:i]
print(pls.out$fitted.values[,,i]-tmpT%*%(solve(t(tmpT)%*%tmpT)%*%t(tmpT)%*%Y))
}
-
- 同様にPCRでは、回帰係数行列
を
であることを用いて次のソースのように計算した
for(i in 1:maxa){
tmpT<-Ts[[i]]
print(pcr.out$coefficients[,,i]-pcr.out$loadings[,1:i]%*%(solve(t(tmpT)%*%tmpT)%*%t(tmpT)%*%Y))
}
-
- PSLRでは
として計算しよう
for(i in 1:maxa){
tmpT<-pls.out$scores[,1:i]
print(pls.out$coefficients[,,i]-pls.out$projection[,1:i]%*%(solve(t(tmpT)%*%tmpT)%*%t(tmpT)%*%Y))
}
-
- PCRにおける
とPLSRにおける
とも確かめておく
pcr.out$scores-X.st%*%pcr.out$loadings
pls.out$scores-X.st%*%pls.out$projection
pls.out$projection-pls.out$loading.weights%*%solve(t(pls.out$loadings)%*%pls.out$loading.weights)