6

混合ディストリビューションからサンプルを生成する必要があります

  • 40% のサンプルは Gaussian (平均 = 2、標準偏差 = 8) から取得

  • 20% のサンプルは Cauchy (場所 = 25、スケール = 2) からのものです。

  • 40% のサンプルは Gaussian (平均 = 10、sd=6) から取得

これを行うために、私は次の関数を書きました:

dmix <- function(x){
prob <- (0.4 * dnorm(x,mean=2,sd=8)) + (0.2 * dcauchy(x,location=25,scale=2)) + (0.4 * dnorm(x,mean=10,sd=6))
return (prob)
}

そして、次のようにテストしました:

foo = seq(-5,5,by = 0.01)
vector = NULL
for (i in 1:1000){
vector[i] <- dmix(foo[i])
}
hist(vector)

このようなヒストグラムを取得しています(これは間違っていることがわかっています)- 想定される分布のヒストグラム

私は何を間違っていますか?誰でもいくつかの指針を教えてもらえますか?

4

2 に答える 2

12

もちろん、これを行う方法は他にもありますが、distrパッケージを使用すると、非常に簡単になります。(別の例と、ディストリビューションとフレンドに関する詳細については、この回答も参照してください)。

library(distr)

## Construct the distribution object.
myMix <- UnivarMixingDistribution(Norm(mean=2, sd=8), 
                                  Cauchy(location=25, scale=2),
                                  Norm(mean=10, sd=6),
                                  mixCoeff=c(0.4, 0.2, 0.4))
## ... and then a function for sampling random variates from it
rmyMix <- r(myMix)

## Sample a million random variates, and plot (part of) their histogram
x <- rmyMix(1e6)
hist(x[x>-100 & x<100], breaks=100, col="grey", main="")

ここに画像の説明を入力

混合分布の pdf を直接見たい場合は、次のようにします。

plot(myMix, to.draw.arg="d") 

ここに画像の説明を入力

于 2014-05-05T20:13:54.720 に答える