6

次のように作成された密度オブジェクト dd があります。

x1 <- rnorm(1000) 
x2 <- rnorm(1000, 3, 2) 
x <- rbind(x1, x2)
dd <- density(x) 
plot(dd)

これは、この非常に非ガウス分布を生成します。

代替テキスト http://www.cerebralmastication.com/wp-content/uploads/2009/09/nongaus.png

最終的には、rnorm が正規分布から逸脱するのと同様に、この分布からランダムな逸脱を取得したいと考えています。

これをクラックしようとしている方法は、カーネルの CDF を取得し、累積確率 (逆 CDF) を渡した場合に変量を教えてもらうことです。そうすれば、一様確率変量のベクトルを密度からのドローに変えることができます。

私がやろうとしていることは、他の人が私より前にやった基本的なことであるように思えます. これを行う簡単な方法または簡単な機能はありますか? 車輪の再発明は嫌いです。

FWIWこの R ヘルプ記事を見つけましたが、彼らが何をしているのか理解できず、最終出力は私が求めているものを生成していないようです。しかし、それは私が理解していない道に沿った一歩かもしれません.

suppdists パッケージの Johnson ディストリビューションを使用することを検討しましたが、Johnson は、私のデータが持つ素晴らしいバイモーダル ハンプを与えてくれません。

4

2 に答える 2

9

代替アプローチ:

sample(x, n, replace = TRUE)
于 2009-09-14T16:34:01.133 に答える
2

これは法線の単なる混合です。それでは、次のようなものではないでしょうか:

rmnorm <- function(n,mean, sd,prob) {
    nmix <- length(mean)
    if (length(sd)!=nmix) stop("lengths should be the same.")
    y <- sample(1:nmix,n,prob=prob, replace=TRUE)
    mean.mix <- mean[y]
    sd.mix <- sd[y]
    rnorm(n,mean.mix,sd.mix)
}
plot(density(rmnorm(10000,mean=c(0,3), sd=c(1,2), prob=c(.5,.5))))

この混合分布からのサンプルだけが必要な場合は、これで問題ありません。

于 2009-09-14T16:17:37.790 に答える