Como lidar com valores de NA no método de encolhimento (Lasso) usando glmnet


12

Estou usando o "glmnet" para regressão do laço no GWAS. Algumas variantes e indivíduos têm valores ausentes e parece que o glmnet não pode lidar com valores ausentes.

Existe alguma solução para isso? ou existe outro pacote que possa lidar com valores ausentes na regressão do laço?

Aqui estão meus scripts.

> library(glmnet)
> geno6<-read.table("c6sigCnt.geno")
> geno6[1:10,1:10] #genotype file (0,1,2 for minor allele counts)

   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1   1  1  1  1  1  1  1  1  1   0
2   NA NA 1  1  1  1  1  1  1   1
3   0  0  0  0  0  0  0  0  0   2
4   0  1  0  0  0  0  0  0  0   1
5   1  0  1  1  1  1  1  1  1   1
6   0  2  0  0  0  0  0  0  0   0
7   0  0  0  0  0  0  0  0  0   2
8   0 NA  0  0  0  0  0  0  0   0
9   1  0  1  1  1  1  1  1  1   1
10  1  1  1  1  1  1  1  1  1   0

> pheno6<-read.table("c6sigCnt.pheno")
> head(pheno6) #case-control (1,2 for affection status)

  V1
1  2
2  2
3  2
4  2
5  2

> geno61<-as.matrix(geno6) 
> pheno61<-pheno6[,1] 
> fit_lasso <- glmnet(geno61,pheno61,family="binomial",alpha=1,nlambda=100) 

**Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 
  NA/NaN/Inf in foreign function call (arg 5)**

Respostas:


12

A omissão de casos com valores de NA pode levar a viés. Uma alternativa seria executar várias imputações dos dados ausentes, por exemplo mice, com , e depois fazer um laço em cada uma das imputações. O Lasso provavelmente retornará conjuntos diferentes de variáveis ​​selecionadas para as imputações, mas você pode examinar com que frequência cada variável é selecionada, entre os conjuntos de dados imputados, para identificar suas melhores variáveis ​​candidatas.

A imputação, é claro, é inaplicável se a probabilidade de falta de um ponto de dados estiver relacionada ao seu verdadeiro valor. Portanto, antes de imputar, certifique-se de que pelo menos seja improvável, com base no conhecimento do assunto.


3

Use complete.casese / ou na.omitpara identificar as linhas que não possuem NAs.

cc <- complete.cases(geno6) & complete.cases(pheno6)
geno61 <- as.matrix(geno6[cc, ])
pheno61 <- pheno6[cc, 1]

glmnet(geno61, pheno61, ...)    

1

Eu sei que essa é uma pergunta antiga - mas eu queria adicionar, além da imputação com ratos, para obter uma lista mais confiável de covariáveis, o laço poderia ser executado após o empilhamento de todos os conjuntos de dados imputados (como se fosse um conjunto de dados), mas ponderar os registros pela fração de variáveis ​​ausentes. Ver: Wood et. al. 2008

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.