Cách xử lý giá trị NA trong phương pháp thu nhỏ (Lasso) bằng glmnet


12

Tôi đang sử dụng "glmnet" cho hồi quy lasso trong GWAS. Một số biến thể và cá nhân có các giá trị bị thiếu và dường như glmnet không thể xử lý các giá trị bị thiếu.

Có giải pháp nào cho điều này? hoặc có gói nào khác có thể xử lý các giá trị bị thiếu trong hồi quy lasso không?

Đây là kịch bản của tôi.

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

Câu trả lời:


12

Bỏ qua các trường hợp có giá trị NA có thể dẫn đến sai lệch. Một giải pháp thay thế sẽ là thực hiện nhiều lần cắt bỏ dữ liệu bị thiếu, ví dụ như với mice, và sau đó thực hiện lasso trên mỗi lần cắt bỏ. Lasso có thể sẽ trả về các bộ biến được chọn khác nhau cho các lần cắt, nhưng bạn có thể kiểm tra tần suất mỗi biến được chọn, trong số các bộ dữ liệu được liệt kê, để xác định các biến số ứng cử viên tốt nhất của bạn.

Dĩ nhiên, việc tranh chấp là không thể áp dụng nếu xác suất thiếu điểm dữ liệu có liên quan đến giá trị thực của nó. Vì vậy, trước khi thực hiện việc cắt cụt, hãy đảm bảo ít nhất đó là điều không thể xảy ra, dựa trên kiến ​​thức về vấn đề này.


3

Sử dụng complete.casesvà / hoặc na.omitđể xác định những hàng không có NA.

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

glmnet(geno61, pheno61, ...)    

1

Tôi biết đây là một câu hỏi cũ - nhưng tôi muốn thêm, ngoài việc buộc tội với chuột, để có được một danh sách các đồng biến đáng tin cậy hơn, lasso có thể được thực hiện sau khi xếp chồng tất cả các bộ dữ liệu bị tranh chấp (như thể đó là 1 tập dữ liệu) nhưng cân nhắc các bản ghi bằng phần nhỏ của các biến bị thiếu. Xem: Gỗ et. al. 2008

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.