これは、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など)が得られることに注意してください。