- 昨日の続き
- 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)