การถดถอยกำลังสองน้อยที่สุดบางส่วนใน 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)

ฉันคาดหวังว่าตัวเลขต่อไปนี้aและ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 ถดถอยเพิ่มคะแนนปัจจัย (ซึ่งจะคำนวณเป็นผลิตภัณฑ์ของข้อมูลดิบที่มีภาระเวกเตอร์ (s)) ความแปรปรวนไม่สัมพันธ์ (เท่าที่จะทำใน Canonical Correlation วิเคราะห์) มีภาพรวมที่ดีของplsแพ็คเกจและการถดถอย PLS ในกระดาษ JSSนี้
chl

1
เนื่องจากเวกเตอร์ทั้งหมดอยู่กึ่งกลางและทำให้เป็นมาตรฐานความแปรปรวนร่วมนั้นมีความสัมพันธ์กันใช่ไหม ขออภัยกระดาษ JSS เป็นเทคนิคมากเกินไปสำหรับผู้เริ่มต้น
Stéphane Laurent

โดยทั่วไปแล้วจะมีกระบวนการเงินฝืดแบบอสมมาตร (เกิดจากการถดถอยของการรวมกันเชิงเส้นของบล็อกหนึ่งไปยังการรวมกันเชิงเส้นของอีกบล็อกหนึ่ง) ที่ซับซ้อนกว่าเล็กน้อย ฉันให้รูปภาพแผนผังในการตอบกลับนี้ Hervé Abdi ให้ภาพรวมทั่วไปของการถดถอย PLS และวิธีการสำรวจ Wegelin ของ Partial Least Squares (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.
ตั้งแต่ไม่ขึ้นอยู่กับเราจะต้องเพิ่มy) ลองมาดูกันว่าข้อมูลมีมาตรฐานที่ไหนบ้าง (เริ่มแรกฉันทำผิดพลาดในการปรับขนาดชุดค่าผสมเชิงเส้นของคุณแทนที่จะเป็นและแยกต่างหาก!) ดังนั้น ; แต่และขึ้นอยู่กับยูโดยสรุปแล้วการเพิ่มความสัมพันธ์ระหว่างส่วนประกอบแฝงกับตัวแปรตอบกลับจะไม่ให้ผลลัพธ์ที่เหมือนกันVar(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]x1x2Var(x1)=Var(x2)=1Var(Xu)1u.

ฉันควรขอบคุณArthur Tenenhausที่ชี้ให้ฉันไปในทิศทางที่ถูกต้อง

การใช้เวกเตอร์น้ำหนักหน่วยไม่ จำกัด และบางแพคเกจ ( pls. regressionในplsgenomicsตามรหัสจากแพคเกจก่อนหน้าของ 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 ที่จะให้ ตัวอย่างเช่นการใช้ NIPALS จากแพ็คเกจchemometrics (การใช้งานอีกอย่างที่ฉันรู้ว่ามีอยู่ในแพ็คเกจmixOmics ) เราจะได้รับ:

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

ในทุกกรณีเราสามารถตรวจสอบว่ามีความยาว 1u

ให้คุณเปลี่ยนฟังก์ชั่นของคุณเพื่อปรับให้เหมาะกับการอ่าน

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

และทำให้ปกติuหลังจากนั้น ( u <- u/sqrt(crossprod(u))) คุณควรเข้าใกล้โซลูชันข้างต้น

Sidenote : เนื่องจากเกณฑ์ (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) ฟังก์ชั่นบางส่วนวัตถุประสงค์ของการถดถอยน้อยสี่เหลี่ยม วารสารเคมี, 12, 41–54
  3. Abdi, H (2010) บางส่วนอย่างน้อยสี่เหลี่ยมถดถอยและประมาณการเกี่ยวกับการถดถอยโครงสร้างแฝง (PLS ถดถอย) ความคิดเห็นแบบสหวิทยาการไวลีย์: สถิติการคำนวณ , 2, 97-106
  4. Boulesteix, AL และ Strimmer, K (2007) กำลังสองน้อยที่สุดบางส่วน: เครื่องมืออเนกประสงค์สำหรับการวิเคราะห์ข้อมูลจีโนมมิติสูง การบรรยายสรุปในชีวสารสนเทศศาสตร์ , 8 (1), 32-44

ขอบคุณ chl ฉันจะอ่านคำตอบของคุณเมื่อใดก็ตามที่เป็นไปได้ (และแน่นอน upvote และคลิกเครื่องหมายถูก!)
Stéphane Laurent

ฉันเพิ่งอ่านคำตอบของคุณ - ขอแสดงความยินดีและขอบคุณมาก
Stéphane Laurent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.