1

私は遺伝学の博士課程の学生で、線形回帰を使用していくつかの遺伝データの関連分析を試みています。下の表では、各「特性」を各「SNP」に対して回帰しています。「var」として含まれる相互作用用語もあります。

私は R を 2 週間しか使用しておらず、プログラミングのバックグラウンドもありません。理解したいヘルプがあれば説明してください。

これは私のデータのサンプルです:

Sample ID   var trait 1 trait 2 trait 3 SNP1    SNP2    SNP3
77856517    2   188      3       2        1      0       0
375689755   8   17      -1      -1        1     -1      -1
392513415   8   28       14      4        1      1       1
393612038   8   85       14      6        1      1       0
401623551   8   152      11     -1        1      0       0
348466144   7   -74      11      6        1      0       0
77852806    4   81       16      6        1      1       0
440614343   8   -93      8       0        0      1       0
77853193    5   3        6       5        1      1       1

そして、これは私が単一の回帰に使用してきたコードです:

result1 <-lm(trait1~SNP1+var+SNP1*var, na.action=na.exclude)

すべての特性が各 SNP に対してテストされるループを実行したいと考えています。

オンラインで見つけたコードを変更しようとしていますが、解決方法がわからないエラーが常に発生します。

助けてくれてありがとう。

4

1 に答える 1

4

個人的には、問題はそれほど簡単ではないと思います。特にR初心者向け。

ここでは、回帰式を動的に作成することに基づくソリューションです。paste関数を使用してさまざまな式の項を作成しy~ x + var + x * var、結果の文字列を を使用して式に強制するという考え方ですas.formula。ここでyxは式の動的項です: c(trait1,trai2,..) の y と c(SNP1,SNP2,...) の x。もちろん、ここではlapplyループに使用します。

lapply(1:3,function(i){
 y <- paste0('trait',i)
 x <- paste0('SNP',i)
 factor1 <- x
 factor2 <- 'var'
 factor3 <- paste(x,'var',sep='*')
 listfactor <- c(factor1,factor2,factor3)
 form <- as.formula(paste(y, "~",paste(listfactor,collapse="+")))
 lm(formula = form, data = dat)
})

誰かがより簡単な解決策、またはよりRっぽい解決策を提供してくれることを願っています:)

編集

@DWin コメント のおかげで、によってモデル化されてy~x*varいることを意味するため、式を単純化できます。yxvarx*var

したがって、上記のコードは次のように簡略化されます。

 lapply(1:3,function(i){
     y <- paste0('trait',i)
     x <- paste0('SNP',i)
     LHS <- paste(x,'var',sep='*')
     form <- as.formula(paste(y, "~",LHS)
     lm(formula = form, data = dat)
    })
于 2013-03-31T20:50:29.430 に答える