Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

plsregress

部分最小二乗 (PLS) 回帰

説明

[XL,YL] = plsregress(X,Y,ncomp) は、行列 X の予測子に対する行列 Y の応答の部分最小二乗 (PLS) 回帰を ncomp 個の PLS 成分を使用して計算し、予測と応答の負荷 XL および YL をそれぞれ返します。

[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = plsregress(X,Y,ncomp) は、以下も返します。

  • 予測子スコア XS。予測子スコアは、X の変数の線形結合である PLS 成分です。

  • 応答スコア YS。応答スコアは、PLS 成分 XS が最大共分散をもつ応答の線形結合です。

  • PLS 回帰モデルの係数推定値の行列 BETA

  • 回帰モデルで説明される分散の比率 PCTVAR

  • ncomp 個の成分をもつ PLS モデルの推定平均二乗誤差 MSE

  • PLS の重み、T2 統計量、および予測子と応答の残差を含む構造体 stats

[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = plsregress(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。名前と値の引数は MSE の計算パラメーターを指定します。たとえば、'CV',5 は、5 分割交差検証を使用して MSE を計算します。

すべて折りたたむ

spectra データセットを読み込みます。ガソリン 60 標本の近赤外線 (NIR) 401 波長のスペクトル強度を格納する数値行列として予測子 X を作成します。対応するオクタン価を格納する数値ベクトルとして応答 y を作成します。

load spectra
X = NIR;
y = octane;

10 個の成分を使用して X の予測子に対する y の応答の PLS 回帰を実行します。

[XL,yl,XS,YS,beta,PCTVAR] = plsregress(X,y,10);

応答変数 (PCTVAR) で説明される分散の比率を成分の数の関数としてプロットします。

plot(1:10,cumsum(100*PCTVAR(2,:)),'-bo');
xlabel('Number of PLS components');
ylabel('Percent Variance Explained in y');

Figure contains an axes object. The axes object with xlabel Number of PLS components, ylabel Percent Variance Explained in y contains an object of type line.

近似応答を計算し、残差を表示します。

yfit = [ones(size(X,1),1) X]*beta;
residuals = y - yfit;
stem(residuals)
xlabel('Observations');
ylabel('Residuals');

Figure contains an axes object. The axes object with xlabel Observations, ylabel Residuals contains an object of type stem.

部分最小二乗 (PLS) 回帰モデルの投影における変数重要度 (VIP) スコアを計算します。VIP は、予測子変数の間に多重共線性が存在する場合の変数の選択に使用できます。VIP スコアが 1 より大きい変数は、PLS 回帰モデルの投影において重要であると見なされます[3]

spectra データセットを読み込みます。ガソリン 60 標本の近赤外線 (NIR) 401 波長のスペクトル強度を格納する数値行列として予測子 X を作成します。対応するオクタン価を格納する数値ベクトルとして応答 y を作成します。成分の数 ncomp を指定します。

load spectra
X = NIR;
y = octane;
ncomp = 10;

10 個の成分を使用して X の予測子に対する y の応答の PLS 回帰を実行します。

[XL,yl,XS,YS,beta,PCTVAR,MSE,stats] = plsregress(X,y,ncomp);

正規化された PLS の重みを計算します。

W0 = stats.W ./ sqrt(sum(stats.W.^2,1));

ncomp 個の成分の VIP スコアを計算します。

p = size(XL,1);
sumSq = sum(XS.^2,1).*sum(yl.^2,1);
vipScore = sqrt(p* sum(sumSq.*(W0.^2),2) ./ sum(sumSq,2));

VIP スコアが 1 以上の変数を検索します。

indVIP = find(vipScore >= 1);

VIP スコアをプロットします。

scatter(1:length(vipScore),vipScore,'x')
hold on
scatter(indVIP,vipScore(indVIP),'rx')
plot([1 length(vipScore)],[1 1],'--k')
hold off
axis tight
xlabel('Predictor Variables')
ylabel('VIP Scores')

Figure contains an axes object. The axes object with xlabel Predictor Variables, ylabel VIP Scores contains 3 objects of type scatter, line.

入力引数

すべて折りたたむ

予測子変数。数値行列として指定します。X は n 行 p 列の行列で、n は観測値の数、p は予測子変数の数です。X の各行は 1 つの観測値を、各列は 1 つの変数を表します。XY と同じ行数でなければなりません。

データ型: single | double

応答変数。数値行列として指定します。Y は n 行 m 列の行列で、n は観測値の数、m は応答変数の数です。Y の各行は 1 つの観測値を、各列は 1 つの変数を表します。Y の各行は X の対応する行に対する応答です。

データ型: single | double

成分の数。数値ベクトルとして指定します。ncomp を指定しない場合、既定値は min(size(X,1) – 1,size(X,2)) です。

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'CV',10,'Options',statset('UseParallel',true) は、10 分割交差検証を使用して MSE の計算を並列に実行します。

MSE の計算法。'resubstitution'、正の整数、または cvpartition オブジェクトとして指定します。

  • 交差検証を使用せずに、XY の両方を使用してモデルを当てはめて平均二乗誤差を推定するには、'CV''resubstitution' として指定します。

  • k 分割交差検証を使用するには、'CV' を正の整数 k として指定します。

  • 別のタイプの交差検証分割を指定するには、'CV'cvpartition オブジェクトとして指定します。

例: 'CV',5

例: 'CV',cvpartition(n,'Holdout',0.3)

データ型: single | double | char | string

モデルの当てはめに定数項 (切片) を含めるインジケーター。定数項を含める場合は true、定数項を省略する場合は false として指定します。

例: 'Intercept',false

データ型: logical

交差検証用のモンテカルロ反復回数。正の整数として指定します。

  • CV'resubstitution' として指定する場合、MCReps の値は 1 でなければなりません。

  • CV をカスタム cvpartition オブジェクト (つまり、IsCustom プロパティが 1 に設定されたオブジェクト) を指定する場合、MCReps の値は 1 でなければなりません。

例: 'MCReps',5

データ型: single | double

並列計算と乱数ストリーム設定のオプション。構造体として指定します。statset を使用して Options 構造体を作成します。次の表は、オプションのフィールドとその値の一覧です。

フィールド名既定の設定
UseParallel並列計算を行う場合は、この値を true に設定します。false
UseSubstreams

再生可能な方法で並列計算する場合は、この値を true に設定します。

再現性のある計算を行うには、Streams をサブストリームを許可する型 ('mlfg6331_64' または 'mrg32k3a') に設定します。

false
StreamsRandStream オブジェクトまたはそのようなオブジェクトで構成される cell 配列としてこの値を指定します。Streams を指定しなかった場合、plsregress は既定のストリームを使用します。

メモ

並列計算を行うには、Parallel Computing Toolbox™ が必要です。

例: 'Options',statset('UseParallel',true)

データ型: struct

出力引数

すべて折りたたむ

予測子の負荷。数値行列として返されます。XL は p 行 ncomp 列の行列で、p は予測子変数の数、ncomp は PLS 成分の数です。XL の各行に、元の予測子変数を近似する PLS 成分の線形結合を定義する係数が格納されます。

データ型: single | double

応答の負荷。数値行列として返されます。YL は m 行 ncomp 列の行列で、m は応答変数の数、ncomp は PLS 成分の数です。YL の各行に、元の応答変数を近似する PLS 成分の線形結合を定義する係数が格納されます。

データ型: single | double

予測子スコア。数値行列として指定します。XS は n 行 ncomp 列の正規直交行列で、n は観測値の数、ncomp は PLS 成分の数です。XS の各行は 1 つの観測値に対応し、各列は 1 つの成分に対応します。

データ型: single | double

応答スコア。数値行列として指定します。YS は n 行 ncomp 列の行列で、n は観測値の数、ncomp は PLS 成分の数です。YS の各行は 1 つの観測値に対応し、各列は 1 つの成分に対応します。YS は正規直交行列ではありません。

データ型: single | double

PLS 回帰モデルの係数推定値。数値行列として返されます。モデルに定数項 (切片) が含まれる場合、BETA は (p + 1) 行 m 列の行列になります。ここで、p は予測子変数の数、m は応答変数の数であり、BETA の 1 行目に定数項が格納されます。定数項 (切片) が含まれない場合、BETA は p 行 m 列の行列になります。

データ型: single | double

モデルで説明される分散の比率。数値行列として返されます。PCTVAR は 2 行 ncomp 列の行列で、ncomp は PLS 成分の数です。PCTVAR の最初の行に各 PLS 成分によって X で説明される分散の比率、2 番目の行に Y で説明される分散の比率が格納されます。

データ型: single | double

平均二乗誤差。数値行列として返されます。MSE は 2 行 (ncomp + 1) 列の行列で、ncomp は PLS 成分の数です。MSE には、ncomp 個の成分をもつ PLS モデルの推定平均二乗誤差が格納されます。MSE の最初の行に X の予測子変数の平均二乗誤差、2 番目の行に Y の応答変数の平均二乗誤差が格納されます。MSE の j 列に j – 1 個の成分の平均二乗誤差が格納されます。

データ型: single | double

モデルの統計量。次の表で説明されているフィールドをもつ構造体として返されます。

フィールド説明
WXS = X0*W となる p 行ncomp 列の PLS 重み行列
T2XS の各点に対する T2 統計量
Xresiduals予測子の残差 X0 – XS*XL'
Yresiduals応答の残差 Y0 – XS*YL'

予測子と応答のセンタリングされた変数 X0 および Y0 の詳細については、アルゴリズムを参照してください。

アルゴリズム

plsregress では SIMPLS アルゴリズム[1]を使用します。モデルの当てはめに定数項 (切片) が含まれる場合、この関数は最初に列平均を差し引くことで X および Y をセンタリングし、予測子と応答のセンタリングされた変数 X0 および Y0 を求めます。ただし、この関数は列の再スケーリングは行いません。標準化された変数を使用して PLS 回帰を実行するには、zscore を使用して X および Y を正規化します (X0 および Y0 の列を平均値が 0 になるようにセンタリングしてから標準偏差が 1 になるようにスケーリング)。

X および Y を作成した後、plsregressX0'*Y0 で特異値分解 (SVD) を計算します。予測と応答の負荷 XL および YL は、X0 および Y0 の予測子スコア XS での回帰によって得られる係数です。センタリングされたデータ X0 および Y0 は、それぞれ XS*XL' および XS*YL' を使用して再構成できます。

plsregress は最初に YSYS = Y0*YL として計算します。ただし、慣例では[1]plsregress はその後 YS の各列を XS の前の列と直交させ、XS'*YS が下三角行列になるようにします。

モデルの当てはめに定数項 (切片) が含まれない場合、X および Y は当てはめプロセスにおいてセンタリングされません。

参照

[1] de Jong, Sijmen. “SIMPLS: An Alternative Approach to Partial Least Squares Regression.” Chemometrics and Intelligent Laboratory Systems 18, no. 3 (March 1993): 251–63. https://doi.org/10.1016/0169-7439(93)85002-X.

[2] Rosipal, Roman, and Nicole Kramer. "Overview and Recent Advances in Partial Least Squares." Subspace, Latent Structure and Feature Selection: Statistical and Optimization Perspectives Workshop (SLSFS 2005), Revised Selected Papers (Lecture Notes in Computer Science 3940). Berlin, Germany: Springer-Verlag, 2006, vol. 3940, pp. 34–51. https://doi.org/10.1007/11752790_2.

[3] Chong, Il-Gyo, and Chi-Hyuck Jun. “Performance of Some Variable Selection Methods When Multicollinearity Is Present.” Chemometrics and Intelligent Laboratory Systems 78, no. 1–2 (July 2005) 103–12. https://doi.org/10.1016/j.chemolab.2004.12.011.

拡張機能

バージョン履歴

R2008a で導入