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

时间:2015-11-14 19:26:19

标签: python statsmodels

我正在运行一项分析,可以从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']

追溯源于一个不正常的电话。它返回以下内容:

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

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

2 个答案:

答案 0 :(得分:2)

使用公式创建模型时,缺失值处理默认为“drop”,缺少观察值的行将从提供给模型的所有数据数组中删除(__init__)。在非公式接口中,默认值当前是忽略缺失值。

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

我重新打开https://github.com/statsmodels/statsmodels/issues/1220因为在我们通过pandas索引获得足够信息的特殊情况下可以处理缺失值。

答案 1 :(得分:0)

这里有一个解决方法,等待Josef提到的bug得到解决:

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(不确定这是否有任何区别)。