2015-12-16 54 views
2

我一直在嘗試使用相同的x軸數據(「甲烷」),但y軸變化(第1,10,16天等)的幾個線性迴歸「自動化」。從每次迴歸中,我想提取截取和斜率並將它們寫在每個相應的列下(第1到72天)。我仍然不知道哪種方法更合適,如果是循環或s/lapply。如何在for循環或s/lapply中添加線性迴歸?

實施例(稱爲 「raw_standards」 數據幀):

Methane 1  10  16  62  72 
224.62 1490700 1423400 2475400 2063300 1819650 
449.23 3297100 2878950 4980300 4078800 3701750 
842.32 4181900 5292200 10718500 8247400 7566600 
2246.18 9211500 12535000 25439000 19867500 16443000 
4492.36 29228000 27567000 49345000 39328000 30743000 

我給環路電流如下:

For (i in raw_standards[,2:6]) { 
    y = raw_standards [,3:20] 
    lm(y ~ raw_standards$'uM Methane', raw_standards) 
} 

我也試圖與lapply:

lapply (raw_standards [ , 2:6], 
    lm(raw_standards [ , 2:6] ~ raw_standards$'uM Methane',raw_standards)) 

不限有助於瞭解如何正確編寫賴特代碼非常感謝。

回答

2

我喜歡用管道做這些事情。來自哈德利的三個包裝的精彩組合將會成功。

df <- data.frame(Methane = rnorm(30),Day1 = rnorm(30),Day2 = rnorm(30),Day3 = rnorm(30)) 

library(tidyr) 
library(dplyr) 
library(purrr) 

df %>% gather(Variable,value,-Methane) %>% split(.$Variable) %>% 
     map(~ lm(value ~ Methane, data = .)) %>% 
     map("coefficients") 

第一步:聚集功能將數據轉換爲長格式。

第二步:分割將數據框功能化爲數據框列表。

第三步:地圖建立在列表

爲了進一步澄清的所有元素的線性模型(同lapply),看哪個寫很好這些包的包小插圖。上述代碼的輸出爲:

$Day1 
(Intercept)  Methane 
0.17664660 -0.07090221 

$Day2 
(Intercept)  Methane 
0.03615358 0.24230124 

$Day3 
(Intercept)  Methane 
    0.1662604 -0.2836147