0
点赞
收藏
分享

微信扫一扫

【Python计量】RESET模型设定偏误检验

求索大伟 2022-04-17 阅读 83
python

目录

一、导入数据

二、RESET检验

三、全套代码

对函数形式误设问题的一般检验:RESET(regression specification error test)

假设线性回归模型为

RESET检验的基本思路:如果怀疑非线性项被遗漏,那么就把非线性项引入方程,并检验其系数是否显著。

考虑做以下辅助回归:

检验拟合值的高次项系数是否联合等于0,即对:做F检验。

如果拒绝,说明模型中有高次项;反之,则接受,可使用线性模型。RESET检验的缺点是在拒绝的情况下,并不提供具体遗漏哪些高次项的信息,不能为我们该如何做提供一个现实的方向。

我们以伍德里奇《计量经济学导论:现代方法》的”第9章 模型设定和数据问题的深入探讨“的案例9.2为例,讲解如何进行RESET检验。

一、导入数据

import wooldridge as woo
import pandas as pd
import statsmodels.formula.api as smf

hprice1 = woo.dataWoo('hprice1')

二、RESET检验

我们估计住房价格模型如下:

RESET检验进行辅助回归,模型如下:

检验拟合值的高次项系数是否联合等于0,即对:做F检验。

#原OLS方程:
reg = smf.ols(formula='price ~ lotsize + sqrft + bdrms', data=hprice1)
results = reg.fit()

#RESET检验回归方程:
hprice1['fitted_sq'] = results.fittedvalues ** 2
hprice1['fitted_cub'] = results.fittedvalues ** 3
reg_reset = smf.ols(formula='price ~ lotsize + sqrft + bdrms +fitted_sq + fitted_cub', data=hprice1)
results_reset = reg_reset.fit()

#检验拟合值的高次项系数是否联合为0
hypotheses = ['fitted_sq = 0', 'fitted_cub = 0']
ftest_reset = results_reset.f_test(hypotheses)
print(ftest_reset)
'''
<F test: F=4.66820553494783, p=0.012021711442893317, df_denom=82, df_num=2>
'''

结果显示,p值<5%,在5%的显著性水平下,拒绝原假设,即存在模型设定偏误。

除了上述方法,我们还可以借助statsmodels.stats.outliers_influence的reset_ramsey函数直接进行RESET检验。

reset_ramsey(res, degree=5)
res:回归模型
degree:RESET检验回归方程所包含的最高次项,最小为2,默认为5

代码如下:

import statsmodels.stats.outliers_influence as smo
reset_output = smo.reset_ramsey(res=results, degree=3)
print(reset_output)
'''
<F test: F=4.668205534949062, p=0.012021711442880029, df_denom=82, df_num=2>
'''

三、全套代码

#导入相关库
import wooldridge as woo
import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.stats.outliers_influence as smo

#导入数据
hprice1 = woo.dataWoo('hprice1')

#原OLS方程:
reg = smf.ols(formula='price ~ lotsize + sqrft + bdrms', data=hprice1)
results = reg.fit()

#RESET检验回归方程:
hprice1['fitted_sq'] = results.fittedvalues ** 2
hprice1['fitted_cub'] = results.fittedvalues ** 3
reg_reset = smf.ols(formula='price ~ lotsize + sqrft + bdrms +'
                            ' fitted_sq + fitted_cub', data=hprice1)
results_reset = reg_reset.fit()

#检验拟合值的高次项系数是否联合为0
hypotheses = ['fitted_sq = 0', 'fitted_cub = 0']
ftest_man = results_reset.f_test(hypotheses)
print(ftest_man)

#自动进行RESET检验
reset_output = smo.reset_ramsey(res=results, degree=3)
print(reset_output)
举报

相关推荐

0 条评论