Regressão linear multivariada com laço em r

9

Estou tentando criar um modelo reduzido para prever muitas variáveis ​​dependentes (DV) (~ 450) que são altamente correlacionadas.

Minhas variáveis ​​independentes (IV) também são numerosas (~ 2000) e altamente correlacionadas.

Se eu usar o laço para selecionar um modelo reduzido para cada saída individualmente, não tenho a garantia de obter o mesmo subconjunto de variáveis ​​independentes que faço um loop sobre cada variável dependente.

Existe uma regressão linear multivariada que usa o laço em R?

Este não é um laço de grupo. grupo laço agrupa o IV. Eu quero regressão linear multivariada (o que significa que o DV é uma matriz, não um vetor de escalares), que também implementa o laço. (Nota: como NRH aponta, isso não é verdade. Laço de grupo é um termo geral que inclui estratégias que agrupam o IV, mas também inclui estratégias que agrupam outros parâmetros, como o DV)

Eu encontrei este artigo que entra em algo chamado Sparse Overlapping Sets Lasso

Aqui está um código que faz regressão linear multivariada

> dim(target)
[1] 6060  441
> dim(dictionary)
[1] 6060 2030
> fit = lm(target~dictionary)

Aqui está um código que faz um laço em um único DV

> fit = glmnet(dictionary, target[,1])

E é isso que eu gostaria de fazer:

> fit = glmnet(dictionary, target)
Error in weighted.mean.default(y, weights) : 
  'x' and 'w' must have the same length

Selecionando recursos que atendem a TODOS os alvos de uma só vez

kmace
fonte
Não está claro o que você está perguntando, exceto no último ponto. O pacote é chamado glmnete possui uma vinheta completa.
generic_user
O que você quer dizer com "cada vez"? Você está executando isso em subconjuntos de seus dados? Validação cruzada? Amostras diferentes?
shadowtalker
Por cada vez, quero dizer que eu estou executando atualmente glmnet em uma única variável dependente de cada vez, e looping por todos eles
kmace
Ou em outras palavras o meu y é sempre um vetor, não uma matriz
kmace
11
@ Firebug absolutamente. Não sabia que o termo era mais geral. Desculpe-me por isso
kmace

Respostas:

11

Para respostas multivariadas (número de variáveis ​​dependentes maiores que 1), você precisa family = "mgaussian"na chamada de glmnet.

O pacote lsgl é uma alternativa, que fornece uma penalidade mais flexível.

k

j=1pβj2

βj=(βj1,,βjk)Tjglmnet

O primeiro [ family = "mgaussian"] permite que um modelo gaussiano de múltiplas respostas seja adequado, usando uma penalidade de "grupo-laço" nos coeficientes de cada variável. Amarrar as respostas dessa maneira é chamado aprendizado "multitarefa" em alguns domínios.

Essa penalidade é um exemplo de penalidade de laço em grupo, que agrupa parâmetros para as diferentes respostas associadas ao mesmo preditor. Isso resulta na seleção dos mesmos preditores em todas as respostas para um determinado valor do parâmetro de ajuste.

O pacote lsgl implementa penalidades esparsas de laço de grupo no formato que e são determinados pesos escolhidos para equilibrar as contribuições dos diferentes termos. O padrão é e . O parâmetro é um parâmetro de ajuste. Com (e ) a penalidade é equivalente à penalidade usada com . Com (e

αj=1pl=1kξjl|βjl|+(1α)j=1pγjβj2

ξjlγjξjl=1γj=kα[0,1]α=0γj=1glmnetfamily = "mgaussian"α=1ξjl=1) a penalidade dá um laço comum. A implementação lsgl também permite um agrupamento adicional dos preditores.

Uma observação sobre o laço do grupo. O termo laço de grupo é frequentemente associado a um agrupamento de preditores. No entanto, de um ponto de vista mais geral, o laço de grupo é simplesmente um agrupamento de parâmetros na penalidade. O agrupamento usado por glmnetcom family = "mgaussian"é um agrupamento de parâmetros nas respostas. O efeito desse agrupamento é acoplar a estimativa dos parâmetros entre as respostas, o que acaba sendo uma boa idéia, se todas as respostas puderem ser previstas a partir do mesmo conjunto de preditores. A idéia geral de acoplar vários problemas de aprendizado, que se espera que compartilhem alguma estrutura, é conhecida como aprendizado de múltiplas tarefas .

NRH
fonte