statsmodels 中有什么方法可以获得回归中使用的最终观察结果?

Any way in statsmodels to obtain final observations used in a regression?

回归经常会丢失一些观测值,因为它们缺少一个或多个回归量字段。例如:

In [30]: len(df)  #df is our dataframe
Out[30]: 39243

In [31]: model = sm.OLS(df[var_name_y], df[var_names_x], missing="drop")
         result = model.fit()

In [32]: len(result.fittedvalues)
Out[32]: 38013

在这里,我们删除了 1230 个观测值,每个观测值都缺少一个或多个回归变量。

有什么方法可以访问在回归中实际使用的 DataFrame - 也就是说,在回归删除丢失的观察结果后仍然保留的较小的 38013 大小?例如,这在各种 SAS 回归例程中可用。我一直在梳理 API 但找不到任何东西。我需要这些数据来根据回归中使用的实际数据生成各种诊断。

当然,我可以在回归之前自己删除正确的行,如下所示:

In [58]: len(df)
Out[58]: 39243

In [59]: df2 = df.dropna(subset=var_name_y + var_names_x)
In [60]: len(df2)
Out[60]: 38013

In [64]: model = sm.OLS(df2[var_name_y], df2[var_names_x],missing="drop")
         result = model.fit()
In [65]: len(result.fittedvalues)
Out[65]: 38013

然后我提供给回归的 DataFrame 已经是删除了所有缺失观察值的那个。但我希望避免这种情况,尤其是在我处理更大的数据集时。有没有更好的方法来做到这一点,特别是通过 OLS 模型 class 或拟合的 RegressionResultsWrapper 输出以编程方式访问 post-回归 DataFrame

获得您所问内容的最简洁方法似乎依赖于 model.data,正如 user333700 在评论中所建议的那样。与 user333700 所说的不同,model.data seems to have deliberately exposed as public interface 由 statsmodels 开发人员提供。

特别是,model.data.missing_row_idx 提供了你所要求的since 2012...所以虽然没有记录,但它似乎相对稳定。

示例:

In [3]: model = OLS(pd.DataFrame([[1, 2], [3, 4], [5, float('nan')]]), [2, 5, 4], missing='drop')

In [4]: model.data.missing_row_idx
Out[4]: [2]