为了减少异常值的影响并获得更强大的回归,我应用了一种winsorization技术来修改一系列('x')的值。然后我对系列'y'回归这些值。
这个模型的R平方自然要高得多,但我没有做出正确的比较。
如何使用scipy或statsmodels使用来自winsorized模型的beta估计值来获取原始数据的R平方?
答案 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,然后你在你的问题中颠倒了标签。