我使用Statsmodels生成OLS线性回归模型,以基于大约10个独立变量预测因变量。自变量都是绝对的。
我有兴趣仔细研究其中一个自变量的系数的重要性。共有4个类别,因此有3个系数 - 每个系数都非常重要。我还想看看所有三个类别的趋势的重要性。根据我的(有限的)理解,这通常使用Wald测试并将所有系数比较为0.
使用Statsmodels如何完成这项工作?我看到有一个OLS功能的Wald测试方法。使用此方法时,似乎必须传入所有系数的值。
我的方法如下......
首先,以下是所有系数:
np.array(lm.params) = array([ 0.21538725, 0.05675108, 0.05020252, 0.08112228, 0.00074715,
0.03886747, 0.00981819, 0.19907263, 0.13962354, 0.0491201 ,
-0.00531318, 0.00242845, -0.0097336 , -0.00143791, -0.01939182,
-0.02676771, 0.01649944, 0.01240742, -0.00245309, 0.00757727,
0.00655152, -0.02895381, -0.02027537, 0.02621716, 0.00783884,
0.05065323, 0.04264466, -0.13068456, -0.15694931, -0.25518566,
-0.0308599 , -0.00558183, 0.02990139, 0.02433505, -0.01582824,
-0.00027538, 0.03170669, 0.01130944, 0.02631403])
我只对params 2-4感兴趣(这是3个感兴趣的系数)。
coeffs = np.zeros_like(lm.params)
coeffs = coeffs[1:4] = [0.05675108, 0.05020252, 0.08112228]
检查以确保其有效:
array([ 0. , 0.05675108, 0.05020252, 0.08112228, 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. ])
看起来不错,现在要在测试中运行了!
lm.wald_test(coeffs) =
<class 'statsmodels.stats.contrast.ContrastResults'>
<F test: F=array([[ 13.11493673]]), p=0.000304699208434, df_denom=1248, df_num=1>
这是正确的做法吗?我真的可以使用一些帮助!
答案 0 :(得分:3)
线性假设的形式为R params = q
,其中R是定义参数线性组合的矩阵,q是假设值。
在我们想要测试某些参数是否为零的简单情况下,R矩阵在列中的1对应于参数的位置,而在其他地方为零,q为零,这是默认值。每行指定参数的线性组合,将假设定义为整体或联合假设的一部分。
在这种情况下,获取限制矩阵的最简单方法是使用单位矩阵的相应行
R = np.eye(len(results.params))[1:4]
然后,lm.wald_test(R)
将提供3个参数为零的联合假设的检验。
指定限制的一种更简单的方法是使用参数的名称并通过字符串列表定义限制。
模型结果类还有一个新方法wald_test_terms
,它自动为设计矩阵中的项生成wald测试,其中假设包括几个参数或列,如分类解释变量或多项式解释的情况变量。这在statsmodels master中可用,并将在即将发布的0.7版本中提供。