如何使用glmnet以收缩(套索)方法处理NA值


12

我在GWAS中使用“ glmnet”进行套索回归。某些变体和个人缺少值,并且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)**

Answers:


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等。等 2008年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.