質問:
R言語での料理人の距離に基づいた外れ値の削除
user3459010
2015-07-31 12:50:34 UTC
view on stackexchange narkive permalink

線形回帰用のこのRコードがあります:

  fit <- lm(target〜age + sales + Income、data = new) 

クックの距離に基づいて影響力のある観測値を特定し、Rのデータから同じものを削除する方法は?

これは良い例であり、ロバスト回帰を使用して影響力のあるポイントを含むデータを処理する方法も紹介しています。http://www.ats.ucla.edu/stat/r/dae/rreg.htm将来的には、質問する前に、もう少し調査を試みる必要があります。
クックの距離を使用して「影響力のある」観測値を特定するためにさまざまな基準が提案されており、それらのいくつかは互いに大きく異なるため、「R」に焦点を当てていますが、ここには意味のある統計的質問があると思います。(私の経験では、コードがよく知られている@Roland--withによって参照される `rlm`関数は、*小さな残差*を持つ非常に影響力のある観測に関連する問題を識別も評価もしないため、あなたが行っていないと結論付けることはありません。あなたの研究。)
@Roland-これを投稿する前に、自分の調査を行っていないと感じさせる理由がわかりません。私はあなたが共有したこのリンクに出くわしました、しかしそれは私には役に立たなかった!将来的には、そのような役に立たない記事へのリンクを与えるのではなく、適切なコードを私に与えるという点で、解決策でより良い応答をする必要があります!
[クックの距離プロットの読み方](http://stats.stackexchange.com/q/22161/17230)と[クックの距離カットオフ値](http://stats.stackexchange.com/q)での議論/ 87962/17230)。
1 回答:
JetLag
2018-05-08 11:57:41 UTC
view on stackexchange narkive permalink

この投稿は2年間で約6000回表示されているので、答えが必要だと思います。参考文献からたくさんのアイデアを借りましたが、いくつか変更を加えました。 base r cars データを使用します。

  library(tidyverse)

#外れ値をデータに挿入します。
cars1 <-cars [1:30、]#元のデータ
cars_outliers <- data.frame(speed = c(1,19)、dist = c(198,199))#外れ値を導入します。
cars2 <- rbind(cars1、cars_outliers)#外れ値のあるデータ。
 

外れ値を使用してデータをプロットし、それらがどれほど極端かを確認しましょう。

 #外れ値のあるデータのプロット。

plot1 <- ggplot(data = cars1、aes(x = speed、y = dist))+
        geom_point()+
        geom_smooth(method = lm)+
        xlim(0、20)+ ylim(0、220)+
        ggtitle( "外れ値なし")
plot2 <- ggplot(data = cars2、aes(x = speed、y = dist))+
        geom_point()+
        geom_smooth(method = lm)+
        xlim(0、20)+ ylim(0、220)+
        ggtitle( "外れ値あり")

gridExtra :: grid.arrange(plot1、plot2、ncol = 2)
 

Comparison 1

外れ値を導入した後、回帰直線の適合度が低いことがわかります。したがって、それらを識別するためにクックの距離を見てみましょう。 $ \ frac {4} {n} $の従来のカットオフを使用しています。 カットオフ値は、データの何が問題になっているのかを考えるのに役立つだけです

  mod <- lm(dist〜speed、data = cars2)
Cooksd <- Cooks.distance(mod)

#従来の4 / n基準を使用してクックの距離をプロットします
sample_size <- nrow(cars2)
plot(cooksd、pch = "*"、cex = 2、main = "Influential Obs by Cooks distance")#クックの距離をプロット
abline(h = 4 / sample_size、col = "red")#カットオフラインを追加
text(x = 1:length(cooksd)+ 1、y = cooksd、labels = ifelse(cooksd>4 / sample_size、names(cooksd)、 "")、col = "red")#ラベルを追加
 

Cook's Distance Plot

リファレンスに記載されているように、外れ値を処理する方法はたくさんあります。今、私は単にそれらを削除したいだけです。

 #外れ値の削除
#影響力のある行番号
影響力のある<-as.numeric(names(cooksd)[(cooksd >(4 / sample_size))])

#または、上位x個の外れ値を削除して確認することもできます
#top_x_outlier <-2
#影響力のある<- as.numeric(names(sort(cooksd、減少= TRUE)[1:top_x_outlier]))

cars2_screen <-cars2 [-影響力のある、]

plot3 <- ggplot(data = cars2、aes(x = speed、y = dist))+
        geom_point()+
        geom_smooth(method = lm)+
        xlim(0、20)+ ylim(0、220)+
        ggtitle( "Before")
plot4 <- ggplot(data = cars2_screen、aes(x = speed、y = dist))+
        geom_point()+
        geom_smooth(method = lm)+
        xlim(0、20)+ ylim(0、220)+
        ggtitle( "After")

gridExtra :: grid.arrange(plot3、plot4、ncol = 2)
 

Before and After Comparison

やったー、外れ値を正常に削除しました〜

優れたリファレンス:外れ値の処理

`#車のデータセット内の外れ値を検出します。fit <-lm(dist〜speed、data = cars);cars $ cooksd <-cooks.distance(fit);#4 / n基準に基づいて外れ値を定義します。cars $ outlier <-ifelse(cars $ cooksd <4 / nrow(cars)、 "keep"、 "delete") `これはほとんど同じですが、コードは4行だけです。最終出力には、値が外れ値であることが判明した場合に削除を示す外れ値という名前の列があります。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...