答读者问:R语言批量做一元线性回归的简单小例子

简介: 答读者问:R语言批量做一元线性回归的简单小例子

有人在公众号的后台留言问到

他的数据如下,

image.png

第一列是自变量,后面每一列是因变量,先算每一列和第一列的回归系数,有很多个这样的文件,如果用R语言批量来做怎们实现

想了一下,应该还挺有用的,我写了一个循环函数

batch_lm<-function(df,var,axis){
  x <- c()
  y <- c()
  z <- c()
  var1 <- df %>% pull(var)
  new.df <- df %>% select(-var)
  for (var2 in colnames(new.df)){
    if(axis==1){
      df.lm<-lm(new.df %>% pull(var2) ~ var1)
      x<-append(x,var)
      y<-append(y,var2)
      z<-append(z,df.lm$coefficients[2] %>% as.vector())
    }
    else{
      df.lm<-lm(var1 ~ new.df %>% pull(var2))
      x<-append(x,var)
      y<-append(y,var2)
      z<-append(z,df.lm$coefficients[2] %>% as.vector())
    }
    
  }
  return(data.frame(var1=x,var2=y,coef_value=z))
}

总共有三个参数,

  • 第一个df是读取进来的数据集
  • 第二个var是想要固定的列的名字
  • 第三个参数axis取值是1和2,1代表固定的列是自变量,2代表固定的列是因变量

最后返回一个数据框

使用这个函数之前要加载tidyverse这个R包

比如读取开头的示例数据计算回归系数

library(tidyverse)
df<-read.csv("lm_example.csv")
batch_lm(df,"hours",axis=1)

image.png

我这个数据是随便够早的,所以系数都一样

那假如有好多个文件的话,首先把所有数据文件里的固定的那一列的列名都改成一样的,比如我的数据里就全是hours,然后把所有数据集都放到同一个文件夹下,比如我放到文件夹lmExamples下,我这边是csv文件

代码

csvfiles<-list.files("lmExamples/",
           pattern = "*.csv",
           full.names = TRUE)

final_results<-list()

for(csvfile in csvfiles){
  df<-read.csv(csvfile)
  final_df<-batch_lm(df,'hours',axis = 1)%>% mutate(new_col=csvfile)

  final_results[[csvfile]]<-final_df
}
final_results %>% bind_rows()

最终输出结果

image.png

这里我用的数据都一样,所以结果系数都是一样的,换成你自己的数据应该不是这样的

完整代码

library(tidyverse)
batch_lm<-function(df,var,axis){
  x <- c()
  y <- c()
  z <- c()
  var1 <- df %>% pull(var)
  new.df <- df %>% select(-var)
  for (var2 in colnames(new.df)){
    if(axis==1){
      df.lm<-lm(new.df %>% pull(var2) ~ var1)
      x<-append(x,var)
      y<-append(y,var2)
      z<-append(z,df.lm$coefficients[2] %>% as.vector())
    }
    else{
      df.lm<-lm(var1 ~ new.df %>% pull(var2))
      x<-append(x,var)
      y<-append(y,var2)
      z<-append(z,df.lm$coefficients[2] %>% as.vector())
    }
    
  }
  return(data.frame(var1=x,var2=y,coef_value=z))
}

df<-read("lmExamples/lm_example.csv")
batch_lm(df,'hours',axis = 1)
batch_lm(df,'hours',axis = 2)



csvfiles<-list.files("lmExamples/",
           pattern = "*.csv",
           full.names = TRUE)

final_results<-list()

for(csvfile in csvfiles){
  df<-read.csv(csvfile)
  final_df<-batch_lm(df,'hours',axis = 1)%>% mutate(new_col=csvfile)

  final_results[[csvfile]]<-final_df
}
final_results %>% bind_rows()

final_results %>% bind_rows() %>% write_csv(file="output.csv")

image.png

可能会遇到这个信息,可以忽略

示例数据和代码可以给推文点赞,然后点击在看,最后留言获取

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

微信公众号好像又有改动,如果没有将这个公众号设为星标的话,会经常错过公众号的推文,个人建议将 小明的数据分析笔记本 公众号添加星标,添加方法是

点开公众号的页面,右上角有三个点

image.png

点击三个点,会跳出界面

image.png

直接点击 设为星标 就可以了

相关文章
|
2月前
|
算法 数据挖掘
R语言中的非线性回归模型
【4月更文挑战第27天】本文探讨了R语言中非线性回归模型的构建与应用,适用于处理非线性变量关系。模型设定涉及响应变量与解释变量的非线性函数连接,如幂函数、指数函数。参数估计通过最小化残差平方和实现,R提供`nls()`等函数支持。非线性回归广泛应用于生物学、经济学和工程学等领域,解决复杂系统中的非线性问题。实践中需注意初始参数选择、局部最优解及模型诊断验证。有效运用非线性回归模型能揭示数据模式,助力数据分析和决策。
|
2月前
【视频】线性回归中的贝叶斯推断与R语言预测工人工资数据|数据分享-3
【视频】线性回归中的贝叶斯推断与R语言预测工人工资数据|数据分享
【视频】线性回归中的贝叶斯推断与R语言预测工人工资数据|数据分享-3
|
2月前
|
算法
R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据
R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据
|
2月前
|
算法
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
|
2月前
|
传感器 数据可视化 定位技术
【视频】R语言用线性回归预测共享单车的需求和可视化|数据分享
【视频】R语言用线性回归预测共享单车的需求和可视化|数据分享
【视频】R语言用线性回归预测共享单车的需求和可视化|数据分享
|
2月前
|
移动开发
R语言线性回归模型拟合诊断异常值分析家庭燃气消耗量和卡路里实例带自测题
R语言线性回归模型拟合诊断异常值分析家庭燃气消耗量和卡路里实例带自测题
|
2月前
|
机器学习/深度学习 前端开发 自动驾驶
【视频】什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例|数据分享
【视频】什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例|数据分享
|
2月前
|
前端开发 数据建模 计算机视觉
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
|
2月前
|
存储 资源调度 数据可视化
R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
|
2月前
|
数据可视化 数据挖掘 计算机视觉
R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资
R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资