1

我是遗传学博士生,我正在尝试使用线性回归对一些遗传数据进行关联分析。在下表中,我将每个“特征”与每个“SNP”进行回归还有一个交互项包括为“var”

我只使用了 2 周的 R,而且我没有任何编程背景,所以请解释我想要理解的任何帮助。

这是我的数据样本:

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. 这里是公式动态项:c(trait1,trai2,..) 中的 y 和 c(SNP1,SNP2,...) 中的 x yx当然在这里我使用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-ish 解决方案:)

编辑

感谢@DWin 评论,我们可以将公式简化为,因为y~x*var它意味着y由和xvarx*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 回答