我正在尝试使用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())
以来tau = 0.5
大约为0,但该值为负,这意味着该模型往往会高估实际价值。
正如您所看到的,我使用tau= 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惩罚来平衡某些东西是否有意义? (请参阅an infinite number of solution)