R의 부분 최소 제곱 회귀 : 표준화 된 데이터의 PLS가 상관을 최대화하는 것과 다른 이유는 무엇입니까?


12

나는 부분 최소 제곱 (PLS)에서 아주 새로운 오전 나는 R 함수의 출력을 이해하려고 노력 plsr()에서 pls패키지를. 데이터를 시뮬레이션하고 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)

나는 다음과 같은 숫자 ab를 기대했다.b

> ( 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

숫자 오류입니까, 아니면 a 의 특성을 오해 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 

ab

YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~t1Y


2
PLS 회귀는 상관 관계가 아닌 (정규 상관 분석에서와 같이 ) 인자 점수 (부하 벡터 공분산을 갖는 미가공 데이터의 곱으로 계산 됨)를 최대화 합니다. 이 JSS 논문 에는 패키지와 PLS 회귀에 대한 좋은 개요가 있습니다. pls
chl

1
모든 벡터가 중심에 있고 정규화 되었기 때문에 공분산은 상관 관계입니다. 죄송하지만 JSS 논문은 초보자에게는 너무 기술적 인 내용입니다.
Stéphane Laurent

일반적으로 비대칭 디플레이션 프로세스 (한 블록의 선형 조합이 다른 블록의 선형 조합으로 회귀 한 결과)가 약간 복잡합니다. 나는 이 응답 에서 개략적 인 그림을 제공했다 . Hervé Abdi는 PLS 회귀에 대한 일반적인 개요 를 제공했으며 Wegelin의 부분 최소 제곱 법 (PLS) 방법 도 매우 유용합니다. 이 시점에서, 나는 아마도 그 모든 의견을 답변으로 변환해야 할 것이다.
chl

YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~

a2+b21?coef.mvr

답변:


17

uv

maxcov(Xu,Yv).(1)
Y
cov(Xu,y)Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.u=1.
이후 에 의존하지 않는 , 우리는 극대화해야 . 데이터가 개별적으로 표준화되는 곳을 고려해 봅시다 (처음에는 및 대신 선형 조합의 스케일을 실수로 잘못했습니다 !). ; 그러나 이며 의존합니다 . 결론적으로, 잠재 성분과 반응 변수 사이의 상관 관계를 최대화하면 동일한 결과를 얻을 수 없습니다Var(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]x1x2Var(x1)=Var(x2)=1Var(Xu)1u.

나는 올바른 방향으로 나를 지적한 Arthur Tenenhaus 에게 감사해야합니다 .

단위 중량 벡터를 사용하는 것은 제한하지 않고 (일부 패키지 pls. regressionplsgenomics Wehrens의 이전 패키지의 코드를 기반으로이 pls.pcr요청 된 경우), (하지만 여전히 규범 1의 잠재 요소와 함께) 표준화가 가중 벡터를 반환합니다. 그러나 대부분의 PLS 패키지는 사용 된 패키지 , 특히 SIMPLS 또는 NIPALS 알고리즘을 구현하는 패키지를 포함하여 표준화 된 를 반환 합니다. Barry M. Wise의 프레젠테이션, 부분 최소 제곱 (PLS) 회귀 속성 및 알고리즘 간의 차이점 에서 두 가지 접근 방식에 대한 좋은 개요를 찾았 지만 화학 측정법은u비 네트는 또한 좋은 토론을 제공합니다 (26-29 페이지). 센터링 및 / 또는 스케일링이 내부적으로 처리되기 때문에 대부분의 PLS 루틴 (적어도 R에서 아는 것)이 표준화되지 않은 변수를 제공한다고 가정한다는 사실도 특히 중요합니다 (예 : 교차 검증을 수행 할 때 특히 중요 함) ).

제약 조건 주어지면, 벡터 는uu=1u

u=XyXy.

약간의 시뮬레이션을 사용하면 다음과 같이 얻을 수 있습니다.

set.seed(101)
X <- replicate(2, rnorm(100))
y <- 0.6*X[,1] + 0.7*X[,2] + rnorm(100)
X <- apply(X, 2, scale)
y <- scale(y)

# NIPALS (PLS1)
u <- crossprod(X, y)
u <- u/drop(sqrt(crossprod(u)))         # X weights
t  <- X%*%u
p <- crossprod(X, t)/drop(crossprod(t)) # X loadings

위의 결과 ( u=[0.5792043;0.8151824]특히)를 R 패키지가 제공 하는 것과 비교할 수 있습니다 . 예를 들어, chemometrics 패키지 ( mixOmics 패키지 에서 사용 가능한 다른 구현 ) 에서 NIPALS를 사용 하면 다음을 얻을 수 있습니다.

library(chemometrics)
pls1_nipals(X, y, 1)$W  # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P  # X loadings

plsr기본 커널 PLS 알고리즘을 사용 하여 비슷한 결과를 얻을 수 있습니다 .

> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824

모든 경우에 의 길이가 1인지 확인할 수 있습니다 .u

읽기 기능으로 최적화하도록 기능을 변경 한 경우

f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))

u나중에 정규화 ( u <- u/sqrt(crossprod(u)))하면 위의 솔루션에 더 가깝습니다.

참고 : (1) 기준은 해당하므로 는 가장 큰 고유 값에 해당하는 의 SVD에서 왼쪽 특이 벡터로 찾을 수 있습니다 .

maxuXYv,
uXY
svd(crossprod(X, y))$u

보다 일반적인 경우 (PLS2)에서, 위를 요약하는 방법은 첫 번째 PLS 표준 벡터가 양방향으로 X와 Y의 공분산 행렬의 가장 근사치라고 말하는 것입니다.

참고 문헌

  1. Tenenhaus, M (1999). L' approche PLS . 통계 응용 프로그램 Revue de Statistique Appliquée , 47 (2), 5-40.
  2. ter Braak, CJF 및 de Jong, S (1993). 부분 최소 제곱 회귀의 목적 함수입니다 . Chemometrics의 전표 , 12, 41–54.
  3. Abdi, H (2010). 잠재 구조 회귀 (PLS 회귀)에 대한 부분 최소 제곱 회귀 및 투영 . 와일리 학제 간 검토 : 전산 통계 , 2, 97-106.
  4. Boulesteix, AL 및 Strimmer, K (2007). 부분 최소 제곱 : 고차원 게놈 데이터 분석을위한 다목적 도구 . 생물 정보학 브리핑 , 8 (1), 32-44.

고마워 chl. 가능할 때마다 답을 읽겠습니다 (확실히 투표하고 확인 표시를 클릭하십시오!)
Stéphane Laurent

나는 당신의 대답을 읽었습니다. 축하합니다. 대단히 감사합니다.
Stéphane Laurent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.