替代模型的 R 平方
R-Squared of alternative model
为了减少离群值的影响并获得更稳健的回归,我应用了winsorization 技术来修改序列的值('x')。然后我根据系列 'y'.
回归这些值
这个模型的R-squared自然要高很多,但我没有做正确的比较。
我如何使用 scipy 或 statsmodels 获得 原始 数据的 R 平方,使用来自 winsorized 模型的 beta 估计值?
您需要自己计算,基本上是通过复制 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
是您的缩尾模型的预测值或拟合值,并且 y_orig
是您最初未更改的响应变量,那么最后一个表达式将适用于您的情况。如果模型中有常数,则适用 R 平方的定义。
注意:线性模型最常见的命名对应y = X b
,其中y是响应变量,X是解释变量。 IIUC,那么你把问题中的标签颠倒了。
为了减少离群值的影响并获得更稳健的回归,我应用了winsorization 技术来修改序列的值('x')。然后我根据系列 'y'.
回归这些值这个模型的R-squared自然要高很多,但我没有做正确的比较。
我如何使用 scipy 或 statsmodels 获得 原始 数据的 R 平方,使用来自 winsorized 模型的 beta 估计值?
您需要自己计算,基本上是通过复制 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
是您的缩尾模型的预测值或拟合值,并且 y_orig
是您最初未更改的响应变量,那么最后一个表达式将适用于您的情况。如果模型中有常数,则适用 R 平方的定义。
注意:线性模型最常见的命名对应y = X b
,其中y是响应变量,X是解释变量。 IIUC,那么你把问题中的标签颠倒了。