gpt4 book ai didi

r - 使用简单线性回归的结果创建数据框

转载 作者:行者123 更新时间:2023-12-02 07:07:31 25 4
gpt4 key购买 nike

我有个人 body 状况指数的时间序列。我想为每个人确定 body 状况指数随时间的演变。换句话说,我想为每个人创建一个线性回归,然后将所有结果(截距和斜率)收集到一个如下所示的数据框中:

第一列:个人id

第二列:拦截

第三列:坡度

这是我尝试过的(只有我的数据集的样本),但我只得到所有结果的列表,我不知道如何将它们重新组合成一个数据框:

individual <- c(1,1,6,8,8,9,9,9,12,12)
day <- c(4,17,12,12,17,3,9,22,13,20)
condition <- c(0.72, 0.72, 0.67, 0.73, 0.76, 0.65, 0.68, 0.78, 0.73, 0.71)
test <- data.frame(individual, day, condition)
ind.id <- unique(test$individual)
ind.list <- lapply(1:length(ind.id), function(i){ subset(test, test$individual==ind.id[i])})
lms <- lapply(ind.list, lm, formula=condition~day)

谢谢!

最佳答案

我会使用 plyr 包,它对您有一些好处:

  1. 函数 ddply() 将按个人或您指定的任何其他分组变量估计 lm()
  2. 默认返回一个data.frame

代码:

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

返回:

  individual (Intercept)           day
1 1 0.7200000 1.207763e-17
2 6 0.6700000 NA
3 8 0.6580000 6.000000e-03
4 9 0.6242403 6.978799e-03
5 12 0.7671429 -2.857143e-03

如果您不想使用 plyr,或者只是想知道如何使用 base R 执行此操作,这里有一种方法。请注意,默认情况下,您的列表对象 lms 没有任何关联的名称,因此您需要确保 ind.id 与正确的系数匹配。我自己可能会使用 plyr 方法。

> cbind(ind.id, do.call("rbind",lapply(lms, coef)))
ind.id (Intercept) day
1 1 0.7200000 1.207763e-17
6 6 0.6700000 NA
8 8 0.6580000 6.000000e-03
9 9 0.6242403 6.978799e-03
12 12 0.7671429 -2.857143e-03

关于r - 使用简单线性回归的结果创建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com