使用来自多个数据系列的简单线性回归的所有结果创建数据框

时间:2017-02-15 12:20:40

标签: r linear-regression

我有一个数据库,我在这个数据库中比较一段时间内螃蟹的适应率。我想为每个人创建一个线性回归,然后将所有结果(截距,斜率和R ^ 2值)收集到一个看起来像这样的数据框中:

第1栏:蟹ID

第二栏:拦截

第3栏:坡度

第4栏:R ^ 2

我的数据库看起来与此类似,但数据点更多(每个人翻译132次,超过50人)

ID  Enclosure   Flip Num    Time taken
2   Simple        1            0.5
2   Simple        2            0.8
2   Simple        3            0.41
2   Simple        4            0.44
4   Bare          1            0.37
4   Bare          2            0.41
4   Bare          3            1.06
4   Bare          4            0.59
5   Simple        1            1.88
5   Simple        2            1.88
5   Simple        3            2.04
5   Simple        4            2.66
6   Complex       1            1.87
6   Complex       2            1.96
6   Complex       3            1.56
6   Complex       4            2.34
9   Complex       1            0.44
9   Complex       2            2.35
9   Complex       3            2.22
9   Complex       4            3.22

我在另一个问题上找到了这个代码,但这只带回了拦截和斜率:

library(plyr)
ddply(test, "individual", function(x) {
  model <- lm(condition ~ day, data = x)
  coef(model)
})

1 个答案:

答案 0 :(得分:0)

使用splitsapply,如下所示。正如评论中所提到的,数据集和您的代码具有不同的列。在本例中,我选择了两列,以生成模型。

生成数据

str <- 'ID   Enclosure   FlipNum    Timetaken
2   Simple  1   0.5
2   Simple  2   0.8
2   Simple  3   0.41
2   Simple  4   0.44
4   Bare    1   0.37
4   Bare    2   0.41
4   Bare    3   1.06
4   Bare    4   0.59
5   Simple  1   1.88
5   Simple  2   1.88
5   Simple  3   2.04
5   Simple  4   2.66
6   Complex 1   1.87
6   Complex 2   1.96
6   Complex 3   1.56
6   Complex 4   2.34
9   Complex 1   .44
9   Complex 2   2.35
9   Complex 3   2.22
9   Complex 4   3.22'



file <- textConnection(str)
df <- read.table(file, header = T)

df

获取所有系数

sapply(split(df, df$ID),function(x) {
  model <- lm(Timetaken ~ FlipNum, data = x)
  c(ID = x$ID[1],coef(model),R2 = summary(model)[['r.squared']])
})

结果:

                     2         4         5         6         9
ID           2.0000000 4.0000000 5.0000000 6.0000000 9.0000000
(Intercept)  0.6800000 0.2800000 1.4900000 1.6800000 0.0050000
FlipNum     -0.0570000 0.1310000 0.2500000 0.1010000 0.8210000
R2           0.1690867 0.2855645 0.7564754 0.1648114 0.8260964