Jak obsługiwać wartości NA metodą kurczliwości (Lasso) przy użyciu glmnet

12

Używam „glmnet” do regresji lasso w GWAS. Niektóre warianty i pojedyncze osoby mają brakujące wartości i wydaje się, że glmnet nie może obsłużyć brakujących wartości.

Czy jest na to jakieś rozwiązanie? czy jest jakiś inny pakiet, który może obsłużyć brakujące wartości w regresji lasso?

Oto moje skrypty.

> 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)**
Estera
źródło

Odpowiedzi:

12

Pominięcie przypadków z wartościami NA może prowadzić do stronniczości. Alternatywą byłoby wykonanie wielu imputacji brakujących danych, na przykład za pomocą mice, a następnie wykonanie lasso na każdej z tych imputacji. Lasso prawdopodobnie zwróci różne zestawy wybranych zmiennych dla imputacji, ale możesz zbadać, jak często każda zmienna jest wybierana spośród przypisanych zbiorów danych, aby zidentyfikować najlepsze zmienne kandydujące.

Imputacja oczywiście nie ma zastosowania, jeśli prawdopodobieństwo braku punktu danych jest powiązane z jego prawdziwą wartością. Dlatego przed dokonaniem imputacji upewnij się, że jest to mało prawdopodobne, w oparciu o znajomość przedmiotu.

EdM
źródło
3

Użyj complete.casesi / lub, na.omitaby zidentyfikować wiersze, które nie mają NA.

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

glmnet(geno61, pheno61, ...)    
Hong Ooi
źródło
1

Wiem, że to stare pytanie - ale chciałem dodać, poza przypisaniem myszom, aby uzyskać bardziej niezawodną listę zmiennych towarzyszących, lasso można wykonać po ułożeniu wszystkich przypisanych zestawów danych (tak jakby to był 1 zestaw danych), ale ważenie rekordów przez ułamek brakujących zmiennych. Zobacz: Wood i in. glin. 2008

am767
źródło