模拟随机变量Y

问题描述

我被赋予以下任务: 用R中的模拟计算Y = e ^ {-X}(X在0和1之间一致)的期望值。将期望值作为模拟次数的函数进行绘制,其中n是1到10000之间的整数 此函数的pdf为:f(y)= 1 / y,对于1 / e

寻找期望值的公式当然是:E [Y] =积分(y * 1 / y dy)

您如何模拟类似这样的内容?我希望您在(1 / e

我考虑过使用“样本”或“ runif”函数,但我不知道如何使这些函数以不同的概率工作。

解决方法

您可以使用以下事实:随机变量U = F(Y)是一致的,其中F是随机变量Y的累积密度函数(pdf 1 / y)。然后,您得到Y = F ^ -1(U)。这意味着您可以从一个统一变量中采样,然后通过F ^ -1(U)对其进行转换,从而从Y中获取一个样本。然后,您可以取样本的平均值。这就是所谓的inverse sampling transformation

对于您的示例,您有F(y)= ln(y)+1和F ^ -1(u)= exp(u-1)。这样就很容易获得样本:

n = 1000
u = runif(n)
y = exp(u - 1)
mean(y)
0.6342477

非常接近0.6321206(1-1 / e)的真实平均值。

编辑

要查看估计平均值如何随模拟的样本数量而变化,可以执行以下操作:

sample_y = function(n){
  u = runif(n)
  y = exp(u - 1)
  mean(y)
}

n = seq(10,20000,10)
res = sapply(n,sample_y)
ts.plot(res)

随着n的增加,它很快就稳定在真实均值附近,并且均值附近的变化越来越小。

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...