【问题标题】:Statsmodels Plotting mean confidence intervals based on heteroscedastic consistent standard errorsStatsmodels 绘制基于异方差一致标准误差的平均置信区间
【发布时间】:2014-02-19 05:58:46
【问题描述】:

这个问题类似于confidence and prediction intervals with StatsModels,但有一个细微差别:

我的数据是异方差的,我想使用 statsmodels 提供的任何一种异方差一致标准误差(HC0_se、HC1_se 等)绘制均值的置信区间。对于每个拟合值,我无法轻松访问此信息(尽管很容易获得每个系数的间隔)。它似乎也不像标准平均置信区间数据那样包含在 stats.outliers 的结果汇总表中。

两个问题:

  1. 有人知道我该怎么做吗?
  2. 在线性回归结果对象中也可以使用异方差一致的协方差矩阵通常用于什么?为什么提供它?

非常感谢

【问题讨论】:

  • 我不太明白你的第二个问题。是不是:为什么我们要使用异方差稳健协方差?
  • 第二个问题是新手问题。如:我将使用 hc 协方差矩阵做什么? (可能不适合 SO,因为它与编程无关)?
  • 是的,这更像是一个 stats.stackexchange 问题。我将添加一个简短的答案。

标签: python statistics statsmodels


【解决方案1】:

稳健的标准误差或协方差尚未完全集成到模型中。目前主要是模型估计后的附加组件。

我们将能够在 statsmodels 的下一版本中将默认协方差更改为任何可用的稳健协方差估计器,并且已经在 OLS 的当前主版本中。然后所有其他结果,t_test、wald_test 等,将使用已定义为默认值的稳健或非稳健协方差。 当前版本:http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.get_robustcov_results.html

对于预测标准误:

我认为当cov_params 是一个强大的三明治估计器时,计算结果是相同的,但我还没有针对 Stata 验证这一点。请参阅我答案的最后一部分 Mathematical background of statsmodels wls_prediction_std

因此,在 statsmodels 0.5 中,无法直接获得具有稳健协方差的预测误差,您需要复制该函数以使用所需的 cov_params。

我们为什么要使用稳健的协方差

如果观测值存在异方差或相关性,则 OLS 具有一致或无偏的参数估计,但参数估计的标准协方差矩阵是“错误的”。所以我们需要得到一个对异方差性、相关性或两者都具有鲁棒性的协方差矩阵。

许多现代计量经济学教科书建议始终使用稳健的协方差估计器,当我们不确定异方差性或观察之间的相关性的正确规范时。这在经济学中几乎总是如此。

最简单的情况是异方差http://en.wikipedia.org/wiki/Heteroscedasticity-consistent_standard_errors,但在时间序列中,我们可能存在模型中未包含的自相关,在重复测量或面板数据中,我们通常在集群或面板内具有相关性。在这些情况下,稳健协方差为我们提供了一致的标准误差。

这同样适用于其他模型,例如 Poisson 中的聚类稳健标准误差或广义估计方程 (GEE) 中的 Logit 模型。

【讨论】:

  • 很好的解释。我对 predict_mean se 感兴趣,因为它在我链接的 SO 帖子中使用。 statsmodels.stats.outliers_influence 中的代码使用 predict_mean_se = np.sqrt(infl.hat_matrix_diag*res.mse_resid)。如果存在异方差,这个标准错误是否不正确?如果我想针对异方差调整这个 mean_se,我将如何调整代码?
  • 使用 OLS 帽子矩阵是不正确的,因为它没有使用稳健的协方差。如果我们像wls_prediction_std 和文森特的回答一样直接使用covb,那么我们可以在计算中使用适合我们数据的任何稳健协方差作为covb。我猜想对 OLS hatmatrix 有一个修正可以直接使用,但我从未尝试过。
  • 对于predict_mean,我们只需要 predvar 的第二部分(在文森特的回答中)
  • 只是想确认我理解:使用 predvar = (exog * np.dot(covb, exog.T).T).sum(1) 计算 predstd 和 tppf,然后我可以计算predict_mean 区间为:fitted_values +/- tppf*predstd,其中fitted_values 来自OLS 结果对象(例如:results.fitted_values())。这是正确的吗?
【解决方案2】:

我不相信有一种方法可以指定您想使用哪个协方差矩阵来计算预测标准误差。请注意,预测代码仍位于 statsmodels 存储库的“沙盒”文件夹中。我相信 Github 拉取请求会受到欢迎:)

无论如何,这应该很简单。这是您链接到的预测函数的底层代码的链接。本质上,您只需要替换要使用的协方差矩阵而不是 covb 变量。

然后,您可以使用您在其他 SO 帖子中看到的相同 matplotlib 花絮。

https://github.com/statsmodels/statsmodels/blob/master/statsmodels/sandbox/regression/predstd.py#L27

predvar = res.mse_resid/weights + (exog * np.dot(covb, exog.T).T).sum(1)
predstd = np.sqrt(predvar)
tppf = stats.t.isf(alpha/2., res.df_resid)
interval_u = predicted + tppf * predstd
interval_l = predicted - tppf * predstd
return predstd, interval_l, interval_u

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 2016-05-24
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2020-12-26
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多