Comment gérer les valeurs NA dans la méthode de rétrécissement (Lasso) à l'aide de glmnet

12

J'utilise "glmnet" pour la régression au lasso dans GWAS. Certaines variantes et certains individus ont des valeurs manquantes et il semble que glmnet ne puisse pas gérer les valeurs manquantes.

Existe-t-il une solution à ça? ou existe-t-il un autre package qui peut gérer les valeurs manquantes dans la régression au lasso?

Voici mes 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)**
Esther
la source

Réponses:

12

L'omission de cas avec des valeurs NA pourrait entraîner un biais. Une alternative serait d'effectuer plusieurs imputations des données manquantes, par exemple avec mice, puis de faire un lasso sur chacune des imputations. Lasso retournera probablement différents ensembles de variables sélectionnées pour les imputations, mais vous pouvez examiner la fréquence à laquelle chaque variable est sélectionnée, parmi les ensembles de données imputées, pour identifier vos meilleures variables candidates.

L'imputation, bien sûr, est inapplicable si la probabilité qu'un point de données soit manquant est liée à sa vraie valeur. Donc, avant de procéder à l'imputation, assurez-vous au moins que ce ne soit pas le cas, en fonction de la connaissance du sujet.

EdM
la source
3

Utilisez complete.caseset / ou na.omitpour identifier les lignes qui n'ont pas de NA.

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

glmnet(geno61, pheno61, ...)    
Hong Ooi
la source
1

Je sais que c'est une vieille question - mais je voulais ajouter, au-delà de l'imputation avec des souris, pour obtenir une liste plus fiable des covariables, le lasso pourrait être effectué après avoir empilé tous les jeux de données imputés (comme s'il s'agissait d'un jeu de données) mais pondérer les enregistrements par la fraction des variables manquantes. Voir: Wood et. Al. 2008

am767
la source