Cara menangani nilai NA dalam metode shrinkage (Lasso) menggunakan glmnet

12

Saya menggunakan "glmnet" untuk regresi laso di GWAS. Beberapa varian dan individu memiliki nilai yang hilang dan tampaknya glmnet tidak dapat menangani nilai yang hilang.

Apakah ada solusi untuk ini? atau apakah ada paket lain yang dapat menangani nilai yang hilang dalam regresi laso?

Ini skrip saya.

> 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
sumber

Jawaban:

12

Menghilangkan kasus dengan nilai NA dapat menyebabkan bias. Alternatifnya adalah dengan melakukan beberapa imputasi dari data yang hilang, misalnya dengan mice, dan kemudian melakukan laso pada masing-masing imputasi. Lasso mungkin akan mengembalikan set variabel yang berbeda untuk imputasi, tetapi Anda dapat memeriksa seberapa sering setiap variabel dipilih, di antara set data yang dimasukkan, untuk mengidentifikasi variabel kandidat terbaik Anda.

Imputasi, tentu saja, tidak dapat diterapkan jika probabilitas suatu titik data hilang terkait dengan nilai sebenarnya. Jadi sebelum melakukan imputasi pastikan setidaknya itu tidak mungkin terjadi, berdasarkan pengetahuan tentang materi pelajaran.

EdM
sumber
3

Gunakan complete.casesdan / atau na.omituntuk mengidentifikasi baris-baris yang tidak memiliki NAs.

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

glmnet(geno61, pheno61, ...)    
Hong Ooi
sumber
1

Saya tahu ini adalah pertanyaan lama - tetapi saya ingin menambahkan, di luar imputasi dengan tikus, untuk mendapatkan daftar kovariat yang lebih andal, laso dapat dilakukan setelah menumpuk semua dataset yang terkait (seolah-olah itu adalah 1 set data) tetapi memberi bobot pada catatan. oleh sebagian kecil dari variabel yang hilang. Lihat: Wood et. Al. 2008

am767
sumber