文章目录
在本文,我们学习变量的显著性检验(t检验)。
对于多元线性回归模型,方程的总体线性关系是显著的,并不能说明每个解释变量对被解释变量的影响是显著的,因此,必须对每个解释变量进行显著性检验,以决定是否作为解释变量被保留在模型中。如果某个变量对被解释变量的影响并不显著,应该将其剔除,以建立更简单的模型。变量显著性检验应用最为普遍的是t检验。
一、假设检验
假设检验(hypothesis test)是利用样本信息判断假设是否成立的过程,它是先对总体参数提出某种假设,然后利用样本信息判断假设是否成立。
1.1 原假设和备择假设
原假设:研究者想收集证据予以反对的假设,也称零假设,用 H 0 H_0 H0表示。
备择假设:研究者想收集证据予以支持的假设,也称研究假设,用 H 1 H_1 H1表示。
1.2 单边检验
如果备择假设具有特定方向,并含有“>” 或 “<” 的假设,称为单侧检验或单边检验。
(1)单边右侧检验:拒绝域在分布的右侧尾部
单侧检验: H 0 : μ ≤ μ 0 , H 1 : μ > μ 0 H_0:\mu \leq \mu_0,H_1:\mu> \mu_0 H0:μ≤μ0,H1:μ>μ0,或者: H 0 : μ = μ 0 , H 1 : μ > μ 0 H_0:\mu = \mu_0,H_1:\mu> \mu_0 H0:μ=μ0,H1:μ>μ0
给定一个显著性水平 α \alpha α,得到临界值 t α ( n − k − 1 ) t_{\alpha}(n-k-1) tα(n−k−1),若 t > t α ( n − k − 1 ) t>t_{\alpha}(n-k-1) t>tα(n−k−1),则拒绝原假设。
(2)单边左侧检验:拒绝域在分布的左侧尾部
单侧检验: H 0 : μ ≥ μ 0 , H 1 : μ < μ 0 H_0:\mu \geq \mu_0,H_1:\mu< \mu_0 H0:μ≥μ0,H1:μ<μ0,或者: H 0 : μ = μ 0 , H 1 : μ < μ 0 H_0:\mu = \mu_0,H_1:\mu< \mu_0 H0:μ=μ0,H1:μ<μ0
给定一个显著性水平 α \alpha α,得到临界值 t α ( n − k − 1 ) t_{\alpha}(n-k-1) tα(n−k−1),若 t < − t α ( n − k − 1 ) t<-t_{\alpha}(n-k-1) t<−tα(n−k−1),则拒绝原假设。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5KlHGEb-1659423356285)(https://files.mdnice.com/user/29206/8669d2fe-530f-45ae-b9fe-004e33499e0a.png)]
1.3 双边检验
如果备择假设没有特定的方向,只含有“≠”的假设,称为双侧检验或双边检验。
双侧检验: H 0 : μ = μ 0 , H 1 : μ ≠ μ 0 H_0:\mu = \mu_0,H_1:\mu \neq \mu_0 H0:μ=μ0,H1:μ=μ0
给定一个显著性水平 α \alpha α,得到临界值 t α 2 ( n − k − 1 ) t_{\frac{\alpha}{2}}(n-k-1) t2α(n−k−1),若 ∣ t ∣ > t α 2 ( n − k − 1 ) |t|>t_{\frac{\alpha}{2}}(n-k-1) ∣t∣>t2α(n−k−1),则拒绝原假设。
1.4 练习
一家研究机构估计,某城市中家庭拥有汽车的比率超过30%。为验证这一估计是否正确,该研究机构随机抽取了一个样本进行检验。试陈述和书写用于检验的原假设和备择假设。
分析一下:设该城市中家庭拥有汽车的比率真值是y。显然,研究者想收集证据予以支持的假设是 “ 该城市中家庭拥有汽车的比率超过30% ” ,因此建立的原假设和备择假设可以书写为:
H0:y = 30% (或 y ≤ 30%)
H1:y > 30%
二、案例:单边右侧检验
我们以伍德里奇《计量经济学导论:现代方法》的“第4章 多元回归分析:推断”的案例4.1为例,利用WAGE1中526个工人的观测数据,研究其工资和受教育程度、工作经验和任职时长的关系。构建多元线性回归模型如下:
l
o
g
(
w
a
g
e
)
=
β
0
+
β
1
e
d
u
c
+
β
2
e
x
p
e
r
+
β
3
t
e
n
u
r
e
+
u
log(wage)=\beta_0+\beta_1educ+\beta_2exper+\beta_3tenure+u
log(wage)=β0+β1educ+β2exper+β3tenure+u
- log(wage):工资的对数,也记作lwage
- educ:受教育程度
- exper:工作经验
- tenure:任职时长
构建模型代码如下:
import wooldridge as woo
import statsmodels.formula.api as smf
from scipy import stats
wage1 = woo.dataWoo('wage1')
#建立回归模型:
reg = smf.ols(formula='lwage ~ educ + exper + tenure', data = wage1)
results = reg.fit()
print(results.summary())
模型回归结果如下:
l
o
g
(
w
a
g
e
)
^
=
0.2844
+
0.0920
e
d
u
c
+
0.0041
e
x
p
e
r
+
0.0221
t
e
n
u
r
e
+
u
\widehat{log(wage)}=0.2844+0.0920educ+0.0041exper+0.0221tenure+u
log(wage)
=0.2844+0.0920educ+0.0041exper+0.0221tenure+u
工作经历exper的斜率系数为0.0041,本例将进一步检验该系数是否为0。
采用单侧备择建设检验方法,即: H 0 : β e x p e r = 0 , H 1 : β e x p e r > 0 H_0:\beta_{exper} = 0,H_1:\beta_{exper}> 0 H0:βexper=0,H1:βexper>0
1.1 比较t统计量和临界值大小
代码如下:
#1.计算样本量
n = len(wage1)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_exper = results.params['exper']/ results.bse['exper'] #params获得系数,bse获得系数标准误
#t_exper = results.tvalues['exper'] #tvalues直接获得t统计量
#4.计算拒绝临界值
a = 0.05 #显著性水平为5%
c = stats.t.ppf(1-a,df)
#5.比较t统计量和临界值大小
if t_exper > c:
print('拒绝原假设,exper的回归系数显著大于0')
else:
print('不能拒绝原假设,exper不显著')
本例中,t统计量计算结果为2.39,拒绝临界值为1.648,t统计量大于拒绝临界值,所以拒绝原假设,exper系数显著大于0。
1.2 比较p值和显著性水平大小
我们也可以采用p值的方法。
#1.计算样本量
n = len(wage1)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_exper = results.params['exper']/ results.bse['exper'] #params获得系数,bse获得系数标准误
#t_exper = results.tvalues['exper'] #tvalues直接获得t统计量
#4.计算p值
pval = stats.t.cdf(-abs(t_exper), df)
#pval = 1-stats.t.cdf(abs(t_exper), df)
#5.比较p和显著性水平大小
a = 0.05 #显著性水平为5%
if pval < a:
print('拒绝原假设,exper的回归系数显著大于0')
else:
print('不能拒绝原假设,exper不显著')
p值为0.0086,小于5%的显著性水平,因此拒绝原假设。
三、案例:单边左侧检验
我们以伍德里奇《计量经济学导论:现代方法》的“第4章 多元回归分析:推断”的案例4.2为例,利用MEAP93中美国学生数学成绩相关的数据,研究标准化数学成绩的影响因素,包括教师年薪、注册学生人数和配备教师数量。构建多元线性回归模型如下:
m
a
t
h
10
=
β
0
+
β
1
t
o
t
c
o
m
p
+
β
2
s
t
a
f
f
+
β
3
e
n
r
o
l
l
+
u
math10=\beta_0+\beta_1totcomp+\beta_2staff+\beta_3enroll+u
math10=β0+β1totcomp+β2staff+β3enroll+u
- math10:标准化十分制数学测验成绩
- totcomp:平均教师年薪
- staff:每千名学生配备教师数量
- enroll:注册学生人数
构建模型代码如下:
import wooldridge as woo
import statsmodels.formula.api as smf
from scipy import stats
meap93 = woo.dataWoo('meap93')
#建立回归模型:
reg = smf.ols(formula='math10 ~ totcomp + staff + enroll', data = meap93)
results = reg.fit()
print(results.summary())
模型回归结果如下:
m
a
t
h
10
^
=
2.2740
+
0.0005
t
o
t
c
o
m
p
+
0.0479
s
t
a
f
f
−
0.0002
e
n
r
o
l
l
\widehat{math10}=2.2740+0.0005totcomp+0.0479staff-0.0002enroll
math10
=2.2740+0.0005totcomp+0.0479staff−0.0002enroll
enroll的回归系数为-0.0002,本例将进一步检验该系数是否为0。
采用单侧备择建设检验方法,即: H 0 : β e n r o l l = 0 , H 1 : β e n r o l l < 0 H_0:\beta_{enroll} = 0,H_1:\beta_{enroll}< 0 H0:βenroll=0,H1:βenroll<0
1.1 比较t统计量和临界值大小
代码如下:
#1.计算样本量
n = len(meap93)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_enroll = results.tvalues['enroll'] #tvalues直接获得t统计量
#4.计算拒绝临界值
a = 0.05 #显著性水平为5%
c = stats.t.ppf(a,df)
#4.比较t统计量和临界值大小
if t_enroll < c:
print('拒绝原假设,enroll的回归系数显著小于0')
else:
print('不能拒绝原假设,enroll不显著')
enroll变量的t统计量为-0.91,而在5%显著性水平下的t分布的拒绝临界值是-1.65,t统计量大于临界值,所以不能拒绝原假设,enroll变量在5%的显著性水平下不是显著的。
1.2 比较p值和显著性水平大小
#1.计算样本量
n = len(meap93)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_enroll = results.tvalues['enroll'] #tvalues直接获得t统计量
#4.计算p值
pval = stats.t.cdf(-abs(t_enroll), df)
#pval = 1-stats.t.cdf(abs(t_enroll), df)
#5.比较p和显著性水平大小
a = 0.05 #显著性水平为5%
if pval < a:
print('拒绝原假设,enroll的回归系数显著大于0')
else:
print('不能拒绝原假设,enroll不显著')
p值为0.18,大于5%的显著性水平,因此不能拒绝原假设。
四、案例:双边检验
我们以伍德里奇《计量经济学导论:现代方法》的“第4章 多元回归分析:推断”的案例4.3为例,利用GPA1数据,研究大学成绩的影响因素,包括高中成绩、每周缺课次数和大学能力测验分数。构建多元线性回归模型如下:
c
o
l
G
P
A
=
β
0
+
β
1
h
s
G
P
A
+
β
2
A
C
T
+
β
3
s
k
i
p
p
e
d
+
u
colGPA=\beta_0+\beta_1hsGPA+\beta_2ACT+\beta_3skipped+u
colGPA=β0+β1hsGPA+β2ACT+β3skipped+u
- colGPA:大学成绩
- hsGPA:高中成绩
- ACT:大学能力测验分数
- skipped:每周缺课次数
构建模型代码如下:
import wooldridge as woo
import statsmodels.formula.api as smf
from scipy import stats
gpa1 = woo.dataWoo('gpa1')
#建立回归模型:
reg = smf.ols(formula='colGPA ~ hsGPA + ACT + skipped', data = gpa1)
results = reg.fit()
print(results.summary())
模型回归结果如下:
c
o
l
G
P
A
^
=
1.3896
+
0.4118
h
s
G
P
A
+
0.0147
A
C
T
−
0.0831
s
k
i
p
p
e
d
\widehat{colGPA}=1.3896+0.4118hsGPA+0.0147ACT-0.0831skipped
colGPA
=1.3896+0.4118hsGPA+0.0147ACT−0.0831skipped
本例检验系数是否等于0。
采用双侧备择建设检验方法,即: H 0 : β i = 0 , H 1 : β i ≠ 0 H_0:\beta_i = 0,H_1:\beta_i\neq 0 H0:βi=0,H1:βi=0
1.1 比较t统计量和临界值大小
#1.计算样本量
n = len(gpa1)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_values = results.tvalues #tvalues直接获得t统计量
#4.计算在显著性水平为5%的情况下的t分布双侧检验拒绝临界值
a = 0.05 #显著性水平为5%
c = stats.t.ppf(1-a/2,df) #右侧临界值
#4.比较t统计量和临界值大小
print(f't统计量为:\n{t_values}')
print(f'左侧临界值:{-c},右侧临界值:{c}')
for i in range(len(t_values)-1):
if abs(t_values[i+1]) > c:
print(f'拒绝原假设,{t_values.index[i+1]}的回归系数显著不等于0')
else:
print(f'不能拒绝原假设,{t_values.index[i+1]}不显著')
结果为:
t统计量为:
Intercept 4.191039
hsGPA 4.396260
ACT 1.393319
skipped -3.196840
dtype: float64
左侧临界值:-1.977431212292894,右侧临界值:1.9774312122928936
拒绝原假设,hsGPA的回归系数显著不等于0
不能拒绝原假设,ACT不显著
拒绝原假设,skipped的回归系数显著不等于0
根据计算,hsGPA的t统计量为4.40,远大于右侧临界值1.98,因此是显著的;ACT的t统计量为为1.39,小于右侧临界值1.98,在统计上不显著;skipped的t统计量为-3.2,小于左侧临界值-1.98,或者说其绝对值大于右侧临界值1.98,因此是显著的。
1.2 比较p值和显著性水平大小
我们也可以采用p值的方法。
#1.计算样本量
n = len(gpa1)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_values = results.tvalues #tvalues直接获得t统计量
#4.计算p值
pval = 2*stats.t.cdf(-abs(t_values), df) #双侧检验
#pval = 2*(1-stats.t.cdf(abs(t_values), df))
#5.比较p和显著性水平大小
a = 0.05 #显著性水平为5%
for i in range(len(t_values)-1):
if pval[i+1] < a:
print(f'拒绝原假设,{t_values.index[i+1]}的回归系数显著不等于0')
else:
print(f'不能拒绝原假设,{t_values.index[i+1]}不显著')
1.2 调用t_test()进行t检验
除了自己手动进行t检验,我们可以调用results.t_test()方法直接进行t检验,该方法只能进行双侧检验。
hypotheses ='hsGPA =0,ACT=0,skipped =0'
t_test = results.t_test(hypotheses)
print(t_test)
结果如下:
Test for Constraints
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
c0 0.4118 0.094 4.396 0.000 0.227 0.597
c1 0.0147 0.011 1.393 0.166 -0.006 0.036
c2 -0.0831 0.026 -3.197 0.002 -0.135 -0.032
==============================================================================
五、案例:对各变量回归系数进行t检验,假设值不为0
尽管:
H
0
:
β
i
=
0
H_0:\beta_i = 0
H0:βi=0是最常见的假设,但有时候我们也想检验$\beta_i $是否等于其他某个给定的常数。比如如果我们研究hsGPA对colGPA的回归系数是否大于0.4,我们的原假设和备择假设为:
H
0
:
β
h
s
G
P
A
=
0.4
,
H
1
:
β
h
s
G
P
A
>
0.4
H_0:\beta_{hsGPA}= 0.4,H_1:\beta_{hsGPA}> 0.4
H0:βhsGPA=0.4,H1:βhsGPA>0.4
results.tvalues返回的是原假设为系数等于0的t统计量,当原假设系数等于其他常数,需要通过公式计算t统计量,公式如下:
t
统计量
=
估计值
−
假设值
标准误
t统计量=\frac{估计值-假设值}{标准误}
t统计量=标准误估计值−假设值
1.1 比较t统计量和临界值大小
代码如下:
#1.计算样本量
n = len(gpa1)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_hsGPA = (results.params['hsGPA']-0.4)/ results.bse['hsGPA'] #params获得系数,bse获得系数标准误
#4.计算拒绝临界值
a = 0.05 #显著性水平为5%
c = stats.t.ppf(1-a,df)
#4.比较t统计量和临界值大小
if t_hsGPA > c:
print('拒绝原假设,hsGPA的回归系数显著大于0.4')
else:
print('不能拒绝原假设,hsGPA的回归系数大于0.4是不显著的')
结果为:
不能拒绝原假设,hsGPA的回归系数大于0.4是不显著的
我们计算得到t统计量为0.126,而t分布在5%显著性水平下的双侧临界值为1.66,t统计量小于临界值,所以不能拒绝原假设,即hsGPA对colGPA的回归系数大于0.4是不显著的。
1.2 比较p值和显著性水平大小
代码如下:
#1.计算样本量
n = len(gpa1)
#2.计算自由度
df = n-3-1 #n为计算的样本量,3为自变量个数
#3.计算t统计量
t_hsGPA = (results.params['hsGPA']-0.4)/ results.bse['hsGPA'] #params获得系数,bse获得系数标准误
#4.计算p值
pval = stats.t.cdf(-abs(t_hsGPA), df)
#pval = 1-stats.t.cdf(t_hsGPA), df)
#5.比较p和显著性水平大小
a = 0.05 #显著性水平为5%
if pval < a:
print('拒绝原假设,hsGPA的回归系数显著大于0.4')
else:
print('不能拒绝原假设,hsGPA的回归系数大于0.4是不显著的')