Eu sou muito novo em mínimos quadrados parciais (PLS) e tento entender a saída da função R plsr()
no pls
pacote. Vamos simular dados e executar o 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)
Eu estava esperando que os seguintes números e
> ( 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
são calculados para maximizar
> cor(y, a*xx1+b*xx2)
[,1]
[1,] 0.9981291
mas este não é exatamente o caso:
> 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
É um erro numérico, ou eu não compreendem a natureza de e ?
Eu também gostaria de saber quais são esses coeficientes:
> p$coef
, , 1 comps
yy
xx1 0.6672848
xx2 0.6368604
EDIT : Agora eu vejo o que 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
Então eu acho que estou certo sobre a natureza de e .
EDIT: Tendo em vista os comentários feitos por @chl, sinto que minha pergunta não é clara o suficiente, então deixe-me fornecer mais detalhes. Na minha exemplo, existe um vector de de respostas e uma matriz de duas colunas X de preditores e uso a versão normalizada ~ Y de Y e a versão normalizada ~ X de X (centrado e dividido pelo desvio padrão). A definição do primeiro componente PLS t 1 é t 1 = a ˜ X 1 + b ˜ X 2 com a e bescolhido de modo a ter um valor máximo do produto interno . Portanto, é equivalente a maximizar a correlação entre t 1 e Y , não é?
fonte
pls
pacote e da regressão PLS neste documento JSS .?coef.mvr
Respostas:
A regressão PLS depende de algoritmos iterativos (por exemplo, NIPALS, SIMPLS). Sua descrição das idéias principais está correta: buscamos um (PLS1, uma variável de resposta / múltiplos preditores) ou dois (PLS2, com modos diferentes, variáveis de resposta múltipla / múltiplos preditores) vetor (es) de pesos, (e v ) digamos, para formar combinações lineares da (s) variável (s) original (ais), de modo que a covariância entre Xu e Y (Yv, para PLS2) seja máxima. Vamos nos concentrar na extração do primeiro par de pesos associado ao primeiro componente. Formalmente, o critério para otimizar lê max cov ( X u , Yu v
No seu caso, Y é univariada, portanto, eleva-se a maximizar
cov ( X u , y ) ≡ Var ( X u ) 1 / 2 x CR ( X u , y ) × Var ( Y ) 1 / 2
X=[x_1;x_2]
Eu deveria agradecer Arthur Tenenhaus que me indicou a direção certa.
O uso de vetores de peso unitário não é restritivo e alguns pacotes (você , incluindo o que você usou, principalmente aqueles que implementam o algoritmo SIMPLS ou NIPALS; Encontrei uma boa visão geral de ambas as abordagens na apresentação de Barry M. Wise, Propriedades da regressão de mínimos quadrados parciais (PLS) e diferenças entre algoritmos , mas a quimiometria.a vinheta também oferece uma boa discussão (págs. 26-29). Também é de particular importância o fato de que a maioria das rotinas PLS (pelo menos a que conheço em R) presume que você forneça variáveis não padronizadas porque a centralização e / ou o dimensionamento são tratados internamente (isso é particularmente importante ao realizar a validação cruzada, por exemplo )
pls. regression
em plsgenomics , com base no código do pacote anterior de Wehrenspls.pcr
) retornarão vetores de peso não padronizados (mas com componentes latentes ainda da norma 1), se solicitado. Mas a maioria dos pacotes PLS retornará u padronizadosDada a restrição , o vetor u é u = X ′ yvocê′u=1 u
Usando um pouco de simulação, ele pode ser obtido da seguinte maneira:
Você pode comparar os resultados acima (
u=[0.5792043;0.8151824]
em particular) com o que os pacotes R dariam. Por exemplo, usando NIPALS do pacote quimiométrico (outra implementação que eu sei que está disponível no pacote mixOmics ), obteríamos :Resultados semelhantes seriam obtidos com
plsr
o algoritmo PLS do kernel padrão:Desde que você altere sua função para otimizar para uma que leia
e normalizar
u
depois (u <- u/sqrt(crossprod(u))
), você deve estar mais perto da solução acima.No caso mais geral (PLS2), uma maneira de resumir o exposto acima é dizer que os primeiros vetores canônicos do PLS são a melhor aproximação da matriz de covariância de X e Y em ambas as direções.
Referências
fonte