如果我有密度函数,如何生成大小为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
我想我需要反转并使用蒙特卡罗,我不知道该怎么办?
答案 0 :(得分: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))
答案 1 :(得分:0)
有多种方法可以从给定的分发中生成数据。
最简单的是,如果你有逆累积分布(我不知道上面哪一个应该是哪个)是从均匀分布生成$ n $观测值并将这些值插入到CDF的逆矩阵中。
其他几项内容包括Rejection Sampling和Metropols-Hastings抽样。这些页面中的链接可以帮助您找到其他页面,如果这还不够。