Statsmodels - 线性回归模型 (OLS) 中系数趋势显着性的 Wald 检验
Statsmodels - Wald Test for significance of trend in coefficients in Linear Regression Model (OLS)
我使用 Statsmodels 生成了一个 OLS 线性回归模型来预测基于大约 10 个自变量的因变量。自变量都是分类的。
我有兴趣仔细研究其中一个自变量的系数的显着性。有 4 个类别,所以有 3 个系数——每个系数都非常重要。我还想看看所有 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])
我只对参数 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>
这是正确的方法吗?我真的需要一些帮助!
线性假设的形式为 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 版本中提供。
我使用 Statsmodels 生成了一个 OLS 线性回归模型来预测基于大约 10 个自变量的因变量。自变量都是分类的。
我有兴趣仔细研究其中一个自变量的系数的显着性。有 4 个类别,所以有 3 个系数——每个系数都非常重要。我还想看看所有 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])
我只对参数 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>
这是正确的方法吗?我真的需要一些帮助!
线性假设的形式为 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 版本中提供。