Как обрабатывать значения 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, а затем выполнить лассо для каждого из вменений. Лассо, вероятно, будет возвращать различные наборы выбранных переменных для вменений, но вы могли бы проверить, как часто выбирается каждая переменная среди вмененных наборов данных, чтобы определить ваши наилучшие переменные-кандидаты.

Импутация, конечно, неприменима, если вероятность пропущенной точки данных связана с ее истинным значением. Поэтому, прежде чем делать вменение, убедитесь, что, по крайней мере, это не так, основываясь на знании предмета.


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.