蒙特卡罗方法(如何从密度函数获得混合分布)

monte carlo methods (how to get mixed distribution from density function)

提问人:PKaru 提问时间:10/30/2023 最后编辑:ProgmanPKaru 更新时间:10/31/2023 访问量:63

问:

有人可以帮我了解如何完成此任务:

使用混合分布概念生成 4900 个伪随机数 当 x<-6 时 f(x) = 0,当 -6<=x<0 时 f(x) = 0,当 x>=0 时,3 exp(-2.1x) + 2 exp(-1.4x) 与该密度函数成正比。将生成的值存储在变量 X3 中。

我们在课堂上做了非常相似的事情,但老师没有解释任何事情,我不知道他从哪里得到这些东西。我已经向老师请教了,但他没有帮助,我只是不明白这些东西。

我们在课堂上完成的任务是解决方案: 使用混合分布概念生成 10000 个带函数的值 f(x) = exp(-2x^2)+0.5*exp(-2x) 当 x >=-1 时,当 x<-1 时为 0 比例密度函数,根据这些值近似相应的随机变量均值(提示:在生成值时,最好在一种情况下使用条件分布生成,在另一种情况下适当选择线性变换。 解决方案:(rstudio)

f <- function(x){
  return((exp(-2*x^2)+0.5*exp(-2*x))*(x>= -1))
}
F1_a <- pnorm(-1,sd=0.5) #the first term  corresponds to the distribtuon N(0,0.5)
F1_b <- 1
curve(f,-2,10)

d1 <- function(x){
  return(dnorm(x,sd=0.5)/(F1_b-F1_a)*(x>=-1))# The conditional distribution density is the density of the base distribution divided by the probability of the interval in the corresponding interval and zero elsewhere.
}
d2 <- function(x){return(dexp(x+1,rate=2))}
int_f <- (sqrt(2*pi)*0.5)*(F1_b-F1_a)+exp(2)/4 #Transform the first term into a density, the integral of the density is expressed through the distribution function.
p1 <- (sqrt(2*pi)*0.5)*(F1_b-F1_a)/int_f
p2 <- exp(2)/4/int_f
curve(f(x)/int_f-p1*d1(x)-p2*d2(x),-2,5)
The density function is indeed representable using the densities of the base distributions and that the weights are correct. Small differences arise from rounding errors occurring in computations with floating-point numbers.
n<-10000
milline <- sample.int(2,n,replace=TRUE,prob = c(p1,p2))
tulem <- rep(NA,n)
mitu <- table(milline)
tulem[milline==1]<- qnorm(runif(mitu[1],F1_a,F1_b),sd=0.5)
tulem[milline==2]<- rexp(mitu[2],2)-1
hist(tulem,30,probability =TRUE)
curve(f(x)/int_f,-1,5,add=TRUE)
mean(tulem)
R 分布 蒙特卡洛 生成 混合

评论


答:

1赞 Severin Pappadeux 10/31/2023 #1

好的,希望这里有简单的解释

你的函数写成

f(x) = C1*f1(x) + C2*f2(x),其中 C1 和 C2 是一些常数

你想把它变成PDF并生成一些样本。

第一步是计算归一化项

N = ∫ dx f(x) = C1* ∫ dx f1(x) + C2* ∫ dx f2(x)

让我们表示

N1 = ∫ dx f1(x) 和 N2 = ∫ dx f2(x)

因此

N = C1*N1 + C2*N2

PDF(x) = f(x)/N = [C1*f1(x)+C2*f2(x)]/(C1*N1 + C2*N2)

让我们重写是适当的混合物

PDF(x) = f(x)/N = [C1*N1*f1(x)/N1 + C2*N2*f2(x)/N2]/(C1*N1 + C2*N2)

很容易注意到

f1(x)/N1 本身就是适当的 PDF,可用于采样

PDF1(x) = f1(x)/N1

PDF2 也一样

PDF2(x) = f2(x)/N2

我们可以写

PDF(x) = W1*PDF1(x) + W2*PDF2(x)

哪里

W1=C1*N1/(C1*N1 + C2*N2) 和 W2=C2*N2/(C1*N1 + C2*N2)

W1+W2=1

所以这里有一个简单的抽样规则:

  1. 样品 U01 并与 W1 进行比较,如果来自 PDF1(x) 的样本较少
  2. 如果来自 PDF2(x) 的更多样本

就是这样。它可以很容易地延长两个以上的术语