2

密度関数がある場合、サイズ n= 2914 のランダム変数を生成するにはどうすればよいですか?

問題は、密度 f(x) (関数が明確に定義されている) があることです。

P     <- function(a,e) { ( (1/6)(1^3) )-((a/2)(1^2)) +(((((a)^2)/2)+e)*1)}
D     <- function(u,mu,sigma) {dlogis(u,mu,sigma)}
K     <- function(u,a,e) {(((1/2)*(u^2))- (a*u) +(((a^2)/2)+e))}
H     <- function(u,mu,sigma){ plogis(u,mu,sigma, lower.tail = TRUE)}
Fprim <- function(u,a,e,mu,sigma) (1/P(a,e))(D(u,mu,sigma))(K(H(u,mu,sigma),a,e))

Fprim(1,a,e,mu,sigma)

df    <- function(u) Fprim(u,a,e,mu,sigma)

# Parameter n,a,e,mu,sigma
n<-2914; mu<- -0.42155226; sigma<- 0.60665552; a<- 0.43218138; e<- 0.02149706

リバースしてモンテカルロを使用する必要があると思いますが、方法がわかりません。

4

2 に答える 2

4

常に力ずくで...

> cdf<-function(x) integrate(df,-20,x)$value
> qdf<-function(x) optimize(function(z)(cdf(z)-x)^2,c(-20,20))$minimum
> rdf<-function(n) sapply(runif(n),qdf)
> x<-rdf(2000)
> hist(x,freq=F)
> xseq<-seq(-8,8,len=1000)
> lines(xseq,sapply(xseq,df))

ここに画像の説明を入力

于 2013-10-18T22:01:18.807 に答える
0

特定の分布からデータを生成するための複数のオプションがあります。

逆累積分布がある場合の最も簡単な方法 (上記のどれがどれであるかはわかりません) は、一様分布から $n$ の観測値を生成し、それらの値を CDF の逆関数に差し込むことです。

他にも、リジェクション サンプリングメトロポールズ ヘイスティングスサンプリングなどがあります。これらのページからのリンクは、それだけでは不十分な場合に他のページを見つけるのに役立ちます。

于 2013-10-18T21:55:32.473 に答える