24

scipy.stats.linregress を使用して、相関性の高い x、y 実験データのいくつかのセットに対して単純な線形回帰を実行し、最初に各 x、y 散布図を視覚的に検査して外れ値を探します。より一般的に (つまりプログラム的に) 外れ値を特定してマスクする方法はありますか?

4

4 に答える 4

28

statsmodelsパッケージには必要なものが含まれています。この小さなコード スニペットとその出力を見てください。

# Imports #
import statsmodels.api as smapi
import statsmodels.graphics as smgraphics
# Make data #
x = range(30)
y = [y*10 for y in x]
# Add outlier #
x.insert(6,15)
y.insert(6,220)
# Make graph #
regression = smapi.OLS(x, y).fit()
figure = smgraphics.regressionplots.plot_fit(regression, 0)
# Find outliers #
test = regression.outlier_test()
outliers = ((x[i],y[i]) for i,t in enumerate(test) if t[2] < 0.5)
print 'Outliers: ', list(outliers)

例図 1

Outliers: [(15, 220)]

編集

の新しいバージョンではstatsmodels、状況が少し変わりました。以下は、同じタイプの外れ値検出を示す新しいコード スニペットです。

# Imports #
from random import random
import statsmodels.api as smapi
from statsmodels.formula.api import ols
import statsmodels.graphics as smgraphics
# Make data #
x = range(30)
y = [y*(10+random())+200 for y in x]
# Add outlier #
x.insert(6,15)
y.insert(6,220)
# Make fit #
regression = ols("data ~ x", data=dict(data=y, x=x)).fit()
# Find outliers #
test = regression.outlier_test()
outliers = ((x[i],y[i]) for i,t in enumerate(test.icol(2)) if t < 0.5)
print 'Outliers: ', list(outliers)
# Figure #
figure = smgraphics.regressionplots.plot_fit(regression, 1)
# Add line #
smgraphics.regressionplots.abline_plot(model_results=regression, ax=figure.axes[0])

例図 2

Outliers: [(15, 220)]

于 2013-04-23T09:43:34.617 に答える
8

scipy.statsには外れ値を直接表すものがないため、いくつかのリンクに回答し、statsmodels(scipy.statsの統計を補完するもの)の広告を表示します。

外れ値を識別するため

http://jpktd.blogspot.ca/2012/01/influence-and-outlier-measures-in.html

http://jpktd.blogspot.ca/2012/01/anscombe-and-diagnostic-statistics.html

http://statsmodels.sourceforge.net/devel/generated/statsmodels.stats.outliers_influence.OLSInfluence.html

マスキングの代わりに、ロバスト推定器を使用することをお勧めします

http://statsmodels.sourceforge.net/devel/rlm.html

残念ながら、プロットが現在表示されていない例を示します http://statsmodels.sourceforge.net/devel/examples/generated/tut_ols_rlm.html

RLMは外れ値をダウンウェイトします。推定結果にはweights属性があり、外れ値の場合、重みは1より小さくなります。これは外れ値の検索にも使用できます。RLMまた、いくつかの外れ値がある場合は、より堅牢になります。

于 2012-04-20T02:49:46.733 に答える
6

より一般的に (つまりプログラム的に) 外れ値を特定してマスクする方法はありますか?

さまざまな外れ値検出アルゴリズムが存在します。scikit-learnはそれらのいくつかを実装しています。

[免責事項: 私は scikit-learn の貢献者です。]

于 2012-04-19T15:46:58.920 に答える