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)**

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.


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, ...)    

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.