微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 HAC-Panel 聚类标准错误时,Statsmodel 三明治“所有组都为空,采取滞后”错误

如何解决使用 HAC-Panel 聚类标准错误时,Statsmodel 三明治“所有组都为空,采取滞后”错误

我有这样的数据:

帐号 DV 年月 前/后
1 121 oct 2019 2019 年 10 月 控制
1 124 11 月 2019 2019 年 11 月 post 控制
2 120 oct 2019 2019 年 10 月 处理
2 118 nov 2019 2019 年 11 月 post 处理

我运行了差异中的差异回归:

results2 = smf.ols("DV ~ C(group,Treatment('control')) * C(pre_period,Treatment(True)) + month + C(year)",df99).fit(cov_type='HAC-Panel',cov_kwds={'groups':df99['account'],'time':df99['yearmonth'],'maxlags':35})
print(results2.summary())

我收到以下错误消息。 我用一个或多或少相同(不同的实验)的不同数据集做同样的事情,但没有遇到问题。我的数据清理过程基本相同。此外,就在几天前,这工作正常。但它现在突然抛出了这个错误(我确实撤销了我所做的任何更改)。

我完全无法理解这个错误。即使在“sandwich_covariance.py”中搜索错误消息也没有发现任何内容

此人遇到了类似的问题,但没有提出解决方案:Python statsmodels robust cov_type='hac-panel' issue

  ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-43-0dcbaef1325b> in <module>
----> 1 results2 = smf.ols("dv ~ C(group,2                   df99).fit(cov_type='HAC-Panel','maxlags':35})
      3 print(results2.summary())

~/opt/anaconda3/envs/pyr/lib/python3.8/site-packages/statsmodels/regression/linear_model.py in fit(self,method,cov_type,cov_kwds,use_t,**kwargs)
    340 
    341         if isinstance(self,OLS):
--> 342             lfit = OLSResults(
    343                 self,beta,344                 normalized_cov_params=self.normalized_cov_params,~/opt/anaconda3/envs/pyr/lib/python3.8/site-packages/statsmodels/regression/linear_model.py in __init__(self,model,params,normalized_cov_params,scale,**kwargs)
   1584                     use_t = use_t_2
   1585                 # Todo: warn or not?
-> 1586             self.get_robustcov_results(cov_type=cov_type,use_self=True,1587                                        use_t=use_t,**cov_kwds)
   1588         for key in kwargs:

~/opt/anaconda3/envs/pyr/lib/python3.8/site-packages/statsmodels/regression/linear_model.py in get_robustcov_results(self,**kwargs)
   2530             groupidx = lzip([0] + tt,tt + [nobs_])
   2531             self.n_groups = n_groups = len(groupidx)
-> 2532             res.cov_params_default = sw.cov_nw_panel(self,maxlags,groupidx,2533                                                      weights_func=weights_func,2534                                                      use_correction=use_correction)

~/opt/anaconda3/envs/pyr/lib/python3.8/site-packages/statsmodels/stats/sandwich_covariance.py in cov_nw_panel(results,nlags,weights_func,use_correction)
    785     xu,hessian_inv = _get_sandwich_arrays(results)
    786 
--> 787     S_hac = S_nw_panel(xu,weights,groupidx)
    788     cov_hac = _HCCM2(hessian_inv,S_hac)
    789     if use_correction:

~/opt/anaconda3/envs/pyr/lib/python3.8/site-packages/statsmodels/stats/sandwich_covariance.py in S_nw_panel(xw,groupidx)
    723     S = weights[0] * np.dot(xw.T,xw)  #weights just for completeness
    724     for lag in range(1,nlags+1):
--> 725         xw0,xwlag = lagged_groups(xw,lag,groupidx)
    726         s = np.dot(xw0.T,xwlag)
    727         S += weights[lag] * (s + s.T)

~/opt/anaconda3/envs/pyr/lib/python3.8/site-packages/statsmodels/stats/sandwich_covariance.py in lagged_groups(x,groupidx)
    706 
    707     if out0 == []:
--> 708         raise ValueError('all groups are empty taking lags')
    709     #return out0,out_lagged
    710     return np.vstack(out0),np.vstack(out_lagged)

ValueError: all groups are empty taking lags

解决方法

正如我们的 statsmodel 救星 Josef 指出的那样。问题只是数据没有按照我在示例中显示的方式进行排序。

数据应按您正在聚类的组(在我的情况下为 account)排序,然后按时间排序。这是根据文档:

面板数据中的‘hac-panel’异方差性和自相关稳健标准误差。在这种情况下需要对数据进行排序,需要对每个面板单元或集群的时间序列进行堆叠。个人或组的时间序列的成员资格可以通过组指标或增加的时间段来指定。

如果由于某种原因您无法以这种方式对数据进行排序,正如 Josef 指出的那样,您可以使用 HAC-groupsum 代替,即使数据未排序也能正常工作。结果当然略有不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?