Ao usar o glmnet, como relatar significância do valor-p para reivindicar significância dos preditores?


9

Eu tenho um grande conjunto de preditores (mais de 43.000) para prever uma variável dependente que pode assumir 2 valores (0 ou 1). O número de observações é superior a 45.000. A maioria dos preditores são unigramas, bigramas e trigramas de palavras, portanto há um alto grau de colinearidade entre eles. Há muita esparsidade no meu conjunto de dados também. Estou usando a regressão logística do pacote glmnet, que funciona para o tipo de conjunto de dados que tenho. Meu problema é como posso relatar a significância do valor-p dos preditores. Eu recebo o coeficiente beta, mas existe uma maneira de afirmar que os coeficientes beta são estatisticamente significativos?

Aqui está o meu código:

library('glmnet')
data <- read.csv('datafile.csv', header=T)
mat = as.matrix(data)
X = mat[,1:ncol(mat)-1] 
y = mat[,ncol(mat)]
fit <- cv.glmnet(X,y, family="binomial")

Outra pergunta é: estou usando a penalidade padrão alfa = 1, laço que causa o problema adicional de que, se dois preditores forem colineares, o laço escolherá um deles aleatoriamente e atribuirá zero peso beta ao outro. Eu também tentei com penalidade de crista (alfa = 0), que atribui coeficientes semelhantes a variáveis ​​altamente correlacionadas, em vez de selecionar uma delas. No entanto, o modelo com penalidade no laço me dá um desvio muito menor do que o modelo com penalidade no cume. Existe alguma outra maneira de relatar os dois preditores altamente colineares?


Parece-me que isso é mais um problema de classificação multivariada, em oposição a ser um modelo linear.
ADP

obrigado @ADP, qual será o seu modelo sugerido para esse tipo de situação?
tan

Respostas:


8

Há um novo artigo, Um teste de significância para o laço , incluindo o inventor do LASSO como autor que relata resultados sobre esse problema. Como é uma área de pesquisa relativamente nova, as referências no artigo abrangem muito do que é conhecido até o momento.

Quanto à sua segunda pergunta, você já tentou ? Freqüentemente, existe um valor nessa faixa intermediária que atinge um bom compromisso. Isso é chamado de regularização da Elastic Net . Como você está usando o cv.glmnet, provavelmente desejará validar cruzadamente uma grade de valores .α(0 0,1)(λ,α)


2

A inferência pós-seleção é um tópico muito ativo da pesquisa estatística. Na minha opinião, um problema com o método descrito em Um teste de significância para o laço é que pressupostos rigorosos são necessários (reproduzidos aqui ):

  1. O modelo linear está correto.
  2. A variação é constante.
  3. Os erros têm uma distribuição normal.
  4. O vetor de parâmetro é escasso.
  5. A matriz de design tem colinearidade muito fraca. Isso geralmente é afirmado na forma de incoerência, restrições de valores próprios ou suposições de incompatibilidade.

A abordagem que eu achei útil - desde que haja dados suficientes disponíveis - é a divisão de dados. A idéia de divisão de dados remonta a pelo menos Moran (1974) e simplesmente implica dividir os dados aleatoriamente em dois conjuntos, fazendo escolhas de modelagem no primeiro conjunto e fazendo inferência no segundo conjunto.

n>p

Você menciona que as covariáveis ​​são uni, bi- e tri-gramas, portanto são altamente colineares. Portanto, nesse caso, aplicar o Lasso no primeiro estágio também violaria as suposições - em particular, o item 5 acima. Portanto, para tornar essa abordagem genuinamente útil e teoricamente correta, você precisará fazer algum tipo de triagem pré-Lasso para colinearidade.


0

Talvez dê uma olhada no pacote CRAN hdi , que fornece inferência para modelos de alta dimensão e deve fazer o truque ... Os métodos completos são um pouco entediantes de repetir aqui (existem vários, e ainda é uma área bastante ativa de pesquisa), mas estão bem descritas neste artigo: http://projecteuclid.org/euclid.ss/1449670857 (se você publicar publicamente alguns dados de teste ou simular alguns, também posso dar um exemplo concreto)


Você não pode fazer isso e obter valores de p significativos. Eles não consideram a variação na sua seleção de variáveis.
Matthew Drury

Editado minha resposta - pacote hdi que cito deve estar OK, e leva em conta a variação causada por sua seleção variável ...
Tom Wenseleers
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.