使用 rlm 计算稳健回归的 r 平方是否合适



我正在使用 MASS 的 rlm 函数来执行稳健回归。与 lm 不同,汇总函数不返回 r 平方的值。

因此,使用1 - sum(residual^2)/(sum((Y-mean(Y))^2)?计算此值是合适的

(对等式表示歉意,我不知道如何以更好的格式编写它(

当数据有许多异常值时,使用稳健线性回归(rlm(代替线性回归(lm(;它也可用于检测有影响力的观测值。 鲁棒回归使用迭代加权最小二乘法 (IRLS( 进行最大似然估计 (MLE(,而线性回归使用普通最小二乘法 (OLS(,这就是 R-平方(决定系数(由 lm(( 而不是 rlm(( 返回的原因。

现在谈到适当性,评估稳健回归的拟合度不是一个合适的度量,因为它涉及计算 r 平方公式中的平方损失=sum(residual^2(=sum(预测值-观测值(^2。由于鲁棒回归涉及处理包含许多异常值的数据,因此该指标将导致荒谬的值,因为异常值的残差会产生较大的值,这些异常值很大且平方!
这就是为什么当涉及异常值时,使用绝对损失=(预测-实际(来评估拟合的原因。

希望这有帮助。

r2告诉我们的回归模型的一种解释是,我们的模型与简单的统计平均值相比要好得多。由于平均值不是稳健的,我们可以使用中位数重新制定稳健的r2(就像我们使用中位数绝对偏差作为变异性的稳健度量而不是标准差一样(。如果我们这样做,我们会得到与正常行为数据相似的 r2 值,以及稳健模型的更好的拟合优度指标:

import numpy as np

def robust_r2_score(obs, exps):
"""
Formulation of a robust r2. in this case, we have a metric that tells us how
much better our model is than a median of our observations using median squared
deviation rather than variance.

Args:
obs: a sequence of observations
exps: a sequence of expected values from a model
"""
msdtot = lambda x: np.median((x-np.median(x))**2) # median squared deviation total
msderr = lambda x, x_hat: np.median((x-x_hat)**2) # median squared deviation err (or residual)
obs = np.asarray(obs)
exp = np.asarray(exps)
msd_res = msderr(obs, exp)
msd_tot = msdtot(obs)
return 1-(msd_res/msd_tot)

只是一个想法。想知道其他人是否在实践中尝试过类似的东西?我在这篇文章中也有类似的模式

最新更新