经济专业与经济计量学

经济专业的学生要分析统计资料,在标准的统计学课程中所学到的描述性统计,绝大多数学生无法用到实际经济分析中。经济学家发展出比较适用于分析经济资料的统计方法就是经济计量学。若想要比较深入的应用统计方法到经济学研究中,必须进一步学习经济计量学。

—— 原文作者:袁建文(广东财经大学经济学院)

一般人对经济学的直觉反应是:那是一个很高深的理论。然而我们也应该知道,经济学的研究虽然是从严谨抽象的理论出发,但因为研究对象是人的行为,经济学也必须相当“实际”,当我们评断经济理论是否成立时,当然是要看它符不符合人的行为。因此很大一部分经济学研究是以实际资料的观察和分析为中心的。经济专业学生必须有分析资料的能力,经济专业大学课程中,就都有分析资料所需的统计学课程。然而许多学生在标准的统计学课程中所学到的,多是基本的描述性统计以及简单的统计运算,以这样的课程内容,纵使经过一年的学习,绝大多数学生还是无法将所学到的统计方法用到实际经济分析之中。更何况经济专业大学课程需要统计学的地方并不太多,使得大多数学生不太清楚为什么需要必修统计学。在这里我就先稍微描述一下标准统计学课程的内容,然后再说明问题的所在。

经济计量学和统计学

统计学教材大致可分为两部分:概率理论和统计推断,概率理论包括随机变量、密度函数、基望值、变异数等的操作和运算,以及对一些统计分布(正态分布以及相关的卡方分布、t 分布、F 分布等)性质的探讨,这些概率概念和其运算都是统计学第二个部分的推断的基础。而统计推论主要是让我们了解总体和从总体所抽出的样本数据的区别,然后解释如何使用样本数据计算各种统计量,以将样本中的信息,简明而正确的表现出来,从而让我们推断出总体的性质。统计推断的内容大致可分为两部分:参数的估计(估计那些表现总体特征的参数数值和假设检验(检验我们对总体性质先期设定的一些假设)。

不论文科还是理科的学生,所学的统计学入门课程都不脱这样的课程安排,我们自然不难想象,在应用这种通常教育型的统计学到经济学研究中时,便很可能有适用性的问题。这个问题可分为两方面来说,第一,统计学可能教得不够深入,所学到的统计方法不足以应付形形色色的经济资料;第二,统计学常常是以自然科学方面的应用为主,对社会科学的研究可能不完全适用。

统计学初学者所碰到的这些问题,其实也就是五六十年前,经济学家刚开始尝试大规模地对经济资料进行统计分析时所碰到的问题。在解决统计学适用性的数十年过程中,经济学家逐渐发展出比较适用于分析经济资料的许多统计方法(或称计量方法,主要以强调解释变量和应变量之间因果关系的回归模型为重心),也就形成了经济学中的一个独立领域———经济计量学。我们应可从这个经济计量学创始的过程里看出,若想要比较深入的应用统计方法到经济学研究中,我们必须进一步学习经济计量学才可。

经教育部经济学教学指导委员会讨论通过、教育部批准,经济计量学已被确定为经济学各类专业的八门核心课程之一。在美国,经济计量学在大多数经济系的课程中都列为必修课程,在经济系硕士和博士(以及不少管理学院的博士)课程中,经济计量学是和微观经济理论以及宏观经济理论并列为必修课的课程。硕士和博士生通常也都会多修一些中高级的计量课程,这是因为经济系硕士和博士研究生除了少数专攻纯理论的人外,其论文几乎毫无例外的都包含有资料分析及论证研究的部分,因此大多数的经济学者从做学生开始,就要有处理计量方法的能力和经验。

经济计量学和计算机

经济计量学对计算机的需求度在经济学的各个领域中可能是最高的,理由非常简单,经济计量学本来就是为分析资料而兴起的学问,而大规模资料的处理正是计算机的主要功能。另一方面,在经济研究日趋复杂精细的今天,高度非线性的经济模型大行其道,对这些模型的估计必须采用数值方法,其实际计算也只有依赖计算机。事实上,一些经济计量学家使用数值方法及计算机的深度,可能让计算机工程师都感到惊讶。近年来经济计量学对计算机的需要更不限于数据处理和模型估计,许多复杂计量方法的发展往往只能以仿真试验来评估,而仿真试验也只有在计算机中才得以进行。

由于计算机的普及,大多数人对计算机都有所认识,几乎所有的大学生对微软公司的软件,如视窗操作系统或是 Office 系列商用软件都有或多或少的接触。我认为对一个经济计量学的初学者,能够使用 Office 系列中的 Excel 或是同类的电子表格软件中回归分析就算是入门了,其学习成本并不高。我也极力建议初学者一定要尽快对计算机上手,用真实资料做一些简单的估计和实证分析,因为只有实际动手,才能培养出对计量研究的感觉,也才能够体会经济理论在实际世界中的用途。用不了几年后,发现真的能在实际资料中找到验证,你会相当感动的。

若要使用更深入的经济计量方法,当然是需要较电子表格软件更为专业的统计或计量软件,但我仍要强调,电子表格软件在任何阶段的计量分析中都有其功用,因为只要数据数目不是太大,电子表格软件可非常轻松地帮我们整理资料并进行图表绘画等初步分析,而这类分析总是很有助于我们对资料的了解,对资料的了解是所有严谨实证分析的基础。

市面上个人计算机版的统计软件(诸如 SAS、SPSS、Minitab 等)不胜枚举,会用的人也很多,这些统计软件对从事实论证计量研究有帮助,不少经济计量学教科书也都推荐使用这些统计软件。事实上,很多经济计量学家的学术研究也全都是靠这些统计软件来进行的。然而也有更多的学者偏好较为专业的经济计量软件(诸如 Eviews、STATA、TSP、RATS 等),这类计量专业软件在经过多年的改进后,都已相当“平易近人”。一个有普通计算机知识的初学者,通常在一个星期内即可学会一个这类的软件。和统计软件相比,计量专业软件的优点是,其操作手册乃至于界面上所用的名词术语多从经济计量学而来,初学者会觉得比较亲切,也比较不容易发生术语意义不明的状况,使用者想要搜寻某个特定的计量方法也比较容易找到。

前述的统计或经济计量软件都是所谓的软件包,软件包的使用手续大致如下:使用者在使用之前,必须要先确定要用的计量方法在这些软件包中存在,然后根据操作手册键入对应的指令,输入资料,并叫出所要用的计量方法执行之,计算结果便会以标准的形式输出。一般来说,软件包的优点是简单方便,缺点则是任何软件包都不可能有使用者所想用的所有计量方法,基本上也不容许使用者对既有的计量方法作较大的修改,因此软件包有相当大的局限性。为补这种缺点,近年来有名的软件包都不断加入新指令,以让使用者比较容易地修改原有的计量方法,或设计一些概念的计量方法。这些新指令实际上已可说是一种程序语言,其操作方式是让使用者用它将所要的计量方法写成计算机程序后执行之。不少比较深入的实证计量研究结果,都是研究者在软件包原有的计量方法之上,增加修正的计算机程序后所产生。

也有不少的经济计量学家是根本不用软件包的,他们偏好以独立的(不附属于任何软件包的)程序语言编写所有要用的计量方法。这类程序语言除了软件工程师所通用的 C、Fortran、Pascal 等之外,还有为经济计量学家所专属的 GAUSS、Matlab、R  CRAN Task View: Econometrics 等个人计算机程序语言。所谓经济计量学家专属的程序语言通常是指该语言的基本组成元素不是数字,而是向量或矩阵,这种结构适合编写计量方法的计算机程序。

学习程序语言通常较花时间,以 R 语言为例,可能需要至少三天的时间去熟悉其基本操作手续,而想要达到可编写出有意义的计算机程序的地步,则需视程序的难易程序花一天到一个星期的时间,测试计算机程序的正确性通常还需更多的时间。学习程序语言的时间成本的确是比较高的,但我们也要知道程序语言的最大优点在于它的弹性;一个经济计量研究者若能掌握一种程序语言,则计算机能帮他做的事基本上将不再有任何的限制。

将传统的商业数据分析工具应用于教学,无可避免的出现在与企业实际工作平台不匹配的情况。譬如:SAS / SPSS / MATLAB 均为严谨高效的数据统计商业应用型工具,好比数据库中的 ORACLE;然而大部分大数据初创企业往往由于资金原因无法购置,而是采用 R 与 Python 这些开源型的数据科学平台,因此,造成企业需要对二次培养的成本。采用 R 与 Python 更匹配基础科学人才培养目标。数据科学与大数据在各细分领域并发性爆发,充分展现了开源生态圈协同开发模式的强大优势与趋势。同时标志着“半成品化”应用工具时代的到来 —— 借助 R 语言与 Python 提供的广泛的计量经济学 CRAN 与数据科学相关的第三方库,大数据应用统计分析人才能更为灵活的为企业定制化更匹配企业业务模型的数据分析模型。同时,R 与 Python 逐步成为贯穿数据科学与大数据,机器学习,深度学习,新一代人工智能,乃至区块链技术一脉相承的语言工具,除了基本数据以外,更多的对象被纳入统计范围内。

计算机是经济计量学不可或缺的组成份子,我建议在学会电子表格软件后,经济计量学的学生应该按照实际需求,在统计软件包、经济计量软件包、以及经济计量专属个人计算机程序语言三类难易程度不同的计算机软件中择一学习。我也建议,一旦决定要学哪一种计算机软件之后,一定要尽可能将之学个透彻,对计算机软件的学习一次搞定是最有效率的做法。

经济计量学和教学

经济计量学在上世纪 90 年代以前的发展大量借用矩阵代数,而近年来则相当广泛地引用概率论数理分析。正因为如此,经济计量学的初学者常为矩阵代数符号所困扰,而要涉猎较深入的经济计量学的过程中,往往觉得数学背景不足,总有一种信心不够不踏实的感觉,以致于写作业、答考题、乃至于读文章时,一碰到未曾见过的数学术语,就觉得相当心虚,最后也就对经济计量学产生了敬而远之的态度。

我在这里便对这个数学问题提出一些看法和建议。首先我要对经济计量学的初学者说,矩阵代数并没有想象中的那么难,事实上经济计量学所需要的矩阵代数,和数学系学生所必修的线性代数课程不太相同。我们应该知道,一般线性代数课程强调的是一个抽象代数体系的建立,学习一个抽象体系可能需要较多的数学直觉(也就是一般人所说的数学细胞),所以大多数文科学生可能不习惯。但是,学习经济计量学所要用到的矩阵代数,对数学背景的要求其实并不是很高,其内容主要是矩阵代数的基本运算规则以及为数不多的运算结果而已。我认为如果教材完备,一个人纵使完全靠自修学矩阵代数,一两个星期也就够了。

矩阵代数让一般初学者头痛的地方是在和统计学观念结合起来以后才发生的,然而我也要指出,并不是因为矩阵代数融合统计学之后,就变成一种困难度加倍的新学问。问题的产生通常只是反应初学者对矩阵代数和统计学原本就已有的问题而已,也就是说,初学者或是对矩阵代数尚不很熟悉,或是对统计学的一些概念还不十分透彻。解决这个问题的方法非常简单,就是多看多做,设法让自己对矩阵代数更为熟悉,并利用这个机会对那些原来只是一知半解的统计学概念也顺便搞懂。很多初学者在通过这一关之后发现,不仅矩阵代数通了,统计学的概念也补强了不少,对统计学变得加倍有信心。

概率理论对经济计量学所产生的问题比较复杂。近一二十年来经济计量理论的发展主力是在时间数列理论方面,翻开近十多年来的主要经济学期刊,经常看到的是单位根检定、不稳定数列、共整合分析、结构改变等名词,这些都是时间数列经济计量学的主要内容,而研究时间数列经济计量理论所需要的数学工具主要就是概率理论。概率理论和矩阵代数的性质极为不同,矩阵代数算是数学中层次较低较浅的“技术”,而概率理论则属于数学中层次较高的“分析”。而时间数列经济计量学所需要的概率理论,就是在数学系或是统计系的课程中来说,也属硕士以上的水准,所以要掌握概率理论以研究时间数列经济计量学,相当程度的教学训练是避免不了的。

幸运的是,时间数列经济计量学在经过多年的发展后逐步成熟,其所需要的概率理论的范围也逐渐确定,已经有不少时间数列经济计量学参考书,将所需要的概率理论做了有系统的整理和介绍,后进人员便不再需要直接去读由数学系教授所写的概率理论教科书,这大大节省了进入这个领域所需的时间成本。我们要知道,数学家感兴趣的概率理论课题,和经济计量学家所需要的不尽相同(这和数学系所教的线性代数和经济计量学所需要的矩阵代数不尽相同是同样道理),经济计量学学生要学习高等概率理论本来就没有比较利益,如果还要花时间去追随数学家所要求的抽象化和一般化,不仅事倍功半,所学到的概率理论还不见得能在经济计量研究中派得上用场。

经济计量学在经济研究中角色

经济学的研究论文,除了小部分属于纯理论的数理推演外,大都包含了实证研究,以证明实际资料中确有支持作者论点的证据。任何理论不论讲起来多么有道理,若是得不到实际资料的佐证,当然是不易被大众接受的。但我们也应注意到,资料是死的,使用资料看资料的人却是活的,分析资料的方式有千百种,我们应该不会太惊讶地看到下述两种情况:同样的一笔资料可被用来左证完全对立的理论;资料中原本并没有支持作者论点的证据,但经过人为的包装组合后却变成有。而当我们评估一篇实证论文的贡献时,除了要看资料是不是能够(最好是强有力的)支持作者的论点外,我们还要判断作者对资料的处理和分析是不是正确的,以避免上述情况的发生。换句话说,我们对论文中所使用计量方法的好坏要给予很大的关注。

有时候原始资料太过纷杂琐碎而看不出所以然来,要经过仔细的筛选处理后,支持某些论点的证据才能显现出来,有时候我们更需根据资料特性,以发展出新的计量方法,这些对计量方法的深入讨论,都变成一篇论文的重要组成部份,和论文的理论部分具有同样的重要性。正因为如此,经济计量学在现代经济学中具有举足轻重的地位,西方几乎每一个经济学家都有处理计量方法的能力和经验。也因为研究人口的众多,经济计量学的发展也就日行千里。

Reticulate:R + Python 实现互操作

R 语言和 Python 已成为数据科学科研工作人员的标准配置。现在,对于数据科学科研人员而言,R 语言Python 终于不再是一个二选一的方案。CRAN 已于2018年3月21日收录 reticulat 包(1.6版本),它包含了用于 Python 和 R 之间协同操作的全套工具,在 R 和 Rstudio 中均可使用。主要包括:

  1. 支持多种方式在 R 环境中调用 Python。包括 R Markdown、加载 Python 脚本、导入 Python 模块以及在 R 会话中交互式地使用 Python。
  2. 实现 R 和 Python 对象之间的转换(例如:R 和 Python 数据框、R 矩阵与 NumPy 数组之间)。
  3. 灵活绑定到不同版本的 Python,包括虚拟环境和 Conda 环境。

在 R 会话中嵌入了 Python 会话,从而实现了无缝的、高性能的互操作性。如果你是使用 Python 进行某些工作的 R 开发人员或使用两种语言的数据科学团队的成员,那么 reticulate 包可以极大地简化你的工作流程。

R Markdown 中应用 Python

reticulate 包内置了许多用于 Python 对象类型转换的方法,包括 NumPy 数组和 Pandas 数据框。 例如,你可以使用 Pandas 读取和操作数据,然后使用 ggplot2 轻松绘制 Pandas 数据框:

导入 Python 模块

可以使用 R 函数:import() ,导入任何 Python 模块:

importing python os module
Importing Python os module

可以通过 $ 运算符访问 Python 模块和类中的函数和其他数据(类似于与 R 列表,环境或引用类进行交互的方式)

引用 Python 脚本

可以使用函数:source_python() 获取任何 Python 脚本,就像使用 R 脚本一样。

Python REPL

如果你想以交互方式使用 Python,则可以调用函数:repl_python(),该函数提供了嵌入在 R 会话中的 Python REPL。 在 Python REPL 中创建的对象,可以通过 reticulate 导出 py 对象,并在R中进行调用:

数据类型转换

当调用 Python 时,R 数据类型会自动转换为它们等效的 Python 类型。 当值从 Python 返回到 R 时,它们会被转换回 R 类型。 类型转换关系如下:

最后,你可以从 reticulate 网站上了解更多关于 R 语言与 Python 互操作的教程:

GitHub地址项目GitHub地址

RStudio 2018 大会资料下载

2018 年 R 语言盛会:RStudio 大会官方发布了会议的全部资料。大会发布了呈现在各种主题上的网络研讨会和视频,涵盖软件包,产品(包括开源和商业),邀请演讲嘉宾,以及常规问答录音 —— 所有材料将免费提供。R 语言作为数据科学,数理统计学的专业核心学科,本次大会更将材料分类为:

  • RStudio 基础
  • RStudio 连接
  • Shiny 交互数据分析处理平台基础
  • Shiny 进阶
  • 数据科学基础
  • 高级数据科学
  • sparklyr R 语言到 Spark 连接软件库

是一份非常有价值的学习与科研材料。

GitHub地址项目GitHub地址

启程R语言之旅

R 语言是结合了 S 编程语言的计算环境,可用于实现对数据的编程;它有很强大的数值分析工具,对于处理线性代数、微分方程和随机学的问题非常有用。通过一系列内建函数和库,你可以用 R 语言学习数据可视化,特别是它还有很多图形前端。同时,R 语言最近刚刚拥有了 TensorFlow 接口,目前最好的 R 语言版本是 R Studio,其优点在于:

  • R 很灵活;
  • R 很强大;
  • R 不仅是个统计计算工具包,它还是一门编程语言;
  • R 可以针对问题的形式设计程序;
  • R 可以高效地处理和存储数据。

R 语言的代码通用性较好,微调任务后只需要再微调代码就可以直接应用。Vihar Kurama 的这篇教程,能让你快速开始 R 语言的学习旅程,执行入门 R 语言的一系列过程,包括:

  • R 安装
  • R Studio 应用
  • R 交互使用
  • R 基本命令
  • R 变量定义
  • R 数据类型
  • R 算术运算
  • R 数据结构
  • R 程序控制
  • R 函数
  • R 数据可视化

选择合适的 CRAN 镜像,下载并安装 R 语言环境,便能执行教程所有代码,完成入门训练:

GitHub地址项目GitHub地址

RStudio发布官方TensorFlow接口

继 Python 大举向深度学习框架 TensorFlow 靠拢时,R 语言似乎一直处于落后的位置。日前,RStudio 博客终于发文,称其已开发出适合 R 语言用户的 TensorFlow 接口,R 语言的用户也可以方便地使用 TensorFlow 了。博客还介绍了接口中的包、工具,以及学习资源等,用户可以通过 TensorFlow for R 门户来访问相关资源。TensorFlow 作为开源的机器智能软件库,已逐步成为新一代人工智能的事实标准。RStudio 发布的到 TensorFlow 的 R 接口,通过高层的 Keras 与 Estimator APIs,使用户能完全控制并访问 TensorFlow 核心 API

虽然 TensorFlow 和深度学习在图像识别、语音识别等领域里已经有了令人瞩目的成果,但它在一些其他领域:如生物医疗和时序分析中仍然没有得到广泛应用。随着 TensorFlow 中 R 语言接口的全面推出,更多的可能性已经出现。

Python与R数据科学与机器学习软件包流行榜

根据 PyPI(Python 软件包索引)统计,目前共有 126,921 个 Python 软件包,由于扩展 Python 在包括数据科学,机器学习方面在内的各领域的功能。而统计语言 R,经过长期的开源社区积累,也有相当数量的 CRAN 包以扩展其在特定领域的统计分析,数据科学,与机器学习能力。 Data Incubator 通过统计 Stack Overflow 以及在 Github / CRAN 上的下载评星量,统计出 PythonR,两种语言在数据科学与机器学习方面最为流行的软件包排行榜。对于新入门的科研人员,可以通过参考该排行榜,优先选择最为常用及重要的包开始数据科学与机器学习的科研工作。其中,Python 在数据科学方面(完整排行)排名前五的软件包分别是:

  1. numpy
  2. tensorflow
  3. pandas
  4. ipython
  5. scikit-learn

上述的 Python 数据科学扩展软件包此前已经过多次介绍:

R 语言在机器学习方面(完整排行)排名前五的软件包分别是:

  1. Caret – 分类与回归训练扩展软件包,包含了数据分割、预处理、功能选择、使用重采样进行模型调整、可变重要性估计等工具
  2. randomForest – 随机森林算法模型包
  3. e1071 – 支持向量机(SVM)算法模型包
  4. rpart – 分类与回归树算法模型包
  5. nnet – 单隐藏层神经网络算法模型包

R语言统计分析与机器学习(90学时)

R为统计员,数据分析师,数据科学家提供数据统计与高级分析的语言及开发环境,同时采用复杂的图形模式体现分析结果。通过本课程,学生将利用R语言对数据库数据进行调整。学习如何通过R语言拓展数据库进行预测及分析的知识与技巧。了解如何在SQL与R中独立或者数据/任务并行模式中运行R语言脚本。同时,在大数据背景下通过丰富的动手操作实验,了解如何用R语言实现:

  • 获取数据(从各种数据源将数据导入程序);
  • 整理数据(编码缺失值、修复或删除错误数据)
  • 注释数据(以记住每段数据的含义)
  • 总结数据(通过描述性统计量了解数据的概况)
  • 数据可视化(一图胜千言)
  • 数据建模(解释数据间的关系,检验假设)
  • 整理结果(创建具有出版水平的表格和图形)