Main Content

plsregress

부분 최소제곱(PLS) 회귀

설명

[XL,YL] = plsregress(X,Y,ncomp)ncomp 부분 최소제곱(PLS) 성분을 사용하여 예측 변수 행렬 X에 대한 응답 변수 행렬 Y의 PLS 회귀에 대해 예측 변수 적재값과 응답 변수 적재값(각각 XLYL)을 반환합니다.

예제

[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)는 위에 열거된 구문에 나와 있는 입력 인수 조합뿐만 아니라 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 이름-값 인수는 MSE 계산 파라미터를 지정합니다. 예를 들어 'CV',5는 5겹 교차 검증을 사용하여 MSE를 계산합니다.

예제

모두 축소

spectra 데이터 세트를 불러옵니다. 예측 변수 X를 401개 파장에서 60개 가솔린 표본의 근적외선(NIR) 스펙트럼 강도를 포함하는 숫자형 행렬로 만듭니다. 응답 변수 y를 대응되는 옥탄가를 포함하는 숫자형 벡터로 만듭니다.

load spectra
X = NIR;
y = octane;

X에 있는 예측 변수에 대해 y에 있는 응답 변수의 10개 성분 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를 사용할 수 있습니다. 1보다 큰 VIP 점수를 가진 변수는 PLS 회귀 모델의 중요도 척도로 간주됩니다[3].

spectra 데이터 세트를 불러옵니다. 예측 변수 X를 401개 파장에서 60개 가솔린 표본의 근적외선(NIR) 스펙트럼 강도를 포함하는 숫자형 행렬로 만듭니다. 응답 변수 y를 대응되는 옥탄가를 포함하는 숫자형 벡터로 만듭니다. ncomp의 성분 개수를 지정합니다.

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

X에 있는 예측 변수에 대해 y에 있는 응답 변수의 10개 성분을 사용하여 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));

1보다 크거나 같은 VIP 점수를 가진 변수를 구합니다.

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의 각 행은 하나의 관측값을 나타내고 각 열은 하나의 변수를 나타냅니다. XY와 행 개수가 동일해야 합니다.

데이터형: single | double

예측 변수로, 숫자형 행렬로 지정됩니다. Y는 n×m 행렬입니다. 여기서 n은 관측값 개수이고 m은 응답 변수 개수입니다. Y의 각 행은 하나의 관측값을 나타내고 각 열은 하나의 변수를 나타냅니다. 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
Streams이 값을 RandStream 객체 또는 이러한 객체 하나로 구성된 셀형 배열로 지정합니다.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의 각 행은 하나의 관측값에 대응되고 각 열은 하나의 성분에 대응됩니다.

데이터형: single | double

응답 변수 점수로, 숫자형 행렬로 반환됩니다. YS는 n×ncomp 행렬입니다. 여기서 n은 관측값 개수이고 ncomp는 PLS 성분 개수입니다. YS의 각 행은 하나의 관측값에 대응되고 각 열은 하나의 성분에 대응됩니다. YS는 정규 직교이거나 정규화되지 않습니다.

데이터형: single | double

PLS 회귀 모델에 대한 계수 추정값으로, 숫자형 행렬로 반환됩니다. 모델이 상수항(절편)을 포함하는 경우 BETA는 (p + 1)×m 행렬입니다. 여기서 p는 예측 변수 개수이고, m은 응답 변수 개수이며, BETA의 첫 번째 행은 상수항을 포함합니다. 상수항(절편)이 포함되지 않은 경우 BETA는 p×m 행렬입니다.

데이터형: single | double

모델로 설명되는 분산의 백분율로, 숫자형 행렬로 반환됩니다. PCTVAR은 2×ncomp 행렬이며, 여기서 ncomp는 PLS 성분 개수입니다. PCTVAR의 첫 번째 행은 각 PLS 성분별로 X에 설명된 분산의 백분율을 포함하고 두 번째 행은 Y에 설명된 분산의 백분율을 포함합니다.

데이터형: single | double

평균 제곱 오차로, 숫자형 행렬로 반환됩니다. MSE는 2×(ncomp + 1) 행렬이며, 여기서 ncomp는 PLS 성분 개수입니다. MSEncomp 성분을 가진 PLS 모델에 대한 추정된 평균 제곱 오차를 포함합니다. MSE의 첫 번째 행은 X의 예측 변수에 대한 평균 제곱 오차를 포함하고 두 번째 행은 Y의 응답 변수에 대한 평균 제곱 오차를 포함합니다. MSE의 열 j는 j – 1 성분에 대한 평균 제곱 오차를 포함합니다.

데이터형: single | double

모델 통계량으로, 다음 표에서 설명하는 필드를 가진 구조체로 반환됩니다.

필드설명
WPLS 가중치의 p×ncomp 행렬(XS = X0*W여야 함)
T2XS의 각 점에 대한 T2 통계량
Xresiduals예측 변수 잔차, 즉 X0 – XS*XL'
Yresiduals응답 변수 잔차, 즉 Y0 – XS*YL'

중심화된 예측 변수와 응답 변수(각각 X0Y0)에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

알고리즘

plsregress는 SIMPLS 알고리즘을 사용합니다[1]. 모델 피팅이 상수항(절편)을 포함하는 경우, 이 함수는 먼저 열 평균을 빼서 XY를 중심화하고 중심화된 예측 변수와 응답 변수(각각 X0Y0)를 구합니다. 그러나 이 함수는 열을 다시 스케일링하지 않습니다. 표준화된 변수로 PLS 회귀를 수행하려면 zscore를 사용하여 XY를 정규화합니다(X0Y0의 열이 평균 0을 갖도록 중심화되고 표준편차 1을 갖도록 스케일링됨).

XY를 중심화한 후, plsregressX0'*Y0에 대한 특이값 분해(SVD)를 계산합니다. 예측 변수 적재값과 응답 변수 적재값(각각 XLYL)은 예측 변수 점수 XS에 대해 X0Y0을 회귀 분석하여 얻은 계수입니다. XS*XL'XS*YL'을 각각 사용하여, 중심화된 데이터 X0Y0을 복원할 수 있습니다.

plsregress는 처음에 YSYS = Y0*YL로 계산합니다. 하지만 일반적으로[1], plsregressXS'*YS가 하부 삼각 행렬이 되도록 XS의 이전 열을 기준으로 YS의 각 열을 직교화합니다.

모델 피팅이 상수항(절편)을 포함하지 않은 경우 XY는 피팅 과정의 일부로 중심화되지 않습니다.

참고 문헌

[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에 개발됨