Ben kısmi en küçük kareler (PLS) çok yeni ve R işlevin çıktısını anlamaya çalışma plsr()
içinde pls
paketin. Verileri simüle edip PLS'yi çalıştıralım:
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şağıdaki ve sayılarını bekliyordum
> ( 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
maksimize etmek için hesaplanır
> cor(y, a*xx1+b*xx2)
[,1]
[1,] 0.9981291
ancak durum tam olarak böyle değildir:
> 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
Sayısal bir hata mı yoksa ve yapısını yanlış mı anlıyorum ?b
Ayrıca bu katsayıların neler olduğunu bilmek istiyorum:
> p$coef
, , 1 comps
yy
xx1 0.6672848
xx2 0.6368604
EDIT : Şimdi ne p$coef
olduğunu görüyorum :
> 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
Sanırım ve doğası hakkında haklıyım .b
EDIT: @chl tarafından verilen yorumların ışığında sorumun yeterince açık olmadığını hissediyorum, bu yüzden daha fazla ayrıntı vereyim. Örneğimde orada bir vektör tepkilerinin ve iki sütun matrisi belirleyicileri ve normalize sürümü kullanmak ve ve normalize versiyonu ve (merkezlenmiş ve standart sapma ile bölünür). İlk PLS bileşenininX ˜ Y Y ˜ X X t 1 olan ile bir ve bİç çarpım, bir maksimal değere sahip olmak amacıyla seçilen . Dolayısıyla t 1 ve Y arasındaki korelasyonu en üst düzeye çıkarmakla eşdeğerdir , değil mi?
?coef.mvr
pls