楼主: andystata
14790 14

[问答] 如何同时对多组数据进行线性回归 [推广有奖]

  • 3关注
  • 0粉丝

本科生

25%

还不是VIP/贵宾

-

威望
0
论坛币
935 个
通用积分
0.0617
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1116 点
帖子
58
精华
0
在线时间
68 小时
注册时间
2015-7-2
最后登录
2017-11-1

楼主
andystata 发表于 2017-8-5 10:25:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据结构如图

数据结构 第一列 代表不同的人,图中只显示了前两个人。每个人有相应的最后两列数据。我想对每个人的afp.value和time.relative进行回归,以time.relative为自变量,afp.value为因变量:
   afp.value=a+b*time.relative
然后每个人都会产生一对(a,b).
鉴于我有很多个人,要是把数据按每个人拆分,再分别回归肯定是工作量太大的。
数据文件如下: data.zip (13.23 KB)
如何快速得到我想要的结果呢?
提前谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:线性回归 Relative value alue time 线性回归

沙发
小R小二郎 发表于 2017-8-5 10:31:56
可惜没有论坛币下载你的数据

藤椅
小R小二郎 发表于 2017-8-5 11:34:22
###求线性回归的系数
xishu=function(a){
  attach(a)
  ###a[,1]表示数据名字的那一列,m就表示名字
  jilu1=a[which(a[,1]=="m"),]
  ###a[,3],a[,2]表示因变量与自变量
  jilu1$a1=jilu1[,3]
  jilu1$b1=jilu1[,2]
fit=lm(a1~b1,data=jilu1)
jilu2=a[which(a[,1]=="f"),]
jilu2$a1=jilu2[,3]
jilu2$b1=jilu2[,2]
fit1=lm(a1~b1,data=jilu2)
  return(c(fit$coefficients,fit1$coefficients))
  }   你试试,如果可以的话  别忘了奖励
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

板凳
andystata 发表于 2017-8-5 19:25:35
小R小二郎 发表于 2017-8-5 10:31
可惜没有论坛币下载你的数据
不需要论坛币啊。试了下好像有点问题诶。。In model.response(mf, "numeric") :
  using type = "numeric" with a factor response will be ignored

报纸
小R小二郎 发表于 2017-8-5 22:17:30
D3JO)42(]B8YB(IS0Y21_3B.png     这只是一个思路  因为这个分析里只用到"aetiology        AFP.value        Time.relative
",这三列,所以我只提取了这三列的数据
###求线性回归的系数
xishu=function(a){
  
  ###a[,1]表示数据名字的那一列,m就表示名字
  jilu1=a[which(a[,1]=="HEP C"),]
  ###a[,3],a[,2]表示因变量与自变量
  fit=lm(jilu1[,3]~jilu1[,2],data=jilu1)
  #jilu2=a[which(a[,1]=="ALD + NAFLD"),]
  #jilu2$a1=jilu2[,3]
  #jilu2$b1=jilu2[,2]
  #fit1=lm(a1~b1,data=jilu2)
  return(fit$coefficients)
}     这只是一个思路,就是按人名划分,有多少人,你在往函数里面添加就行,最后修改返回值。
希望能帮到你

地板
andystata 发表于 2017-8-5 23:24:23
小R小二郎 发表于 2017-8-5 22:17
这只是一个思路  因为这个分析里只用到"aetiology        AFP.value        Time.relative
",这三列,所以我只提取了 ...
好的谢谢!不过人实在很多,数据很多,不可能一行一行添加哈~
谢谢!

7
felixzhao123 发表于 2017-8-6 07:04:56
你的问题用purrr和broom包可以完美解决

8
小R小二郎 发表于 2017-8-6 09:32:13
felixzhao123 发表于 2017-8-6 07:04
你的问题用purrr和broom包可以完美解决
具体怎么操作呢

9
felixzhao123 发表于 2017-8-6 14:53:07
我用一个公共数据集mpg做例子,供你参考:
  1. library(tidyverse)
  2. library(broom)
  3. library(broom)


  4. ### import sample data
  5. data("mpg")

  6. ##assumption: we want to build a linear model for displ(predictor) and hwy (response) by group of class

  7. nested_mpg <- mpg%>%
  8.   group_by(class)%>%
  9.   nest()

  10. ### create a function to be used for each group of class
  11. linear_Model <- function(df){
  12.   lm(hwy~displ,data=df)
  13. }


  14. nested_Model <- nested_mpg%>%
  15.   mutate(model=map(data,linear_Model))


  16. ### now unnest the data frame to view model details

  17. nested_Model <- nested_Model%>%
  18.   mutate(model_Detail=map(model,glance))%>%
  19.   unnest(model_Detail)

  20. View(nested_Model)
复制代码


这样你就能看到所有与线性回归相关的参数都放在每一列中了
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 20 + 1 + 2 + 1 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 20  学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

10
felixzhao123 发表于 2017-8-6 15:02:21
补一张最后结果的图片

Capture.PNG (32.44 KB)

Capture.PNG

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-18 00:53