Como apresentar os resultados de um laço usando glmnet?

40

Gostaria de encontrar preditores para uma variável dependente contínua de um conjunto de 30 variáveis ​​independentes. Estou usando a regressão Lasso conforme implementada no pacote glmnet em R. Aqui está um código fictício:

# generate a dummy dataset with 30 predictors (10 useful & 20 useless) 
y=rnorm(100)
x1=matrix(rnorm(100*20),100,20)
x2=matrix(y+rnorm(100*10),100,10)
x=cbind(x1,x2)

# use crossvalidation to find the best lambda
library(glmnet)
cv <- cv.glmnet(x,y,alpha=1,nfolds=10)
l <- cv$lambda.min
alpha=1

# fit the model
fits <- glmnet( x, y, family="gaussian", alpha=alpha, nlambda=100)
res <- predict(fits, s=l, type="coefficients")
res 

Minhas perguntas é como interpretar a saída:

  • É correto dizer que no resultado final todos os preditores que mostram um coeficiente diferente de zero estão relacionados à variável dependente?

  • Seria um relatório suficiente no contexto de uma publicação de revista? Ou é esperado que forneça estatísticas de teste para a significância dos coeficientes? (O contexto é genética humana)

  • É razoável calcular valores de p ou outra estatística de teste para reivindicar significância? Como aquilo seria possível? Um procedimento está implementado no R?

  • Um gráfico de regressão simples (pontos de dados plotados com um ajuste linear) para cada preditor seria uma maneira adequada de visualizar esses dados?

  • Talvez alguém possa fornecer alguns exemplos fáceis de artigos publicados mostrando o uso do Lasso no contexto de alguns dados reais e como relatar isso em um periódico?

brincadeira
fonte
Por que você executa o glmnet na seção "ajustar o modelo"? Você não poderia usar também cvpara a etapa de previsão?
bourbaki4481472

Respostas:

22

Meu entendimento é que você não pode necessariamente dizer muito sobre quais variáveis ​​são "importantes" ou têm efeitos "reais" com base no fato de seus coeficientes serem diferentes de zero. Para dar um exemplo extremo, se você tiver dois preditores perfeitamente colineares, o laço escolherá um deles essencialmente aleatoriamente para obter o peso total e o outro terá peso zero.

Este artigo , que inclui um dos autores do glmnet, apresenta algumas análises baseadas no glmnet (veja especialmente: Introdução, Seções 2.3 e 4.3 e Tabelas 4 e 5). Olhando através, parece que eles não calcularam o valor P diretamente do modelo glmnet. Eles calcularam dois tipos diferentes de valores-P usando outros métodos, mas parece que eles não confiam totalmente em nenhum deles.

Não tenho 100% de certeza do que você está sugerindo em termos de métodos de plotagem, mas acho que parece razoável.

Espero que ajude.

David J. Harris
fonte
11
Olá David! Obrigado pela resposta. Alguma coisa seria contrária ao uso do LASSO para seleção de preditores com coeficientes diferentes de zero e, em seguida, usaria apenas esses preditores em um modelo de regressão linear para obter valores de p em relação à significância dos preditores. Por exemplo, como neste trabalho: ncbi.nlm.nih.gov/pmc/articles/PMC3412288
jokel
4
@jokel Acho que o que você está sugerindo é um caso especial do "laço relaxado", e pode funcionar muito bem para alguns propósitos. Não tenho certeza se você pode confiar nos valores-p que obteria com o procedimento descrito, pois sua estatística F ou estatística t não "saberá" sobre a etapa de seleção de variáveis ​​que você executou e sua A taxa de erro do tipo I será inflada. Uma maneira de pensar sobre isso: qual seria o número correto de graus de liberdade para uma estatística F? O número total de variáveis ​​na regressão LASSO? O número de variáveis ​​na regressão secundária? Algo no meio?
23412 David J. Harris
Verdadeiro - então isso também não parece ser uma abordagem válida. Você teria alguma outra idéia de como encontrar preditores significativos de 300 variáveis ​​independentes (n >> p como no exemplo acima)? Então, no final, eu seria capaz de afirmar: "o preditor X está significativamente relacionado à variável dependente Y"?
Jokel
Minha resposta para tudo onde eu não sei como fazer os cálculos é fazer a randomização. Uma possibilidade seria reamostrar as linhas do seu conjunto de dados (por exemplo, com inicialização) e executar as análises do LASSO repetidamente. Quanto mais freqüentemente a variável é incluída no modelo, maior a probabilidade de ela ser importante. Uma opção ainda melhor pode envolver amostragem de linhas e colunas, o que pode ajudar a evitar efeitos de "mascaramento". Breiman sugere algo em um sentido semelhante neste [pdf] (próximo à Figura 2) ( faculty.smu.edu/tfomby/eco5385/lecture/… ).
David J. Harris
9

Eu só queria salientar que há trabalhos recentes tentando desenvolver uma estatística de teste especificamente para o LASSO, que leva em consideração a seleção de recursos que está sendo executada:

Um teste de significância para o laço. Richard Lockhart, Jonathan Taylor, Ryan J. Tibshirani, Robert Tibshirani. http://arxiv.org/abs/1301.7161

No entanto, ainda não vi isso ser usado no trabalho aplicado, enquanto o bootstrapping certamente é usado.

conhece
fonte
0

No que diz respeito à inferência para os modelos LASSO ou rede elástica, consulte os pacotes CRAN selectivoInference e hdi , eles fazem exatamente isso, considerando a etapa de seleção de variáveis!

Tom Wenseleers
fonte