Rのロバストな単調回帰


8

次のテーブルがあります 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%以下)。

ここに画像の説明を入力してください


「Tukey's line」の意味を教えてください。(彼はさまざまな抵抗線フィッティング方法を使用しました。)
whuber

@whuberああ、すみません。R関数で実装されているメソッドlineです。?linerコンソールに入力することで詳細を確認できます
Michele

おかげで、私はそれがすべてでは良いません怖い:ヘルプは、単にTukeyの1977 EDA帳を参照する-私は非常によく知ってとした私が識別可能な多くのラインにフィットする方法を-と、コードは単純にCを呼び出しますプログラム。あなたが達成しようとしていることをより明確に説明できれば、私たちは進歩するかもしれません。2つの「シナリオ」の違いを(一般的に)どのように特徴付けますか?なぜ最初のソリューションを好むのですか?
whuber

1
(+1)「増加するだけ」が重要です(堅牢な)単調回帰を実行する方法について尋ねています それはあなたの質問でその点をより強調するのに役立ちます:あなたはより良い答えを得るでしょう。
whuber

1
@ミシェル多分あなたはnnlsパッケージ(非負の最小二乗)を見ることができます。これは、陽性の制約では役立ちますが、外れ値では役立ちません。
Matteo Fasiolo 2014年

回答:


10

n

Rで利用可能なものがあります。(M推定)のrlm関数はMASSこの特定のケースを処理する必要があります(y外れ値に対して高い内訳があります)が、影響力のある外れ値に対する堅牢性はありません。

lqs同じパッケージ内の関数は影響力のある外れ値を処理する必要があります。または、CRANの堅牢な回帰に適したパッケージがいくつかあります。

FoxおよびWeisbergのRでロバスト回帰pdf)は、いくつかのロバスト回帰の概念に関する有用なリソースです。

これはすべて、ロバスト線形回帰を扱っているだけで、単調性の制約を無視していますが、内訳の問題を分類すると、問題が少なくなると思います。高ブレークダウンロバスト回帰を実行した後も負のスロープが得られているが、減少しないラインが必要な場合は、ラインにスロープゼロを設定します。(ロバストな非線形で単調な回帰が必要な場合は、それについて具体的に言及する必要があります。)


編集に応じて:

あなたは私のTheil回帰の例をの内訳ポイントに関するコメントとして解釈したようですline。そうではありませんでした; 汚染の割合が少ないときに故障したのは、私にやって来た堅牢なラインの最初の例にすぎません。

whuberですでに説明したように、いくつかの行のうちどれがで使用されているかは簡単にはわかりませんline。このlineように機能が停止する理由は、Tukeyが言及し、line使用する可能性のあるいくつかの堅牢な推定量のどれに依存するかによって異なります。

n

実装されているのは3つのグループ耐性ラインであると言っているわけでないことに注意してくださいline-実際にはそうではないと思いますが、単にそれらが実装されlineているものは、結果のラインが処理できないようなブレークポイントがある可能性があります。それらが「正しい」位置にある場合、8点中2奇数ポイント。

実際に実装されlineている行には奇妙な振る舞いがあり、奇妙なことに、バグがあるのではないかと疑問に思っています。

 x = y = 1:9 #all points lie on a line with slope 1
 plot(x,y)
 abline(line(x,y),col=2)

次に、line直線の傾きは1.2になります。

ここに画像の説明を入力してください

私の頭の上では、そのような振る舞いをしたTukeyのセリフは思い出せません。


ずっと後に追加:私はこの問題を少し前に開発者に報告しました。修正されるまでに数回のリリースが必要でしたが、今ではline(Tukeyの3つのグループ行の形式であることが判明しました)このバグはなくなりました。私が試したすべてのインスタンスで期待どおりに動作するようになりました。


みなさん、こんにちは。現時点では、線形単調回帰が必要です。内訳のポイントは非常に興味深く、私は間違いなく考慮すべきだった。しかし、追加した3番目のチャートにコメントしていただけますか?比率を22%にする最初の2ポイントを追加します
Michele

ちなみにlqs仕事はやります!だから私はあなたの答えを受け入れます:-)どうもありがとう。それでも3番目のグラフを理解するのを手伝っていただければ幸いです。乾杯
ミケーレ

1
少しわかりやすくなるように編集しました。何かを逃した場合は、お知らせください。
Glen_b-モニカを2014

どうもありがとう。私は統計学者ではないので(言うのは簡単です)、あなたはとても役に立ちました!とりあえずこれでいいと思いますlqs。ありがとうございました
ミシェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.