我正在尝试使用该quantreg
软件包来拟合指数曲线。
这是一个可复制的示例。IRL 我有更复杂的异常值数据,这就是为什么我不喜欢使用nls
对异常值不可靠的数据。
library(quantreg)
library(ggplot2)
x = 1:100
set.seed(42)
y = 500*exp(-0.02*x) +rnorm(100, 0, 5 )
df = data.frame(cbind(x,y))
plot(df)
formula = y ~ k * exp(b*x)
qr_exp = nlrq(formula,
data = df,
start = list(k = 600, b = -0.01),
tau = .50,
nlrq.control(maxiter=1000))
summary(qr_exp)
sum(qr_exp$m$resid())
[1] -26.52373
我预计会有sum(qr_exp$m$resid())
大约 0, tau = 0.5
但该值为负数,这意味着模型倾向于高估实际值。
如您所见,我的残差总和更接近于 0tau= 0.47
formula = y ~ k * exp(b*x)
qr_exp = nlrq(formula,
data = df,
start = list(k = 600, b = -0.01),
tau = .47,
nlrq.control(maxiter=1000))
summary(qr_exp)
sum(qr_exp$m$resid())
[1] -4.467781
我真的不明白为什么。
是因为可能有无限数量的解决方案,因此不能保证负残差比正残差多吗?
如果是的话,如果这对我来说非常重要,那么最好的解决方案是什么:
- 最小化最小绝对偏差而不是最小二乘偏差(对异常值不稳健)
- 有平衡残差吗?
添加一小部分 L2 惩罚来平衡是否有意义?(参见Huber 损失)