2016-06-24 5 views
0

私は、年、科目、グレード別にテストスコアの分布をチェックしています。私は、外れ値がないことを確認したい。これは、平均から4標準偏差を超えるものである。これは私のコードです:スカラーを使って外れ値をチェックする方法

bys year subject tested_grade: summarize test_score 

しかし、私はスカラーを取得しようとすると、私は唯一のスカラは、件名、tested_grade昨年に対応し得ることができます。ループを作成しようとしましたが、同じ問題が発生します。

私はNick Coxのextremesコマンドを見つけましたが、極端な値が平均からどれだけの標準偏差であるかはわかりません。

平均から離れた標準偏差の尺度で決定された外れ値をチェックする方法のアイデアがあれば、本当に役に立ちます。

編集

このコードは、私が欲しいもの(主に)私を取得します。

bys year subject tested_grade: summarize test_score 
gen std_test_score = (test_score > 4*r(sd)) if test_score < . 
list test_score std_test_score if std_test_score==1 

唯一の問題は、昨年、subject、およびtested_gradeがr(sd)の由来であるということです。私は毎年、subject、およびtested_gradeの変数std_test_score1-20を作成したいと思います。

+2

"Nick Coxの極端なコマンドが見つかりましたが、極端な値が平均からどのくらいの標準偏差があるかはわかりません。"これは**目的に沿ったものです**:外れ値の可能性があると、SDと平均値自体が影響を受け、(値平均)/ SDは外れ値のメトリックではありません! –

+0

おそらく私は追加しておくべきですが、データプロバイダが公開した手段、最大、最小、および標準と私のデータを比較しています。私の平均値、最大値などはそれらの値と一致しなければならず、私の平均値が少し違うので、矛盾の原因となるいくつかの異常値があるかどうかを見たいと思っていました。 – otteheng

+0

(value-mean)/ SDの計算を停止するものはありません。どのようにするかは、手段とSDがデータにどのように保持されているか、データから計算されるかによって異なります。 –

答えて

2

手段およびSDSは、実際

bysort year subject tested_grade : egen mean_test_score = mean(test_score) 
by year subject tested_grade: egen sd_test_score = sd(test_score) 
gen std_test_score = (test_score - mean_test_score)/sd_test_score 

で一度に複数のグループのために生成することができる、egenはワンステップでこれを行うための機能std()を持っていますが、それは多くの場合でも、から基本を再作成することをお勧めしますより基本的な原則。

あなたのコードでは、平均の減算が省略されています。

ただし、コメントに下線を引くように、(値平均値)/ SDは、異常値自体が平均値およびSDに影響を及ぼすため、異常値の貧弱な基準です。それは、例えば、ボックスプロットが正中、四分位点、および(一般的に)点に基づいているのは、より四分位から離れた多くの四分位範囲よりも大きい点です。

関連する問題