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
たが、値が負であり、モデルが実際の値を過大評価する傾向があることを意味します。
ご覧のとおり、残差の合計は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 ペナルティのごく一部を追加してバランスをとることは理にかなっていますか? (フーバー損失を参照)