在前面

在目前为止所有小伙伴们向大猫请教过的R问题中,大猫总结了最常遇见同时也是比较难的三个问题,分别是(1)事件研究法;(2)分组回归;(3)滚动回归。事件研究法在第一期中已经讲述,本期我们就来瞧瞧如何做分组回归~

PS:由于微信的限制,给大猫留言的小伙伴超过48小时后大猫就不能回复你们了。所以如果想联系大猫,可以按照文章最后的微信号加大猫微信哦。

题引入

很多时候我们需要处理的数据集中会有一个变量用于标记变量所在的组。例如下图中,stkid(我们可以把它想象成股票代码)有五种可能:a, b, c, d, e,每一个字母表示一只股票。y是因变量,可以想象成股票的日收益,x是自变量,可以想象成市场收益。我们希望对于每个股票,都跑一个如下回归:

y = x

并且把系数都保存在输出数据集中。

图:样例数据集

看似非常简单,但其实想要高效优美地实现是需要一定技巧滴。很多小伙伴大动干戈想把原数据集按照stkid的值拆成若干子数据集,并用for循环来做回归——大可不必这样。其实,要实现这一步只需要一行代码哦。

为了便于说明问题,我们先构造一个样例数据集:

# 确定随机数种子

# 想知道为什么要把42作为随机数种子?在google中输入“the answer to life the universe and everything”会有惊喜哦。

set.seed(42)

# 生成样例数据集dt,其一共有100行。stkid代表分组变量,有a, b, c, d, e五个类别;x和y分别随机生成

dt

要实现一行代码完成分组回归,需要用到data.table包!

骤分解

我们先把这一行优雅的代码放上来:

# result是输出数据集

result

最终的输出数据集是这个样子的:

现在我们逐一分析这一行代码。

  • keyby语句为data.table包中的分组语句,它能够对keyby中的每一个不同的值(这里为abcde)都分别跑一次回归。
  • ".SD"的含义是Subset of Data,每一个.SD都代表一个由keyby所决定的分组。具体而言,如果此时keyby语句循环到'a',那么.SD就表示原数据集中所有stkid == 'a'的行。在这里,.SD用来作为回归函数lm的输入数据集。
  • coef函数用来提取回归的系数。
  • 整行代码的关键在as.list函数。我们先看看如果不加as.list结果会是怎样的:

小伙伴们会发现此时每个组都有两行观测,其实他们分别对应着回归的intercept和coefficient。如果我们的回归不是单自变量而是双自变量,那么每个分组就会有三行观测了,一行是截距,还有两行是系数。

as.list的作用就在于,它把原来“竖着”的系数给“拉平”了,无论最终结果会出现几个系数,统统放到一行中显示。其中的原理是,data.table最终的输出必须是一个class为list的元素,符合条件的除了list自己,还包括 data.frame,data.table等。如果我们只加coef函数而不加as.list,那么最终输出的是一个vector,data.table会自动把这个vector拉直(也就是上图看到的这样),而加了as.list之后,原来输出vector就被打包成了list,变成了我们需要的样子。

这时有的小伙伴可能想问,有没有可能同时计算两个不同的回归方程?比如还是上面这个数据集,我想同时输出带系数的回归结果和不带系数的回归结果,应该怎么做?

还是只需要一行,大猫在这里给出答案(重点已经用红笔标出来啦):

result

结果是:

是不是很神奇?至于原理,大家自己回去研究哦。

datatables 一行数据生成两行_一行代码搞定分组回归相关推荐

  1. Excel VBA一行代码搞定分组排序

    最近很多小伙伴都被分组排序所困扰,Excel没有现成的分组排序功能,想要这功能基本都是靠录制宏.但是一旦录制宏,你就可以看到一长串不知道用不用得上,又不敢随便删除的代码 录制宏虽然好用,但是很容易有坑 ...

  2. 数据合并设计_八秒搞定合并相同内容的单元格,你却加班了1小时

    Excel有一种操作相信大家都见到过,那就是对单元格区域进行合并操作.对于绝大多数人来说,合并多个单元格都是手动点击合并来操作,但是当数据量较大或者我们需要对相同内容的单元格合并的时候,这种操作就用不 ...

  3. python 逆向生成正则表达式_一篇搞定Python正则表达式

    1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类 ...

  4. Python 数据可视化:Stack Graph 堆叠图,标准化堆叠柱形图,标准化的同时还能反应数据量大小的堆叠图(放入自写库,一行代码搞定复杂细节绘图)

    本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "堆叠图" ,即可获取本文的案例示范与包含详细注释的源 ...

  5. 成功解决numpy.ndarray格式类型转数据为list格式数据带有中括号(一行代码搞定!)

    成功解决numpy.ndarray格式类型转数据为list格式数据带有中括号(一行代码搞定!) 目录 解决问题 解决思路 解决方法 解决问题 numpy.ndarray格式类型转数据为list格式数据 ...

  6. 开源作品ThinkJDBC—一行代码搞定数据库操作

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  7. 一行代码搞定 GitHub 访问徽章

    相信对于使用 GitHub 的小伙伴来说,以上 GitHub 徽章(badge)应该都不怎么陌生吧.如果你想快速用起来,找到你想要的徽章代码 ctrl+c & ctrl+v ,再修改对应的 G ...

  8. thinkjdbc 关闭_ThinkJD: ThinkJD,又名ThinkJDBC,一个强大的开源JDBC/ORM操作库,让你尽可能简洁地用一行代码搞定数据库操作。...

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  9. WPF使用Linq 一行代码搞定数据绑定

    首先设置好DataGrid控件的相关属性,注意XAML代码文件中的列绑定要和源数据的列名一致,如: Binding="{Binding No}" 详细设置如下: this.data ...

最新文章

  1. PM应该找哪些副业?
  2. 6-1 水晶报表技术(上)
  3. poj1664(放苹果)
  4. eclipse修改项目访问前缀
  5. Android Studio 上Activity的互相切换
  6. 网页简单上传图片 imgareaselect插件
  7. visa linux 串口 通信,使用visa进行串口通信
  8. Spring Boot笔记-JPA自定义SQL语句参数为对象时如何操作
  9. Springboot 之 自定义配置文件及读取配置文件
  10. AO*算法详解,附例子和算法详细步骤
  11. 海洋迅雷vip帐号获取器 v 1.2
  12. 爬虫篇——采集单机游戏(网页游戏),爬取小游戏
  13. iPhone6 iPhone6 Plus 屏幕分辨率、尺寸的问题
  14. 开箱即用!中文关键词抽取(Keyphrase Extraction),基于LDA与PageRank(TextRank, TPR, Salience Rank, Single TPR)
  15. 常用的web服务器软件整理
  16. 温度传感器DS18B20介绍
  17. ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
  18. Unix操作系统历史
  19. vscode terminal主题配色
  20. 2012年1月房价排行

热门文章

  1. 16、子查询改写为表连接
  2. 1.2 内置异常类,异常方法
  3. Codeforces Beta Round #14 (Div. 2)【未完结】
  4. 寒假每日一题2022【week2 未完结】
  5. Django之静态文件
  6. com组件 安全提示_【加粉利器】百度基木鱼通用微信组件上线
  7. 【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)
  8. 假如,只是假如把支付宝存储服务器炸了,里面的钱还在么?
  9. ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock
  10. 漫画说算法--动态规划算法三(绝对通俗易懂,非常棒)