サンプルから2つの母集団を分離する


13

1つのデータセットから2つのグループの値を分離しようとしています。母集団の1つは正規分布しており、サンプルのサイズの少なくとも半分であると想定できます。2番目の値は、最初の値よりも低いか高いです(分布は不明です)。私がやろうとしているのは、通常の分布人口を他の人口から囲む上限と下限を見つけることです。

私の仮定は出発点を提供します:

  • サンプルの四分位範囲内のすべてのポイントは、正規分布の母集団からのものです。

私は、それらが通常の分布の母集団の3 st.devに収まらないまで、残りのサンプルからそれらを取得する外れ値をテストしようとしています。これは理想的ではありませんが、十分に妥当な結果が得られるようです。

私の仮定は統計的に正しいですか?これについて行くためのより良い方法は何でしょうか?

誰かタグを修正してください。


他の2つのグループは異なる正規分布に由来すると仮定できますか?
csgillespie

@cgillespie:それは同じグループで、2つのモードがあるだけだと思う​​ので、おそらくこれを想定することはできません。
SilentGhost

1
2番目のグループのメンバーが最初のグループに含まれていないこと、または誤ってそれらのメンバーを最初のグループに属していると誤ってラベル付けすることを承知していますか?
クリスチャン

回答:


10

私が正しく理解していれば、2つの法線の混合をデータに適合させることができます。これを行うために利用可能な多くのRパッケージがあります。この例では、mixtoolsパッケージを使用します。

#Taken from the documentation
library(mixtools)
data(faithful)
attach(faithful)

#Fit two Normals
wait1 = normalmixEM(waiting, lambda = 0.5)
plot(wait1, density=TRUE, loglik=FALSE)

これは与える:

2つの法線の混合http://img294.imageshack.us/img294/4213/kernal.jpg

パッケージには、より洗練されたメソッドも含まれています-ドキュメントを確認してください。


添付した画像の有効期限が切れています。
ナクティニス

3
  1. IQR範囲のデータの場合、切り捨てられた正規分布(Rパッケージgamlss.trなど)を使用して、この分布のパラメーターを推定する必要があります。
  2. 別のアプローチは、2つまたは3つのコンポーネント(分布)を持つ混合モデルを使用することです。そのようなモデルは、gamlss.mxパッケージを使用して適合できます(混合物の各コンポーネントに対して、gamlss.distパッケージからの分布を指定できます)。

2

これは、2番目の分布が正規であるかどうかさえ知らないと仮定しています。私は基本的に正規分布のみに焦点を当てることでこの不確実性を処理します。これが最善のアプローチである場合とそうでない場合があります。

2つの母集団が完全に分離されている(つまり、分布Aのすべての値が分布Bのすべての値よりも小さい)と想定できる場合、1つのアプローチはRのoptimize()関数を使用してブレークポイントを検索することですデータを最も可能性の高い正規分布の平均とsdの推定値を生成します。

#generate completely separated data
a = rnorm(100)
b = rnorm(100,10)
while(!all(a<b)){
    a = rnorm(100)
    b = rnorm(100,10)
}

#create a mix
mix = c(a,b)

#"forget" the original distributions
rm(a)
rm(b)

#try to find the break point between the distributions
break_point = optimize(
    f = function(x){
        data_from_a = mix[mix<x]
        likelihood = dnorm(data_from_a,mean(data_from_a),sd(data_from_a))
        SLL = sum(log(likelihood))
        return(SLL)
    }
    , interval = c(sort(mix)[2],max(mix))
    , maximum = TRUE
)$maximum

#label the data
labelled_mix = data.frame(
    x = mix
    , source = ifelse(mix<break_point,'A','B')
)
print(labelled_mix)

完全な分離を想定できない場合は、2番目の分布について何らかの分布を想定してから、混合モデリングを使用する必要があると思います。混合モデリングでは、実際に個々のデータポイントにラベルが付けられるわけではありませんが、混合比率と各分布のパラメーターの推定値(平均、sdなど)が得られることに注意してください。


optimize私が理解しているように、2つのディストリビューションが並んでいる必要があります。私の場合、一方は他方の内側にあります。つまり、2番目の母集団の値は限界の両側にあります。
SilentGhost

1

私は誰も明らかな解決策を提案しなかったことに驚いています:

 #generate completely separated data
library(robustbase)
set.seed(123)  
x<-rnorm(200)
x[1:40]<-x[1:40]+10  
x[41:80]<-x[41:80]-10
Rob<-ltsReg(x~1,nsamp="best")
#all the good guys
which(Rob$raw.weights==1)

説明のために:オプションで呼び出されたときのltsRegpackage内の関数robustbase

nsamp="best"

単変量(正確な)MCD重みを生成します。(これらは$raw.weightsオブジェクトに格納されたnベクトル0-1の重みです。それらを識別するアルゴリズムはMCD推定器(1)です)。

一言で言えば、これらの重みは、のサブセットのメンバーに対して1です。 h=n+2/2 最も集中的な観測。

ディメンション1では、すべての観測値を並べ替えることから開始し、次のすべての連続サブセットの測定値を計算します。 h 観察:を示す バツ その thソートされた観測値のベクトルのエントリ、それは
(例えばバツ1バツh+1 それから バツ2バツh+2 など...)その後、より小さなメジャーを持つものを保持します。

このアルゴリズムは、対象のグループが元のサンプルの厳密な過半数を数え、対称分布を持っていると仮定します(ただし、残りの分布の仮説はありません) nh 観察)。

(1)PJ Rousseeuw(1984)。最小二乗平均回帰、Journal of the American Statistics Association。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.