R-Squared的替代模型

时间:2015-04-18 21:12:43

标签: pandas scipy statsmodels

为了减少异常值的影响并获得更强大的回归,我应用了一种winsorization技术来修改一系列('x')的值。然后我对系列'y'回归这些值。

这个模型的R平方自然要高得多,但我没有做出正确的比较。

如何使用scipy或statsmodels使用来自winsorized模型的beta估计值来获取原始数据的R平方?

1 个答案:

答案 0 :(得分:2)

你需要自己计算,主要是复制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,然后你在你的问题中颠倒了标签。