2013-03-31 63 views
1

我是一名遺傳學博士生,我正在嘗試使用線性迴歸對一些基因數據進行關聯分析。在下面的表格中,我逐一回顧了每個'SNP'的每個'特徵'。還有一個相互作用項包括'var'新手需要在R中循環lm

我只用了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進行測試。

我一直在嘗試修改我在網上找到的代碼,但我總是遇到一些我不明白如何解決的錯誤。

謝謝你的任何和所有幫助。

+0

我擔心你沒有描述什麼「特質」數字意味着什麼,或者你爲什麼要獨立分析什麼可能是依賴預測因子。線性迴歸分析假定Y值從10變化到17的意思與200到210的變化完全相同。這就是你想知道的嗎? SNP真的是獨立的嗎?在接受任何答案之前,您應該確保任何在線顧問都已充分採訪您,以提供明智的建議。 –

+0

我很欣賞這些評論。確實,我不太瞭解所有數據,但在我的項目中,這些數據都是由一位適當的統計人員處理的。我不需要進行過分全面的分析。 SNPs顯示了不同程度的依賴性,並且在完美的世界中我想學習所有這些。但現在我只需要在更簡單的層面上運行它。這種分析已經正確完成,我在博士學位期間被告知我沒有學過它。 – user2225633

+0

相信我迪文,我知道它有多荒謬。我正在盡我所能教自己,但很難將我的頭腦統計和編碼。 – user2225633

回答

3

我個人並不覺得這個問題很容易。特別針對R新手。

這裏是一個基於動態創建迴歸公式的解決方案。 這個想法是使用paste函數來創建不同的公式條款,y~ x + var + x * var然後使用as.formula強制結果字符串tp公式。這裏yx是公式動態項:y in c(trait1,trai2,..)和x in c(SNP1,SNP2,...)。當然這裏我使用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模仿x,varx*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) 
    }) 
+0

在創建冗餘代碼的道路上追隨OP是沒有意義的。公式'y〜x * var'就足夠了。看看:model.matrix(trait1〜SNP1 + var + SNP1 * var,data.frame(trait1 = 188,var = 2,SNP1 = 1))' –

+0

@DWin謝謝。 R使用的模型符號是靈活而強大的,但仍然像我這樣的新手混淆:) – agstudy

+0

感謝您的快速回復。我希望能夠更多地瞭解這方面的情況,但是現在我希望能夠從您提供的建議中反思。我真的需要找到一種避免運行580單行代碼的方法。 – user2225633