【发布时间】:2015-10-17 18:18:27
【问题描述】:
在衡量拟合优度时,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
==============================================================================
【问题讨论】:
-
由于 RLM 是使用迭代加权最小二乘法估计的,您可以尝试复制 WLS 实例
wls_results = WLS(mod.endog, mod.exog, weights=mod.weights).fit(),其中mod是拟合后的 RLM 模型。对此没有任何保证。 WLS 结果的 rsquared 具有加权残差的 rsquared,这将是降低离群值权重的度量。但是,如果权重不同,我认为您不能通过 rsquared 比较模型。 -
正确答案在这里github.com/statsmodels/statsmodels/pull/1341,其中包括基于SAS定义的rsquared。
-
谢谢,
mod = sm.RLS(y, x); r2_wls = sm.WLS(mod.endog, mod.exog, weights=mod.fit().weights).fit().rsquared确实有助于获得 R2=0.948。与OLS=0.731 的 R2 相比。看起来“好得令人难以置信”:-) -
感谢链接 - 在 github 搜索类似问题时没有看到它。补丁中的函数产生 R2=0.721。略低于
OLS的 R2... 但BIC从 181 下降到 177(这是一个重大转变吗?)。是否有其他措施可以证明 RLS 在数字上清楚地显示“更合适”? -
我刚刚也发现了这个stat.ethz.ch/pipermail/r-help/2008-November/179773.html。首先,PR 1341 还修复了健壮的一些错误,这些错误在当前 RLM 中未使用,但扩展需要。 1341 中的 rsquared 是基于似然性(或 M 估计目标函数)而不是残差平方和的伪 rsquared,OLS 的 AIC 是基于正态分布的。我有一段时间没看过这个了,但是显示“更适合”有点模棱两可,因为 RLM 会降低所有“不适合”的观察值,并将它们视为异常值。
标签: python regression linear-regression statsmodels