答读者问: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

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

相关文章
|
3天前
|
移动开发
R语言线性回归模型拟合诊断异常值分析家庭燃气消耗量和卡路里实例带自测题
R语言线性回归模型拟合诊断异常值分析家庭燃气消耗量和卡路里实例带自测题
45 5
|
5天前
|
算法
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
20 1
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
|
10天前
|
存储 资源调度 数据可视化
R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
33 7
|
10天前
|
前端开发 数据建模 计算机视觉
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
40 8
|
10天前
|
机器学习/深度学习 数据采集 数据可视化
R语言用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化
R语言用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化
120 7
|
10天前
|
机器学习/深度学习 算法 C++
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
38 0
|
10天前
R语言计量经济学:虚拟变量(哑变量)在线性回归模型中的应用
R语言计量经济学:虚拟变量(哑变量)在线性回归模型中的应用
17 0
|
10天前
|
机器学习/深度学习
R语言用线性回归模型预测空气质量臭氧数据
R语言用线性回归模型预测空气质量臭氧数据
26 0
|
10天前
R语言基于线性回归的资本资产定价模型(CAPM)
R语言基于线性回归的资本资产定价模型(CAPM)
16 0
|
11天前
|
算法
R语言中Gibbs抽样的Bayesian简单线性回归
R语言中Gibbs抽样的Bayesian简单线性回归
17 0

热门文章

最新文章