如何在Statsmodels中获得鲁棒回归(RLM)的R平方?

时间:2015-07-27 14:00:12

标签: python regression linear-regression statsmodels

当谈到测量合身度时 - R-Squared似乎是一种普遍理解(并且被接受)的衡量标准"简单"线性模型。 但是在statsmodels(以及其他统计软件)的情况下RLM不包括R平方和回归结果。 有没有办法让它得到计算"手动",或许与Stata中的方式类似?

或者是否可以根据sm.RLS生成的结果使用/计算其他度量?

这是Statsmodels正在制作的内容:

import numpy as np
import statsmodels.api as sm

# Sample Data with outliers
nsample = 50
x = np.linspace(0, 20, nsample)
x = sm.add_constant(x)
sig = 0.3
beta = [5, 0.5]
y_true = np.dot(x, beta)
y = y_true + sig * 1. * np.random.normal(size=nsample)
y[[39,41,43,45,48]] -= 5   # add some outliers (10% of nsample)

# Regression with Robust Linear Model
res = sm.RLM(y, x).fit()
print(res.summary())

哪个输出:

                    Robust linear Model Regression Results                    
==============================================================================
Dep. Variable:                      y   No. Observations:                   50
Model:                            RLM   Df Residuals:                       48
Method:                          IRLS   Df Model:                            1
Norm:                          HuberT                                         
Scale Est.:                       mad                                         
Cov Type:                          H1                                         
Date:                 Mo, 27 Jul 2015                                         
Time:                        10:00:00                                         
No. Iterations:                    17                                         
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
const          5.0254      0.091     55.017      0.000         4.846     5.204
x1             0.4845      0.008     61.555      0.000         0.469     0.500
==============================================================================

2 个答案:

答案 0 :(得分:0)

由于OLS返回R2,所以我建议使用简单的线性回归将实际值与拟合值进行回归。无论拟合值来自何处,这种方法都会为您指示相应的R2。

答案 1 :(得分:0)

为什么不使用model.predict获得r2?例如:

r2=1. - np.sum(np.abs(model.predict(X) - y) **2) / np.sum(np.abs(y - np.mean(y)) ** 2)