Regresi kuadrat terkecil parsial dalam R: mengapa PLS pada data terstandarisasi tidak setara dengan memaksimalkan korelasi?

12

Saya sangat baru di parsial kuadrat terkecil (PLS) dan saya mencoba memahami output dari fungsi R plsr()dalam plspaket. Mari kita mensimulasikan data dan menjalankan 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)

Saya mengharapkan bahwa angka-angka berikut danab

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

dihitung untuk memaksimalkan

> cor(y, a*xx1+b*xx2)
          [,1]
[1,] 0.9981291

tapi ini tidak persis seperti ini:

> 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

Apakah ini kesalahan numerik, atau apakah saya salah memahami sifat dan ?ab

Saya juga ingin tahu apa koefisien-koefisien ini:

> p$coef
, , 1 comps

           yy
xx1 0.6672848
xx2 0.6368604 

EDIT : Sekarang saya melihat apa p$coefitu:

> 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 

Jadi saya pikir saya benar tentang sifat dan .bab

EDIT: Mengingat komentar yang diberikan oleh @chl saya merasa pertanyaan saya tidak cukup jelas, jadi izinkan saya memberikan lebih banyak detail. Dalam contoh saya ada vektor tanggapan dan matriks dua kolom dari prediktor dan saya menggunakan versi normalisasi dari dan versi normal dari (terpusat dan dibagi dengan standar deviasi). Definisi komponen PLS pertama adalah dengan dan dipilih agar memiliki nilai maksimal produk dalam .X ~ Y Y ~ X X t 1 t 1 = a ~ X 1 + b ~ X 2 a b t 1 , ~ Yt 1 YYXY~YX~Xt1t1=aX~1+bX~2abt1,Y~Karenanya itu setara dengan memaksimalkan korelasi antara dan , bukan?t1Y

Stéphane Laurent
sumber
2
PLS regresi memaksimalkan nilai faktor (yang dihitung sebagai produk dari data mentah dengan beban vektor (s)) kovarians , tidak korelasi (seperti yang dilakukan di Canonical Correlation Analysis). Ada gambaran umum yang baik tentang plspaket dan regresi PLS dalam makalah JSS ini .
chl
1
Karena semua vektor berpusat dan dinormalisasi, kovarians adalah korelasi, bukan? Maaf tapi makalah JSS terlalu teknis untuk pemula.
Stéphane Laurent
Secara umum, ada proses deflasi asimetris (dihasilkan dari regresi kombinasi linear dari satu blok ke kombinasi linear yang lain) yang sedikit rumit. Saya memberikan beberapa gambar skematis dalam respons ini . Hervé Abdi memberikan gambaran umum tentang regresi PLS, dan Metode Survei Partial Least Squares (PLS) Wegelin juga cukup berguna. Pada titik ini, saya mungkin harus mengonversi semua komentar itu menjadi jawaban ...
chl
YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~
a2+b21?coef.mvr

Jawaban:

17

uv

maxcov(Xu,Yv).(1)
Y
cov(Xu,y)Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.u=1.
Karena tidak bergantung pada , kita harus memaksimalkan . Mari kita pertimbangkan , di mana data distandarisasi secara individual (saya awalnya membuat kesalahan penskalaan kombinasi linear Anda bukan dan secara terpisah!), Sehingga ; Namun, dan tergantung pada . Sebagai kesimpulan, memaksimalkan korelasi antara komponen laten dan variabel respons tidak akan menghasilkan hasil yang samaVar(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]x1x2Var(x1)=Var(x2)=1Var(Xu)1u.

Saya harus berterima kasih kepada Arthur Tenenhaus yang menunjuk saya ke arah yang benar.

Menggunakan vektor bobot unit tidak membatasi dan beberapa paket ( pls. regressiondalam bentuk plsgenomik , berdasarkan kode dari paket Wehrens sebelumnya pls.pcr) akan mengembalikan vektor bobot yang tidak standar (tetapi dengan komponen laten masih dalam norma 1), jika diminta. Tetapi sebagian besar paket PLS akan mengembalikan terstandarisasi , termasuk yang Anda gunakan, terutama yang mengimplementasikan algoritma SIMPLS atau NIPALS; Saya menemukan ikhtisar yang baik dari kedua pendekatan dalam presentasi Barry M. Wise, Properties of Partial Least Squares (PLS) Regresi, dan perbedaan antara Algoritma , tetapi chemometricsusketsa menawarkan diskusi yang bagus juga (hlm. 26-29). Yang juga sangat penting adalah kenyataan bahwa sebagian besar rutinitas PLS (setidaknya yang saya tahu di R) mengasumsikan bahwa Anda memberikan variabel yang tidak standar karena pemusatan dan / atau penskalaan ditangani secara internal (ini terutama penting ketika melakukan validasi silang, misalnya ).

Dengan batasan , vektor ditemukan menjadiuu=1u

u=XyXy.

Menggunakan sedikit simulasi, dapat diperoleh sebagai berikut:

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

Anda dapat membandingkan hasil di atas ( u=[0.5792043;0.8151824], khususnya) dengan apa yang akan diberikan paket R. Misalnya, menggunakan NIPALS dari paket chemometrics (implementasi lain yang saya tahu tersedia dalam paket mixOmics ), kita akan mendapatkan:

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

Hasil serupa akan diperoleh dengan plsrdan algoritma PLS kernel default:

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

Dalam semua kasus, kita dapat memeriksa bahwa memiliki panjang 1.u

Asalkan Anda mengubah fungsi Anda untuk mengoptimalkan ke yang berbunyi

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

dan menormalkan usetelah itu ( u <- u/sqrt(crossprod(u))), Anda harus lebih dekat dengan solusi di atas.

Sidenote : Karena kriteria (1) setara dengan dapat ditemukan sebagai vektor singular kiri dari SVD sesuai dengan nilai eigen terbesar:u X Y

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

Dalam kasus yang lebih umum (PLS2), cara untuk meringkas di atas adalah dengan mengatakan bahwa vektor kanonik PLS pertama adalah perkiraan terbaik dari matriks kovarians X dan Y di kedua arah.

Referensi

  1. Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
  2. ter Braak, CJF dan de Jong, S (1993). Fungsi objektif dari regresi kuadrat terkecil parsial . Jurnal Chemometrics , 12, 41–54.
  3. Abdi, H (2010). Regresi kuadrat terkecil terkecil dan proyeksi pada regresi struktur laten (Regresi PLS) . Wiley Interdisciplinary Ulasan: Statistik Komputasi , 2, 97-106.
  4. Boulesteix, AL dan Strimmer, K (2007). Parsial kuadrat terkecil: alat serbaguna untuk analisis data genomik dimensi tinggi . Briefing dalam Bioinformatika , 8 (1), 32-44.
chl
sumber
Terima kasih chl. Saya akan membaca jawaban Anda kapan pun memungkinkan (dan tentu saja mengungguli dan mengklik tanda centang!)
Stéphane Laurent
Saya baru saja membaca jawaban Anda - selamat dan terima kasih banyak.
Stéphane Laurent