Як обробити значення NA в методі усадки (Лассо) за допомогою glmnet


12

Я використовую "glmnet" для регресії ласо в GWAS. Деякі варіанти та особи мають відсутні значення, і, здається, glmnet не може обробити пропущені значення.

Чи є для цього рішення? чи є інший пакет, який може обробляти пропущені значення в регресії ласо?

Ось мої сценарії.

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

Відповіді:


12

Опущення випадків із значеннями NA може призвести до зміщення. Альтернативою може бути виконання декількох імпутацій відсутніх даних, наприклад, з mice, а потім зроблено ласо для кожної з імпутацій. Lasso, ймовірно, повертає різні набори вибраних змінних для імпутацій, але ви можете вивчити, як часто кожна змінна вибирається серед імпультованих наборів даних, щоб ідентифікувати ваші кращі кандидатські змінні.

Звичайно, імпутація не застосовується, якщо ймовірність відсутності точки даних пов'язана з її справжнім значенням. Тому перед тим, як зробити імпутацію, переконайтесь, що принаймні це не буде так, виходячи з знань предмета.


3

Використовуйте complete.casesта / або na.omitідентифікуйте ті рядки, у яких немає NA.

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

glmnet(geno61, pheno61, ...)    

1

Я знаю, що це старе питання - але я хотів додати, крім імпутації мишами, отримати більш надійний список коваріатів, ласо можна було виконати після складання всіх імпутованих наборів даних (як би це 1 набір даних), але зважте записи за часткою відсутніх змінних. Див .: Wood et. ін. 2008 рік

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.