清风数学建模课笔记-多元回归分析
回归分析
概念
回归分析:研究X和Y的相关性分析
-
相关性不是因果性
统计数据可以说明:游泳死亡人数越高,雪糕卖的越多。(两者呈显著正相关)
但是不能说 吃雪糕会增加游泳死亡风险 背后的原因应该是天气热 所以相关性不是因果性 在大部分情况下都不能直接说是因果性 -
Y是因变量 是我们研究的核心变量 -因为别人的改变而改变的变量
连续性指数变量
-GDP -线性回归
0-1型变量
-对错
定序变量
-1表示非常不喜欢 5表示非常喜欢
计数变量
-一段时间内客户到访的次数
生存变量
-有截断的数据 比如人的年龄60+ -
X是自变量
回归分析的任务就是,通过研究X和Y的关系,尝试去解释Y的形成机制,从而达到通过X去预测Y的目的。
回归分析的使命
- 识别重要变量 不是所有变量都是有用的 逐步回归法
- 判断相关性的方向 正相关or负相关
- 要估计权重(回归系数) 去量纲处理 影响的大小
回归分析的分类
类型 | 模型 | Y的特点 | 例子 |
---|---|---|---|
线性回归 | OLS,GLS | 连续数值型变量 | GDP |
0-1回归 | logistics回归 | 0-1变量 | 是否会违约 |
定序回归 | probit定序回归 | 定序变量 | 等级评定 优良差 |
计数回归 | 泊松回归 | 计数变量 | 每分钟车流量 |
生存回归 | Cox等比例风险回归 | 生存变量(截断数据) | 企业、产品的寿命 |
数据的分类
数据类型 | 常见建模方法 |
---|---|
横截面数据 | 多元线性回归 |
时间序列数据 | 移动平均、指数平滑、ARIMA、GARCH、VAR、协积 |
面板数据 | 固定效应和随机效应、静态面板和动态面板 |
横截面数据:在某一时点收集的不同对象的数据
例如:发放问卷得到的数据、各省份GDP的数据、大一新生今年体测得到的数据
时间序列数据:同一对象在不同时间连续观察所得到的数据
例如:每年生日的体重数据、中国历年来的GDP、在某地方每隔一小时测得的数据
面板数据:上面两者的综合
例如:2008-2018年,我国各省份GDP的数据
线性回归的学习
一元线性函数拟合-散点图-找最合适的
y
=
k
x
+
b
y=kx+b
y=kx+b 最小二乘法
假设x是自变量,y是因变量,且满足如下线性关系:
y
i
=
β
0
+
β
1
x
i
+
μ
i
y_{i}=beta_{0}+beta_{1}x_{i}+mu_{i}
yi=β0+β1xi+μi
β
0
beta_{0}
β0和
β
1
beta_{1}
β1为回归系数,
μ
i
mu_{i}
μi为无法观测的且满足一定条件的扰动项。
令预测值
y
i
^
=
β
0
^
+
β
1
^
x
i
widehat{y_{i}}=widehat{beta_{0}}+widehat{beta_{1}}x_{i}
yi
=β0
+β1
xi
可以直接把预测值想象成拟合值
其中
β
0
^
,
β
^
1
=
arg
min
β
0
,
β
1
(
∑
i
=
1
n
(
y
i
−
y
^
i
)
2
)
=
arg
min
β
0
,
β
1
(
∑
i
=
1
n
(
y
i
−
β
^
0
−
β
^
1
x
i
)
2
)
widehat{beta_{0}},widehat{beta}_{1}=underset{beta_{0}, beta_{1}}{arg min }left(sum_{i=1}^{n}left(y_{i}-widehat{y}_{i}right)^{2}right)=underset{beta_{0}, beta_{1}}{arg min }left(sum_{i=1}^{n}left(y_{i}-widehat{beta}_{0}-widehat{beta}_{1} x_{i}right)^{2}right) \
β0
,β
1=β0,β1argmin(i=1∑n(yi−y
i)2)=β0,β1argmin(i=1∑n(yi−β
0−β
1xi)2)
β
^
0
,
β
^
1
=
arg
min
β
0
,
β
1
(
∑
i
=
1
n
(
μ
^
i
)
2
)
widehat{beta}_{0}, widehat{beta}_{1}=underset{beta_{0}, beta_{1}}{arg min }left(sum_{i=1}^{n}left(widehat{mu}_{i}right)^{2}right)
β
0,β
1=β0,β1argmin(i=1∑n(μ
i)2)
我们称
μ
i
^
=
y
i
−
β
0
^
−
β
^
1
x
i
widehat{mu_{i}}=y_{i}-widehat{beta_{0}}-widehat{beta}_{1} x_{i}
μi
=yi−β0
−β
1xi为残差平方和
实际就是将优化问题转化为残差平方和最小
线性的概念 并不要求严格的线性关系,自变量和因变量可通过变量替换而转化成线性模型。
比如:lnx->z x+y->z 换元思想
所以需要对数据进行预处理 用Excel、matlab、stata等
回归系数的解释
引例:
假设x为某产品品质评分(连续数值),y为产品销量,现在对y和x进行一元线性回归。
如果得到结果
y
i
^
=
3.4
+
2.3
x
i
widehat{y_{i}}=3.4+2.3x_{i}
yi
=3.4+2.3xi,其中:
-
3.4
:在评分为0时,该产品的平均销量为3.4 -
2.3
:评分每增加一个单位,该产品的平均销量增加2.3
如果现在有两个自变量,
x
1
x_{1}
x1表示品质控分,
x
2
x_{2}
x2表示该产品的价格,得到回归模型为
y
i
^
=
5.3
+
0.19
x
1
i
−
1.74
x
2
i
widehat{y_{i}}=5.3+0.19x_{1i}-1.74x_{2i}
yi
=5.3+0.19x1i−1.74x2i,其中:
-
5.3
:在评分为0且价格为0时,平均销量为5.3。(实际情况下价格不可能为0,所以没有现实意义,写论文可以不写截距项) -
0.19
:在其他变量不变时,评分每增加一个单位,该产品的平均销量增加0.19 -
1.74
:同理可解释
对比可知,在引入了新的自变量价格之后,对回归系数的影响非常大,从3.4变成2.3
原因:遗漏变量导致的内生性
内生性的探究
假设一个模型有k个自变量,其中μ
i
mu_{i}
μi为扰动项,如果满足
μ
i
mu_{i}
μi和所有的自变量x都不相关,则称该回归模型具有外生性,反正则存在内生性,内生性会导致回归系数估计的不准确:不满足无偏(计算期望值,可以理解为代表性)和一致性(计算极限,排除n的大小)
在之前的例子中
μ
i
mu_{i}
μi包含了所有与y相关,但未添加到回归模型中的变量,如果这些变量与已经添加的自变量相关(例子中价格和销量相关),则存在内生性。
为了避免这种情况,需要尽可能多的列出因变量,或者用工具变量解决,即寻找一个新的变量来代替目前的变量。
代码实现:利用蒙特卡洛模拟证明内生性会造成回归系数的巨大误差
- 核心解释变量和控制变量
由于无内生性的假设太强,要求所有解释变量均与扰动项不相关是很难的,所以寻求一种弱化条件的办法,即讲解释变量分为核心解释变量与控制变量两类。
核心解释变量:我们最感兴趣的变量,因此我们特别希望得到对其系数的一致估计(当样本容量无限增大时,收敛于待估计参数的真值)。
控制变量:我们可能对于这些变量本身并无太大兴趣;而之所以把它们也放入回归方程,主要是为了 “控制住” 那些对被解释变量有影响的遗漏因素。
在实际应用中,我们只要保证核心解释变量与𝝁不相关即可。
回到公式上
y
i
=
β
0
+
β
1
x
1
i
+
β
2
x
2
i
+
⋯
+
β
k
x
k
i
+
μ
i
⇓
y
^
i
=
β
0
^
+
β
1
^
x
1
i
+
β
2
^
x
2
i
+
⋯
+
β
^
k
x
k
i
begin{array}{c} y_{i}=beta_{0}+beta_{1} x_{1 i}+beta_{2} x_{2 i}+cdots+beta_{k} x_{k i}+mu_{i} \ Downarrow \ hat{y}_{i}=widehat{beta_{0}}+widehat{beta_{1}} x_{1 i}+widehat{beta_{2}} x_{2 i}+cdots+widehat{beta}_{k} x_{k i} end{array}
yi=β0+β1x1i+β2x2i+⋯+βkxki+μi⇓y^i=β0
+β1
x1i+β2
x2i+⋯+β
kxki
-
β
^
0
widehat{beta}_{0}
-
β
m
^
(
m
=
1
,
2
,
⋯
,
k
)
widehat{beta_{m}}(m=1,2, cdots, k)
x
m
i
x_{mi}
y
i
y_{i}
实际上可以用偏导数来定义,在很多教材里也把多元线性回归模型中的回归系数称为偏回归系数。
β
m
^
=
∂
y
i
∂
x
m
i
widehat{beta_{m}}=frac{partial y_{i}}{partial x_{m i}}
βm
=∂xmi∂yi
关于取对数:
之前讲换元的时候有讲到可以取对数,其实在应用中经常用到对数概念。
伍德里奇的《计量经济学导论,现代观点》里,第六章176-177页有详细的论述;
取对数意味着原被解释变量对解释变量的弹性,即百分比的变化而不是数值的变化;
目前,对于什么时候取对数还没有固定的规则,但是有一些经验法则:
(1)与市场价值相关的,例如,价格、销售额、工资等都可以取对数;
(2)以年度量的变量,如受教育年限、工作经历等通常不取对数;
(3)比例变量,如失业率、参与率等,两者均可;
(4)变量取值必须是非负数,如果包含0,则可以对y取对数ln(1+y);
取对数的好处:
- 减弱数据的异方差性
- 如果变量本身不符合正态分布,取了对数后可能渐近服从正态分布
- 模型形式的需要,让模型具有经济学意义
具体文字解释:
- 一元线性回归:𝑦=𝑎+𝑏𝑥+𝜇,x每增加1个单位,y平均变化b个单位;
- 双对数模型:𝑙𝑛𝑦=𝑎+𝑏𝑙𝑛𝑥+𝜇,x每增加1%,y平均变化b%;
- 半对数模型:𝑦=𝑎+𝑏𝑙𝑛𝑥,x每增加1%,y平均变化b/100个单位;
- 半对数模型:𝑙𝑛𝑦=𝑎+𝑏𝑥,x每增加1个单位,y平均变化(100b)%。
虚拟变量X
当出现定性变量,比如性别,地域等,就需要把定性变量转化为定量变量,即虚拟变量。
例如:研究性别对于工资的影响
y
i
=
β
0
+
δ
0
Female
i
+
β
1
x
1
i
+
β
2
x
2
i
+
⋯
+
β
k
x
k
i
+
μ
i
y_{i}=beta_{0}+delta_{0} text {Female}_{i}+beta_{1} x_{1 i}+beta_{2} x_{2 i}+cdots+beta_{k} x_{k i}+mu_{i}
yi=β0+δ0Femalei+β1x1i+β2x2i+⋯+βkxki+μi
Female
i
=
1
text {Female}_{i}=1
Femalei=1表示第i个样本为女性;
Female
i
=
0
text {Female}_{i}=0
Femalei=0表示为男性
核心解释变量为:Female
控制变量为:地域、年纪等等
由于控制变量等等都是定值,这里全部记为C。
E
(
y
∣
Female
=
1
以及其他自变量给定
)
=
δ
0
×
1
+
C
E
(
y
∣
Female
=
0
以及其他自变量给定
)
=
δ
0
×
0
+
C
E
(
y
∣
Female
=
1
以及其他自变量给定
)
−
E
(
y
∣
Female
=
0
以及其他自变量给定
)
=
δ
0
begin{aligned} & E(y mid text { Female }=1 text { 以及其他自变量给定 })=delta_{0} times 1+C \ & E(y mid text { Female }=0 text { 以及其他自变量给定 })=delta_{0} times 0+C \ E(y mid text { Female }= & 1 text { 以及其他自变量给定 })-E(y mid text { Female }=0 text { 以及其他自变量给定 })=delta_{0} end{aligned}
E(y∣ Female =E(y∣ Female =1 以及其他自变量给定 )=δ0×1+CE(y∣ Female =0 以及其他自变量给定 )=δ0×0+C1 以及其他自变量给定 )−E(y∣ Female =0 以及其他自变量给定 )=δ0
因此
δ
0
delta_{0}
δ0可解释为:在其他自变量给定的情况下, 女性的平均工资与男性的平均工资的差异。
当然还要考虑其显著性才能说明问题。
为了避免完全多重共线性的影响,引入虚拟变量为分类数减一。
含有交互项的自变量
因变量对一个解释变量的偏效应(最正常的)、弹性(双对数模型)、半弹性(半弹性模型),有时取决于另一个解释变量的大小,比如有一个因子为
x
1
∗
x
2
x_{1}*x_{2}
x1∗x2,若系数>0,
x
1
x_{1}
x1越大,
x
2
x_{2}
x2的增加就会导致y上升越大,这就说明两个变量间有交互效应。
实操1
问题引例
数据的描述性统计
使用stata软件:
- 定量数据:summarize 变量1 变量2 … 变量n
- 定性数据:tabulate 变量名,gen(A)
返回对应的这个变量的频率分布表,并生成对应的虚拟变量(以A开头),很好用,可以在stata里直接生成并查看虚拟变量
做表/做图:使用excel的数据透视表/数据透视图功能
解释性回归分析-解决问题一
stata语法:regress y x1 x2 … xk 默认使用OLS:普通最小二乘估计法
Modle:SSR Residual:SSE Total:SST
df:自由度 MS:平均自由度
p值<0.05可以拒绝原假设(原假设H0:系数全都=0),才能通过联合显著性检验。
检验回归系数:用的t检验 原假设
H
0
H_{0}
H0:
β
i
=
0
beta_{i}=0
βi=0
p值<0.05代表在95%置信水平下,拒绝原假设,即该回归系数显著异于0。
当加入定性数据时:
运用前面讲的生成虚拟变量
reg 评价量 G1 G2 G3 G4
为了避免完全多重共线性的影响,引入虚拟变量为分类数减一。所以随机删除一个变量作为对照组,这里删除的是G4。
因此G1的回归系数为G1的评价量-G4的评价量,在其他变量不变时,段位为1的评价量比段位为4的评价量平均要(多/少 系数值)
当然需要注意显著性检验,只有通过显著性检验的自变量才有意义。
拟合优度低怎么办:
(1)回归分为解释型回归和预测型回归。预测型回归一般才会更看重
R
2
R^{2}
R2。(可以理解成拟合,
R
2
R^{2}
R2越大效果才越好)
解释型回归更多的关注模型整体显著性以及自变量的统计显著性和经济意义显著
性即可。
(2)可以对模型进行调整,例如对数据取对数或者平方后再进行回归。(数据维度的改变)
(3)数据中可能有存在异常值或者数据的分布极度不均匀。
调整后的拟合优度:
我们引入的自变量越多,拟合优度会变大。但我们倾向于使用调整后的拟合优度,如果新引入的自变量对SSE的减少程度特别少,那么调整后的拟合优度反而会减小。
R
2
=
1
−
S
S
E
S
S
T
S
S
E
=
∑
i
=
1
n
(
Y
i
−
Y
^
i
)
2
R
adjusted
2
=
1
−
S
S
E
/
(
n
−
k
−
1
)
S
S
T
/
(
n
−
1
)
(
k
为自变量的个数
)
begin{array}{l} R^{2}=1-frac{S S E}{S S T} quad S S E=sum_{i=1}^{n}left(Y_{i}-widehat{Y}_{i}right)^{2} \ R_{text {adjusted }}^{2}=1-frac{S S E /(n-k-1)}{S S T /(n-1)}(k text {为自变量的个数}) end{array}
R2=1−SSTSSESSE=∑i=1n(Yi−Y
i)2Radjusted 2=1−SST/(n−1)SSE/(n−k−1)(k为自变量的个数)
拟合值出现负值的原因:y分布极度不平衡
标准化回归系数-解决问题二
为了去除量纲的影响,考虑使用标准化回归系数。
对数据进行标准化,就是将原始数据减去它的均数后,再除以该变量的标差,计算得到新的变量值,新变量构成的回归方程称为标准化回归方程,回归后相应可得到标准化回归系数。
标准化系数的绝对值越大,说明对因变量的影响就越大(只关注显著的回归系数哦)。
stata语法:regress y x1 x2 … xk ,beta
- 常数项没有标准化系数,因为常数项的均值是本身,减去之后直接变成0了。
- 对数据进行标准化处理不会影响回归系数的标注误,也不会影响显著性。
扰动项要满足的条件
默认扰动项是球型扰动项。球型扰动项:满足“同方差”和“无自相关”两个条件。
但是横截面数据容易出现异方差的问题,时间序列数据容易出现自相关的问题。
异方差问题
如果扰动项存在异方差:
(1)OLS估计出来的回归系数是无偏、一致的。
(2)假设检验无法使用(构造的统计量失效了)。
(3)OLS估计量不再是最优线性无偏估计量(BLUE)。
检验异方差:
-
通过图形:
stata语法:rvfplot (残差与拟合值的散点图)
rvpplot x (残差与自变量x的散点图)
graph export a1.png,replace -
通过假设检验:
一般使用怀特检验H
0
H_{0}
H0:不存在异方差
stata语法(在回归结束后使用):estat imtest,white
p值<0.05,拒绝原假设,即存在异方差。
解决办法:
(1)OLS+稳健的标准误(因为假设检验失效了)
(2)GLS(原理:方差小的数据包含的信息较多,可以给方差大的数据更大的权重)缺点:不知道扰动项真实的协方差矩阵 存在偶然性
推荐使用(1)
stata语法: regress y x1 x2 … xk,robust
多重共线性
先前定性变量制造虚拟变量的时候,stata提出了一个变量来避免多重共线性。
多重共线性的存在会导致:(1)虽然
R
2
R^{2}
R2很大、F检验也很显著,但单个t检验却不显著。
(2)加入一个新的变量,对前面的系数估计值产生很大的影响。(类似于内生性)
检验多重共线性:
定义回归模型的
V
I
F
=
max
{
V
I
F
1
,
V
I
F
2
,
⋯
,
V
I
F
k
}
VIF=max left{VIF_{1}, VIF_{2}, cdots, VIF_{k}right}
VIF=max{VIF1,VIF2,⋯,VIFk}
如果VIF>10,则认为该回归方程有严重的多重共线性。
stata语法:estat vif
解决办法:
(1)如果是预测性回归,不用管多重共线性,只需要关注拟合优度就行了。
(2)如果多重共线性并不影响所关心变量的显著性,也可以不管,因为如果没有多重共线性,结果只会更显著。
(3)如果影响到所关心变量的显著性,需要增加样本容量(难),剔除导致严重共线性的变量(但是要注意内生性),或对建模进行修改。
逐步回归
向前逐步回归
将自变量逐个引入模型,每引入一个自变量后都要进行检验,显著时才加入回归模型。(缺点:随着以后其他自变量的引入,原来显著的自变量也可能又变为不显著了,但是,并没有将其及时从回归方程中剔除掉。)
stata语法:stepwise regress y x1 x2 … xk, pe(#1)
#1就是显著性水平,只将显著的加入模型中。(p值<#1)
向后逐步回归
与向前逐步回归相反,先将所有变量均
放入模型,之后尝试将其中一个自变量从模型中剔除,看整个模型解释因变量的变异是否有显著变化,之后将最没有解释力的那个自变量剔除;此过程不断迭代,直到没有自变量符合剔除的条件。(缺点:一开始把全部变量都引入回归方程,这样计算量比较大。若对一些不重要的变量,一开始就不引入,这样就可以减少一些计算。当然这个缺点随着现在计算机的能力的提升,已经变得不算问题了。)
stata语法:stepwise regress y x1 x2 … xk, pr(#2)
#2也是显著性水平,不显著就会被剔除模型。
说明
如果筛选后的变量太多了,可以减小#1或者#2,太少同理。
注:(1)自变量之间不能有完全多重共线性,与regress不同,需要手动剔除。
(2)可以在后面再加参数b和r,即标准化回归系数或稳健标准误
(3)向前逐步回归和向后逐步回归的结果可能不同。
(4)不要轻易使用逐步回归分析(数模论文没事),因为剔除了自变量后很有可能会产生新的问题,例如内生性问题。
(5)更加优秀的筛选方法:每种情况都尝试一次,最终一共有
C
k
1
+
C
k
2
+
⋯
+
C
k
k
=
2
k
−
1
C_{k}^{1}+C_{k}^{2}+cdots+C_{k}^{mathrm{k}}=2^{k}-1
Ck1+Ck2+⋯+Ckk=2k−1种可能。如果自变量很多,那么计算相当费时。(不太现实 一般不用 还是逐步回归就行)