首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续随机变量的模拟期望

连续随机变量的模拟期望
EN

Stack Overflow用户
提问于 2022-04-19 11:22:14
回答 1查看 619关注 0票数 3

目前,我想要生成一些样本,以获得期望和方差。

给定概率密度函数: f(x) = {2x,0 <= x <= 1;否则0}

我已经发现E(X) = 2/3,Var(X) = 1/18,我的详细解来自这里https://math.stackexchange.com/questions/4430163/simulating-expectation-of-continuous-random-variable

但是,下面是我在模拟使用python时所拥有的内容:

代码语言:javascript
复制
import numpy as np
N = 100_000
X = np.random.uniform(size=N, low=0, high=1)
Y = [2*x for x in X]
np.mean(Y) # 1.00221 <- not equal to 2/3
np.var(Y) # 0.3323 <- not equal to 1/18

我在这里做错什么了?谢谢你的进阶。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 11:44:35

为了逼近x某些函数的积分,例如,g(x),在S = [0, 1]上,使用蒙特卡罗模拟,您

  • N中生成[0, 1]随机数(即从均匀分布的U[0, 1]中提取)
  • 计算g(x_i)i = 1i = N上的算术平均值,其中x_ii的第四个随机数:即(1 / N)乘以i = 1i = Ng(x_i)之和。

第二步的结果是积分的逼近。

具有pdf f(x)和可能值集的连续随机变量S的期望值是x * f(x)S上的积分。X的方差是X-squared的期望值减去X期望值的平方。

  • 期望值:为了逼近S = [0, 1]x * f(x)的积分(即X期望值),设置g(x) = x * f(x)并应用上述方法。
  • 方差:为了逼近S = [0, 1](x * x) * f(x)的积分(即X-squared的期望值),设置g(x) = (x * x) * f(x)并应用上述方法。用X期望值的平方减去这一结果,得到方差X估计。

调整您的方法:

代码语言:javascript
复制
import numpy as np
N = 100_000
X = np.random.uniform(size = N, low = 0, high = 1)

Y = [x * (2 * x) for x in X]
E = [(x * x) * (2 * x) for x in X]

# mean
print((a := np.mean(Y)))
# variance 
print(np.mean(E) - a * a) 

输出

代码语言:javascript
复制
0.6662016482614397
0.05554821798023696

与其创建YE列表,更好的方法是

代码语言:javascript
复制
Y = X * (2 * X)
E = (X * X) * (2 * X)

在本例中,YEnumpy数组。这种方法使更有效地提高了的效率。尝试制作N = 100_000_000并比较这两种方法的执行时间。第二个应该要快得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71924127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档