次のテーブルがあります R
df <- structure(list(x = structure(c(12458, 12633, 12692, 12830, 13369,
13455, 13458, 13515), class = "Date"), y = c(6080, 6949, 7076,
7818, 0, 0, 10765, 11153)), .Names = c("x", "y"), row.names = c("1",
"2", "3", "4", "5", "6", "8", "9"), class = "data.frame")
> df
x y
1 2004-02-10 6080
2 2004-08-03 6949
3 2004-10-01 7076
4 2005-02-16 7818
5 2006-08-09 0
6 2006-11-03 0
8 2006-11-06 10765
9 2007-01-02 11153
私は点とTukeyの線形フィッティング(のline
関数R
)をプロットすることができます
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
生成されるもの:
大丈夫だ。上のプロットはエネルギー消費値を示しており、増加するだけであると予想されるため、フィットがこれらの2つのポイントを通過しないことに満足しています(その後、外れ値としてフラグが付けられます)。
ただし、最後のポイントを削除して再度プロットするだけです。
df <- df[-nrow(df),]
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)
結果は完全に異なります。
私の必要性は、上記の両方のシナリオで理想的に同じ結果が得られることです。Rは単調回帰のための関数を使用する準備ができていないようですが、それ以外isoreg
は区分的に一定です。
編集:
@Glen_bが指摘したように、外れ値とサンプルサイズの比率は、上記で使用した回帰手法には大きすぎます(〜28%)。ただし、他に考慮すべき点があると思います。テーブルの最初にポイントを追加すると:
df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)
上記plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)
と同じように再計算すると、同じ結果が得られます(比率は22%以下)。
line
です。?line
rコンソールに入力することで詳細を確認できます
nnls
パッケージ(非負の最小二乗)を見ることができます。これは、陽性の制約では役立ちますが、外れ値では役立ちません。