【Python计量】参数假设检验


在本文,我们学习变量的显著性检验(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α(nk1),若 t > t α ( n − k − 1 ) t>t_{\alpha}(n-k-1) t>tα(nk1),则拒绝原假设。

(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α(nk1),若 t < − t α ( n − k − 1 ) t<-t_{\alpha}(n-k-1) t<tα(nk1),则拒绝原假设。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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α(nk1),若 ∣ t ∣ > t α 2 ( n − k − 1 ) |t|>t_{\frac{\alpha}{2}}(n-k-1) t>t2α(nk1),则拒绝原假设。

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.0479staff0.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.0147ACT0.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是不显著的')
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值