在高维数据分析过程中,为了筛选出与目标结局相关的变量,通常会用到回归分析,但是因为自变量较多,往往要进行多次回归。这就是统计编程语言发挥作用的时候了

有些大神们认为超过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语言循环常用方法总结的更多相关文章

  1. python的环境,你再也不用愁-conda

    Conda Guide Conda简介 conda是一个包,依赖和环境管理工具,适用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTR ...

  2. 有了这个BI工具,财务分析再也不用愁

    财务软件的发展已基本上将财会工作者从登记凭证.记账.编制会计报表等繁重和重复性的工作中解放出来.但是,当前大多数管理软件或财务软件的财务分析功能还停留在会计信息或财务指标的数据处理.图表展现层面,支持 ...

  3. 简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了

    你是否为WiFi共享而发愁,各个无线共享软件,某某共享精灵,某某免费WiFi,某某共享大师,某某随身WiFi,一个比一个难用,一个比一个私货多,一个比一个广告多,如果装上了它们,你的电脑就基本沦陷了, ...

  4. 学会这个删库再也不用跑路了~ --技术流ken

    前言 相信每一个学IT的人或多或少都听说过从删库到跑路这个梗~下图也是在各种交流群屡禁不止,新人听着也是瑟瑟发抖. 人们茶余饭后,街头巷角难免要问... 下面技术流ken就教给各位新手们一招删库再也不 ...

  5. 教会舍友玩 Git (再也不用担心他的学习)

    舍友长大想当程序员,我和他爷爷奶奶都可高兴了,写他最喜欢的喜之郎牌Git文章,学完以后,再也不用担心舍友的学习了(狗头)哪里不会写哪里 ~~~ 一 先来聊一聊 太多东西属于,总在用,但是一直都没整理的 ...

  6. 【阿里云产品公测】离线归档OAS,再也不用担心备份空间了

    [阿里云产品公测]离线归档OAS,再也不用担心备份空间了 作者:阿里云用户莫须有3i 1 起步  1.1 初识OAS  啥是OAS,请看官方说明: 引用: 开放归档服务(Open Archive Se ...

  7. 有了 tldr,妈妈再也不用担心我记不住命令了

    引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...

  8. 妈妈再也不用担心我使用git了

    妈妈再也不用担心我使用git了 Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:ms ...

  9. python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了

    我们上次做了 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍 有些朋友觉得 利用正则表达式去提取信息 太特么麻烦了 有没有什么别的方式 更方便过滤我们想要的内容啊 emmmm 你还别说 还 ...

随机推荐

  1. LIBRA查询

    SELECT COUNT(1)FROM rawdata_vehiclepassing xWHERE x.passingtime >= to_date('2019-11-24,00:00:00', ...

  2. 「题解」「HNOI2013」切糕

    文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...

  3. 五 Action访问方法,method配置,通配符(常用),动态

    1 通过method配置(有点low) 建立前端JSP:demo4.jsp <%@ page language="java" contentType="text/h ...

  4. 记录6--Java栈堆

    class Person { int age; } public class LearnHeap { public static void main(String args[]){ int a=18; ...

  5. P1120/UVA307 小木棍(sticks) 题解

    题目描述 pdf 题解 注意的问题是,各个原始木棒的长度都是一样的! 说一下本题的总思路即:DFS+超强力剪枝!(详见本人的 AC 程序) 首先,我们要从小到大枚举原始木棒的长度len,也就是枚举答案 ...

  6. The way get information from mssql by using excel vba and special port

    Yes,  we can get information from mssql by using excel vba.  But the default port of MSSQL is  1433. ...

  7. List模拟栈

    import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class Main<E ...

  8. Centos7 nginx配置多虚拟主机过程

    一.前提准备 1.已经安装好了的Centos7服务器 2.ip 为192.168.1.209   [本次的配置ip] 3.确定防火墙等已经关闭 二.nignx配置文件参数详解 要配置多台虚拟主机,就需 ...

  9. Node.js 阻塞 回调函数

    回调例程 N所有API都支持回调函数,可以处理大量并发请求.回调函数一般作为最后一个参数出现: function foo1(name, age, callback){ } function foo2( ...

  10. iOS应用的语言设置

    首先需要明确两个名词的区别:“当前手机的系统语言”.“应用内部的语言设置” 要解决的问题的情景: 在iOS应用中,有时候会调用系统的一些UI控件,例如: 1.在UIWebView中长按会弹出系统的上下 ...