Statsmodels-OLS群集标准错误(不接受DF的系列?)



我正在运行一个分析,该分析可以从BEA区域的聚类中受益。我以前没有在Statsmodels中使用过集群标准错误选项,所以我不清楚我是否混淆了语法,或者该选项已损坏。如有任何帮助,我们将不胜感激。

以下是代码的相关部分(注意topline_specs dict返回Patsy风格的公式):

#Capture topline specs
topline_specs={'GO':spec_dict['PC_GO']['Total']['TYPE']['BOTH'],
               'RV':spec_dict['PC_RV']['Total']['TYPE']['BOTH'],
               'ISSUER':spec_dict['PROP']['ISSUER']['TYPE']['BOTH'],
               'PURPOSE':spec_dict['PROP']['PURPOSE']['TYPE']['BOTH']}
#Estimate each model
topline_mods={'GO':smf.ols(formula=topline_specs['GO'],data=data_d).fit(cov_type='cluster',
                                                                       cov_kwds={'groups':data_d['BEA_INT']})}
topline_mods['GO']

回溯源于一个numpy调用。它返回以下内容:

ValueError: The weights and list don't have the same length.

关于集群标准错误的使用,我所能找到的一切看起来都像cov_kwds参数可以从容纳模型数据的DataFrame中获取一个Series。我错过了什么?

当使用公式创建模型时,缺失值处理默认为"drop",并且从给定给模型的所有数据数组中删除具有缺失观测值的行(__init__)。在非公式界面中,当前默认值是忽略缺少的值。

然而,目前还没有检查和自动删除稍后给出的数组中的缺失值,在这种情况下是cov_kwds中所需的数据。如果这是原始的一组观测值,但在因变量和解释变量中删除了一些观测值,则会出现长度不匹配,并引发报告的异常。

我重新开张了https://github.com/statsmodels/statsmodels/issues/1220因为在特殊情况下,当我们通过熊猫指数获得足够的信息时,可以处理缺失的值。

这里有一个变通方法,等待Josef提到的错误得到解决:

def cluster_fit(formula, data, group_var):
    fit = OLS.from_formula(formula, data=data).fit()
    to_keep = pd.RangeIndex(len(data)).difference(pd.Index(fit.model.data.missing_row_idx))
    robust = fit.get_robustcov_results(cov_type='cluster',
                                       groups=data.iloc[to_keep][group_var])
    return robust

用作res = cluster_fit('y ~ x + z', data=mydata, group_var='uid')

请注意,由于某种原因,结果将是RegressionResults而不是RegressionResultsWrapper(不确定这是否有任何区别)。

相关内容

最新更新