【发布时间】:2015-06-25 16:54:50
【问题描述】:
为了减少异常值的影响并获得更稳健的回归,我应用了一种 Winsorization 技术来修改系列 ('x') 的值。然后我将这些值与系列“y”进行回归。
这个模型的 R 平方自然要高得多,但我没有做出正确的比较。
如何使用 scipy 或 statsmodels 来获得 原始 数据的 R 平方,使用来自 winsorized 模型的 beta 估计?
【问题讨论】:
标签: pandas scipy statsmodels
为了减少异常值的影响并获得更稳健的回归,我应用了一种 Winsorization 技术来修改系列 ('x') 的值。然后我将这些值与系列“y”进行回归。
这个模型的 R 平方自然要高得多,但我没有做出正确的比较。
如何使用 scipy 或 statsmodels 来获得 原始 数据的 R 平方,使用来自 winsorized 模型的 beta 估计?
【问题讨论】:
标签: pandas scipy statsmodels
您需要自己计算,主要是通过复制 rsquared 的公式。
例如
>>> res_tmp = OLS(np.random.randn(100), np.column_stack((np.ones(100),np.random.randn(100, 2)))).fit()
>>> y_orig = res_tmp.model.endog
>>> res_tmp.rsquared
0.022009069788207714
>>> (1 - ((y_orig - res_tmp.fittedvalues)**2).sum() / ((y_orig - y_orig.mean())**2).sum())
0.022009069788207714
如果res_tmp.fittedvalues 是您的winsorized 模型的预测值或拟合值,并且y_orig 是您原始未更改的响应变量,则最后一个表达式将适用于您的情况。如果模型中有常数,则此 R 平方的定义适用。
注意:线性模型最常见的命名对应于y = X b,其中y 是响应变量,X 是解释变量。 IIUC,那么您在问题中颠倒了标签。
【讨论】: