2013-03-08 63 views
1

循環迴歸我曾嘗試這個QA適用於:"efficient looping logistic regression in R"我自己的問題,但我不能完全使它發揮作用。我沒有嘗試過使用apply,但有人告訴我一個for循環在這裏是最好的(如果有人相信,請隨時解釋!)我認爲這個問題是相當普遍的,不是太深奧的論壇。已有多個變量和輸出的一個子集

這就是我想實現的:我有3個預測變量(性別,年齡,種族)和幾個人86個基因位置的因變量(比例)的數據集。我想要爲每個位置運行雙變量線性迴歸(因此,對於3個預測變量,所以需要86個線性迴歸)。然後,我想以一些易於閱讀的格式輸出結果;我的想法是一個矩陣,其中行=性別,年齡和種族,列= 86個職位。每行*列組合都會有一個p值。然後,我可以調用p值< 0.1(或任何我想要的閾值)來輕鬆查看哪些預測變量與每個位置的比例顯着相關。

這是我到目前爲止的代碼。

BB <- seq.csv[,6:91] #the data frame containing the 86 positions 
AA <- seq.csv[,2:4] #the data frame containing the 3 predictor variables 

linreg <- matrix(NA,3,86) #make a results vector and fill it with NA 
    for (i in 1:86)  #loop over each position variable 
    { 
       for (j in 1:3) #for each position variable, loop over each predictor 
    { 
       linreg[i,j] <- lm(BB[,i]~AA[,j]) #bivariate linear regression 
}} 

無論我如何改變這種(例如,它簡化了遍歷的位置只有一個預測),我仍然得到一個錯誤,我的矩陣是不一樣的長度(項目取而代之的是數不是替換長度的倍數)。事實上,長度(linreg)= 286(3 * 86)和長度(BB)= 86,長度(AA)= 3。我知道後兩個是數據框,而不是矩陣......但如果我將它們轉換爲矩陣,我會得到一個無效的類型錯誤(變量'BB [,i]'的無效類型(列表)')。我不知道如何解決這個錯誤,因爲我只是不明白[R不夠好。我查閱過的書籍應用統計遺傳學有R藝術[R編程無濟於事,我一直在谷歌搜索整天。而且我還沒有得到的編碼輸出的結果...

我會很感激的一種更好的方式調試任何提示或一些建議編寫這個!謝謝大家。

+1

我想你需要和統計學家交談。我認爲在你嘗試自己編寫代碼之前,你已經頭腦清醒,需要更好地理解這些問題。 – 2013-03-08 22:43:46

+0

如果您發佈數據結構的一部分,它可以幫助您更輕鬆地獲得幫助。嘗試粘貼輸出(head(BB [,6:10]))和'dput(head(AA))'輸出。 – 2013-03-08 22:55:29

+0

這聽起來像是我在博士學習中所做的一些令人遺憾的事情......請與統計顧問交談! – alexwhan 2013-03-09 09:42:47

回答

2

真的很難給出一個明確的答案,不知道事先您的數據的結構,但這種威力工作。我假設你的兩個數據幀具有相同的行數(觀察):

df <- cbind(AA[ , 2:4 ] , BB[ , 6:91 ]) 
mods <- apply(as.data.frame(df[ , 4:89 ]) , 2 , FUN = function(x){ lm(x ~ df[,1] + df[,2] + df[,3] }) 

# The rows of this matrix will correspond to the intercept, gender, age, race, and the columns are the results for each of your 86 genetic postions 
pvals <- sapply(mods , function(x){ summary(x)$coefficients[,4]) 

至於是否不認爲是正確的的事情我會相信你的判斷遺傳流行病學!

+0

哦,這絕對不是正確的做法。這是實驗室輪換的一部分 - 我的責任只是做「板凳工作」。現在我掌握了數據,我的責任僅僅是學習R.我明確知道多重測試,相關數據和其他問題。但是這不適合我的論文 - 一旦我瞭解了我在R中需要的東西,數據就會消失得無影無蹤! – user2100907 2013-03-09 14:46:27

+0

@ user2100907如果上述內容不是您正在查找的內容,請留下評論,以便我可以更新解決方案,並且您將要做的事情。:-)乾杯 – 2013-03-10 06:54:21

+0

非常感謝 - 這個代碼做了我想實現的只是一個小小的改變(包括在最後的「)」之前的pvals向量代碼的末尾括號「}」 – user2100907 2013-03-10 16:57:45