【发布时间】:2017-04-23 18:04:09
【问题描述】:
仅对非缺失数据运行回归并使用聚类标准错误的最简洁、最 Python 的方法是什么?
假设我有一个 Pandas 数据框 all_data。
可行的笨方法(制作一个不丢失数据的数据框):
我可以制作一个没有丢失数据的新数据框,制作模型并拟合模型:
import statsmodels.formula.api as smf
available_data = all_data.loc[:,['y', 'x', 'groupid']].dropna(how='any')
model = smf.ols('y ~ x', data = available_data)
result = model.fit(cov_type = 'cluster', cov_kwds={'groups': available_data['groupid']})
这感觉有点笨拙(尤其是当我用不同的右手边变量到处做这件事时。)而且我必须确保我的统计公式与数据框变量匹配。
但是有没有办法使用缺少的参数使其工作?
我可以通过设置缺失的参数来制作模型并拟合模型。
m = smf.ols('y ~ x', data = all_data, missing = 'drop')
result_nocluster = m.fit()`
这对于默认的同方差标准错误非常有效, 但我不知道如何使用集群标准错误进行这项工作?如果我跑:
result = m.fit(cov_type = 'cluster', cov_kwds = {'groups': all_data['groupid']})
我收到错误 ValueError: The weights and list don't have the same length. 大概是缺少观察的行没有从 all_data['groupid'] 中删除,所以它抛出了一个错误。
【问题讨论】:
-
目前在三明治协方差计算中没有调整以解决观测值下降的问题。因此,使用 dropna 显式删除观察的第一种方法是唯一可用的方法。 (我认为只要groups系列与原始数据具有相同的索引,支持这一点并不难。)
-
旁白:如果要比较具有不同解释变量的模型,那么最好在所有模型中删除相同的观察值,这样比较统计数据就不会受到数据集变化的影响。
标签: python linear-regression missing-data statsmodels standard-error