R 再也不用愁变量太多跑回归太麻烦!R语言循环常用方法总结
在高维数据分析过程中,为了筛选出与目标结局相关的变量,通常会用到回归分析,但是因为自变量较多,往往要进行多次回归。这就是统计编程语言发挥作用的时候了
有些大神们认为超过3次的复制粘贴就可以考虑使用循环了,当然个人“承受能力较强”,在分析过程中还是经常会用复制粘贴来解决相当一部分的问题。但是当变量太多需要多次复制粘贴,并且还要对不同的过程设置不同的编号真的太麻烦了。比如有100个X,就要命名100个模型,从fit1到fit100,显然可操作性太差了。
所以循环必须派上用场,接下来将总结一下在R中使用循环来进行回归分析的几个常用方法。
我们以R自带的state.x77数据集为例进行介绍。 由于原始数据集是矩阵,先转变成数据框,再以一个简单的名字命名。数据结构如下:

行代表50个不同的州,列是8个不同的变量:Population:人口数;Income:收入;Illiteracy:文盲率(百分比);Life Exp:期望寿命;Murder:凶杀案发生率(每10万人);HS Grad:高中毕业率;Frost:气温低于冰冻的天数;Area:每平方英里的陆地面积。
我们以凶杀案发生率(Murder)为因变量,看哪些因素跟案件发生率有关。
1.根据变量所在的列号进行循环

开始循环之前先建立一个空的向量result1用以在循环过程中储存提取的结果。
模型中states[,i]表示逐个选择states数据框的第1-4个变量,进行线性回归分析。
coef(summary(fit))[2,c(1,2,4)]用以提取目标变量回归分析结果的beta,SE,和p值。提取之后通过colnames(states)[i]加上相应变量的变量名。最后在循环过程中通过rbind将结果合并在一个数据框result1中,结果如下:

可以通过write.csv()等函数将结果输出到本地文件夹中。
这种循环方法适用于变量在数据框中是连续排列的。
2.根据变量名进行循环

如果目标变量在数据框中不是连续的,可以使用这个方法,先建立一个目标变量名的向量,然后在回归方程中加上substitute函数,分别将提前建立的变量名替换到方程中,建立变量名的循环。
这里注意了:一定要使用substitute函数,不能直接将states[,as.name(vars[i])]放入方程中,有兴趣的读者可以查一下substitute函数的用法。
结果如下:

3.使用apply函数进行循环

先自定义一个线性回归函数,可以直接提取出回归结果中的beta,SE,和P值。然后用apply函数(也可以使用sapply等函数)将此自定义的函数分别使用于数据集选定的列。再通过转置函数t( )使结果更具有可读性。
结果如下:

该方法既适用于目标变量在数据框中是连续排列的,也适用于不连续排列的情况。
4.使用purrr包的map函数进行循环

该方法与apply族函数的思路相似,不同的是purrr包是Hardley大神tidyverse的核心包之一,速度非常快,特别适用于数据较大,变量较多的数据集。
同样需要先自定义一个线性回归函数,然后通过map函数适用于数据集选定的列。
得到结果如下:

发现不太适合直接导出,没关系,加上as.data.frame和转置函数t()就可以了,结果如下:

以上是在R语言中用循环做回归分析的常用方法,其中有些细节可以根据自己的需要进行调整,比如提取结果中的其他变量。
这些循环方法也适用于其他回归模型,比如常用的logistic回归。另外我在自己的数据集中测试了不同方法的耗时情况,几次测试map函数都是最省时的,for循环和apply函数在我的数据上表现相差不大。
R 再也不用愁变量太多跑回归太麻烦!R语言循环常用方法总结的更多相关文章
- python的环境,你再也不用愁-conda
Conda Guide Conda简介 conda是一个包,依赖和环境管理工具,适用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTR ...
- 有了这个BI工具,财务分析再也不用愁
财务软件的发展已基本上将财会工作者从登记凭证.记账.编制会计报表等繁重和重复性的工作中解放出来.但是,当前大多数管理软件或财务软件的财务分析功能还停留在会计信息或财务指标的数据处理.图表展现层面,支持 ...
- 简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了
你是否为WiFi共享而发愁,各个无线共享软件,某某共享精灵,某某免费WiFi,某某共享大师,某某随身WiFi,一个比一个难用,一个比一个私货多,一个比一个广告多,如果装上了它们,你的电脑就基本沦陷了, ...
- 学会这个删库再也不用跑路了~ --技术流ken
前言 相信每一个学IT的人或多或少都听说过从删库到跑路这个梗~下图也是在各种交流群屡禁不止,新人听着也是瑟瑟发抖. 人们茶余饭后,街头巷角难免要问... 下面技术流ken就教给各位新手们一招删库再也不 ...
- 教会舍友玩 Git (再也不用担心他的学习)
舍友长大想当程序员,我和他爷爷奶奶都可高兴了,写他最喜欢的喜之郎牌Git文章,学完以后,再也不用担心舍友的学习了(狗头)哪里不会写哪里 ~~~ 一 先来聊一聊 太多东西属于,总在用,但是一直都没整理的 ...
- 【阿里云产品公测】离线归档OAS,再也不用担心备份空间了
[阿里云产品公测]离线归档OAS,再也不用担心备份空间了 作者:阿里云用户莫须有3i 1 起步 1.1 初识OAS 啥是OAS,请看官方说明: 引用: 开放归档服务(Open Archive Se ...
- 有了 tldr,妈妈再也不用担心我记不住命令了
引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...
- 妈妈再也不用担心我使用git了
妈妈再也不用担心我使用git了 Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:ms ...
- python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了
我们上次做了 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍 有些朋友觉得 利用正则表达式去提取信息 太特么麻烦了 有没有什么别的方式 更方便过滤我们想要的内容啊 emmmm 你还别说 还 ...
随机推荐
- 3分钟让你的Eclipse拥有自动代码提示功能
第一步:Window->Preferences->Java 第二步:Java->Editor->Content Assist->Auto Activation->将 ...
- eclipse下用maven插件+Mabatis-generator生成mybatis的文件
1. 配置Maven pom.xml 文件 在pom.xml增加以下插件: <build> </plugins> ... <plugin> <groupId& ...
- 关于自学java的内容及感受
这周自学了关于java输入的知识:java输入的方法与c++和c有些不同,他需要在开头加一个import连接系统的包,才能进行输入语句的编写. 自己编写了一点简单的输入的程序: package mod ...
- selenium webdriver 操作RadioButton
@Test public void testRadio() { WebDriver driver = ExplorerBase.IESetting(); try { Thread.sleep(500) ...
- nginx 缓存
浏览器缓存与nginx缓存 浏览器缓存 优点:使用有效缓存时,没有网络消耗,速度快:即使有网络消耗,但对失效缓存使用304响应做到网络消耗最小化 缺点:仅提升一个用户的体验 nginx 缓存 优点:提 ...
- C# 读取和写入txt文件
读取: 1.使用StreamReader读取文件,然后一行一行的输出 StreamReader sr = new StreamReader(path,Encoding.Default); String ...
- 2019年5月17日A股暴跌行情思考
2019年5月17日A股暴跌行情思考 原因:特朗普针对华为的禁商令,人民币对美元汇率大跌 盘面:平开,单边下跌,收盘80多股跌停 操作:下午2点加仓,满仓 总结: 本次操作太过激进. 局势不明朗时抄底 ...
- Codeforces Round #617 (Div. 3)A. Array with Odd Sum(水题)
You are given an array aa consisting of nn integers. In one move, you can choose two indices 1≤i,j≤n ...
- Python组合类型笔记
Python中常用的三种组合数据类型,分别是: - 集合类型 - 序列类型 - 字典类型 1. 集合类型: -集合用大括号{}表示,元素间用逗号分隔 -建立集合类型用{}或set() -建立空集合类型 ...
- C/C++ - CallBack
这是实验楼上一个callback debug例子,我没有提交结果,但在本地上运行没有任何问题,也无警告: #include <stdio.h> #define MAX 3 typedef ...