摘 要:多元线性回归是计量分析中最常用的方法之一,在经济学、金融学和管理学中运用广泛。线性回归方法依赖于矩阵和向量的运算,因此以矩阵运算为内核的Matlab是理想的编程平台。本文以开发多元线性回归函数作为例子,着重分析Matlab自定义函数的设计理念,同时突出varargin、nargin等特殊函数的代码编写。通过交叉运用线性代数、概率统计等数学工具,本文为计量研究人员提供了新的编程视角。
关键词:矩阵运算;Matlab;多元线性回归;函数编程
中图分类号:TP311.1 文献标识码:A
1 引言(Introduction)
普通最小二乘法(Ordinary Least Square,以下简称OLS)是最重要的多元线性回归法,该方法被广泛地应用于各种定量分析领域[1]。目前,许多主流计量分析软件都支持OLS回归法,比如SAS、R、Eviews等。Matlab也能够实现多元线性回归,其自带的Statistics Toolbox和Econometrics Toolbox提供了比较丰富的计量分析功能。既然有现成的回归分析软件,为什么还要自己编写原始代码?原因有以下两点。第一,计量经济学的发展是日新月异的,上述主流回归分析软件的更新无法跟上计量经济学的前进步伐。通过对原始代码的详细分解,能够让广大研究人员掌握回归分析的核心编程思路。第二,计量经济学的难点在于线性代数和概率统计,在实践中学习是掌握各种计量工具的关键。通过编程,有利于更好地吸收回归分析知识。
多元线性回归的代码设计包括数据储存、矩阵运算、结果输出等环节。本文先从Matlab自定义函数编程出发,利用varargin、nargin等特殊函数处理变量数据。之后利用Matlab强大的矩阵运算功能得到回归分析统计量,并将回归结果以表格形式输出。目前,国内有少量的文献涉及Matlab计量编程,这些研究存在一些可改进之处。首先,回归方程的变量数目应该由用户自定义。在计量经济学的实际应用中,控制变量的筛选是不确定的。借助Matlab内置的varargin、nargin等函数,本文的程序能够有效地处理多个解释变量,即可以实现变量数目的自定义。其次,回归结果应该给出完整的统计量,不应该仅仅提供系数大小。本文的Matlab程序给出了回归系数、标准误、P值等统计量,符合计量分析的学术标准。再次,回归结果可以用表格形式输出。Matlab的内置table函数提供了丰富的输出选项,在多元回归的情况下可以用table函数批量地输出各种统计量。
2 线性回归法的理论回顾(Review of linear regression)
用表示被解释变量,表示自变量,表示干扰项,那么总体线性方程可以表示为[2]:
用表示被解释变量的向量形式,表示自变量的矩阵形式,表示样本容量,我们可以得到回归系数:
在同方差条件下,显著性检验所需的标准误可以由下式计算得到[3]:
3 常用的内置函数(Essential built-in functions)
为了构建完整的多元计量分析程序,我们将代码分为多个模块。一个完整的计量分析程序可以被分为三个模块,数理统计模块、矩阵运算模块和结果输出模块。数理统计模块是回归参数检验的重要部分,我们需要借助Matlab内置的数学函数来计算各种统计量。矩阵运算是Matlab的强项[3],在求回归参数时需要用到diag函数。输出模块也非常关键,内置的table函数能够使回归结果以简洁的表格形式输出。在正式编写回归分析程序之前,我们先回顾一下将要涉及的Matlab内置函数。
3.1 用于显著性检验的tcdf函数
在计量分析中t分布具有重要作用,t分布可以用来检验某个解释变量的显著性。为了得到P值,我们需要计算t统计量。假定某个自变量的系数为,那么该变量的t统计量计算公式为,其中表示解释变量的标准误。利用Matlab内置的tcdf函数,我们可以得到任意自由度的t统计量。比如,某个变量的t值为-2.39,自由度为296,那么求相应P值的代码为(这里还用到了求绝对值的abs函数):
pValue=(1-tcdf(abs(-2.39),296))*2
3.2 矩阵运算与diag函数
多元回归方法涉及大量的矩阵运算,因此我们可以借助Matlab进行与矩阵相关的操作。比如,先用ones内置函数构造一个元素全为1的5×5矩阵,将该矩阵命名为mat1。再将该矩阵与其转置矩阵相乘,将得到的新矩阵命名为mat2。利用Matlab内置的diag函数,我们可以很快地得到矩阵mat2主对角线上的所有元素。上述过程的代码如下:
mat1=ones(5,5)
mat2=mat1*mat1'
diag(mat1)
3.3 用于生成表格的table函数
回顾国内已有的Matlab学术文献,一些学者采用文本对话框的形式输出计量回归结果。但是,在回归统计量数目极多的情况下,文本对话框无法像表格那样简洁地显示层次化信息。Matlab提供了强大的表格输出命令,通过内置的table函数我们可以很轻松地得到专业化的表格效果。假设有两个变量var1和var1,其中var1的取值为21和11,var2的取值为35和51。如果用table函数来实现var1和var2数据的表格形式输出,可以编写以下代码:
table([21;11],[35;51],...
'VariableNames',{'var1' 'var2'})
4 Matlab代码设计(Matlab code design)
4.1 自定义函数的开头
将这个Matlab多元线性回归程序命名为mvReg,因此将函数源代码以mvReg.m作为文件名保存。为了使该程序能够灵活处理多元线性回归的自变量数目,我们使用varargin函数记录输入的因变量和自变量。代码如下:
function mvReg(varargin)
4.2 回归系数的估计
由第二部分理论回归可知,回归系数的表达式可以简化为。首先,生成元素全为1的矩阵MatX。其次,用循环语句将矩阵MatX的元素替换为varargin中的数据。求回归系数的代码如下:
NumIV=nargin;
NumCross=length(varargin{1});
VecY=varargin{1};
MatX=ones(NumCross,NumIV);
for i=2:NumIV
MatX(:,i)=varargin{i};
end
VecB=inv(MatX'*MatX)*MatX'*VecY;
4.3 显著性检验的统计量
在回归分析当中,比较重要的统计量有t值、标准误和P值等。t值等于回归系数与标准的比值,表达式为。P值根据t分布得到,极小的P值表明不拒绝原假设“”。用VecSE、VecT和VecP分别表示标准误向量、t值向量和P值向量,计算各统计量的代码如下:
ehat=VecY-MatX*VecB;
VecSE=[diag(sum(ehat.^2)/…
(NumCross-NumIV)*inv(MatX'…
*MatX))].^0.5;
VecT=VecB./VecSE;
VecP=(1-tcdf(abs(VecT),…
NumCross-NumIV))*2;
4.4 将回归结果以表格形式输出
Matlab的内置函数table提供了强大的表格显示功能,因此本回归程序利用table函数来实现回归结果的输出。由于回归结果的表格涉及文本内容和数值内容,我们将数据以cell形式储存。代码如下:
VecVN=cell(nargin,1);
VecVN{1,1}='_cons';
for i=2:nargin
VecVN{i,1}=inputname(i);
end
Regression=table(VecVN,VecB,…
VecSE,VecP,'VariableNames',…
{'Variable','Coef','Std_Err','P'})
至此代码编写完毕,接下来对多元回归函数进行测试。先导入Excel数据文件,因变量为wage,自变量为educ和exper。多元回归的代码为:
mvReg(wage,educ,exper)
最终的回归结果如图1所示。输出结果的第一列为被估计的回归系数,解释变量educ的系数大小为0.64427,标准误为0.053。通过计算t统计量,我们可以得到其P值为0。所以,解释变量educ是非常统计性显著的。同理,解释变量exper的系数大小为0.070095,标准误为0.010978。该变量P值小数点的后三位都为零,因此变量exper在1%水平上统计性显著。参照主流统计软件的输出格式,我们用“_cons”表示截距。从图1的回归结果来看,截距P值小数点的后三位都为零,因此也是在1%水平上统计性显著。
图1 Matlab程序运行结果
Fig.1 Matlab' s output
在得到多元线性回归的结果之后,我们还可以利用内置函数来实现数据可视化的功能。在单个解释变量的情况下,scatter函数可以得到关于因变量与被解释变量的散点图。借助plot函数,还可以画出线性回归的拟合曲线。借助基本的数理统计知识,用户可以将这些图形功能充分应用到数据分析当中。值得注意的是,Matlab提供了大量的高级统计函数。基于这些内置函数,用户可以非常高效地编写属于自己的新程序。
5 结论(Conclusion)
Matlab作为以矩阵运算为特点的综合性编程平台,其高效快捷的代码命令能够处理众多的计量分析难题。本文借助Matlab线性代数模块、概率分布模块实现了多元线性回归法,并得到了重要的检验统计量。在此基础上,可以进一步增加更高级的计量分析功能,比如异方差稳健回归、多重共线性检验等。
参考文献(References)
[1] Eric Noreen.An Empirical Comparison of Probit and OLS
Regression Hypothesis Tests. Journal Of Accounting Research,
1988,26(1):119-133.
[2] Sanford Weisberg. Applied Linear Regression [M].John Wiley
& Sons,2013.
[3] David Thomas.Give Meaning to Matrices with MATLAB[J].
Journal of Computers in Mathematics and Science Teaching,
1990,9(3):73-85.
作者简介:
邬汝威(1988-),男,硕士生.研究领域:算法设计,面板数据
分析.