uv
maxcov(Xu,Yv).(1)
Ycov(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 menjadiu′u=1u
u=X′y∥X′y∥.
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
maxu′X′Yv,
uX′Y
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
- Tenenhaus, M (1999). L'approche PLS . Revue de Statistique Appliquée , 47 (2), 5-40.
- ter Braak, CJF dan de Jong, S (1993). Fungsi objektif dari regresi kuadrat terkecil parsial . Jurnal Chemometrics , 12, 41–54.
- Abdi, H (2010). Regresi kuadrat terkecil terkecil dan proyeksi pada regresi struktur laten (Regresi PLS) . Wiley Interdisciplinary Ulasan: Statistik Komputasi , 2, 97-106.
- Boulesteix, AL dan Strimmer, K (2007). Parsial kuadrat terkecil: alat serbaguna untuk analisis data genomik dimensi tinggi . Briefing dalam Bioinformatika , 8 (1), 32-44.
plspaket dan regresi PLS dalam makalah JSS ini .