【问题标题】:Create a dataframe with all the results from a simple linear regression on multiple data series创建一个数据框,其中包含来自多个数据系列的简单线性回归的所有结果
【发布时间】:2017-02-15 12:20:40
【问题描述】:

我有一个数据库,我在其中比较了一段时间内螃蟹的习惯化率。我想为每个人创建一个线性回归,然后将所有结果(截距、斜率和 R^2 值)收集到一个数据框中,如下所示:

第一列:螃蟹 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)
})

【问题讨论】:

  • 您的数据集示例和代码与不同的列名不同步

标签: r linear-regression


【解决方案1】:

如下使用splitsapply。如 cmets 中所述,数据集和您的代码具有不同的列。在本例中,我选择其中两列来生成模型。

生成数据

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多