Random 从Stata中的指数分布生成随机样本

Random 从Stata中的指数分布生成随机样本,random,stata,exponential-distribution,Random,Stata,Exponential Distribution,我试图在Stata中对(I)变量X和pdf进行10000个随机样本的模拟 f(x)=2*x*exp(-x^2)、x>0和(ii)Y=x^2 我计算出F的cdf是1-exp(-x^2),因此F的逆函数是sqrt(-ln(1-u)。 我在Stata中使用了以下代码: (1) clear set obs 10000 set seed 527665 gen u= runiform() gen x= sqrt(-ln(1-u)) histogram x summ

我试图在Stata中对(I)变量X和pdf进行10000个随机样本的模拟
f(x)=2*x*exp(-x^2)、x>0和(ii)
Y=x^2
我计算出F的cdf是
1-exp(-x^2)
,因此F的逆函数是
sqrt(-ln(1-u)。
我在Stata中使用了以下代码:

(1)  
 clear  
 set obs 10000  
 set seed 527665  
 gen u= runiform()  
 gen x= sqrt(-ln(1-u))  
 histogram x  
 summ x, detail  
(mean 0.88, sd 0.46)  
  

(2)  
clear  
set obs 10000  
set seed 527665  
gen u= runiform()  
gen x= (sqrt(-ln(1-u)))^2  
summ x, detail  
(mean 0.99, sd 0.99) 

(3)    
clear  
set obs 10000  
set seed 527665  
gen u= rexponential(1)  
gen x= 2*u*exp(-(u^2))  
summ x, detail  
(mean 0.49, sd 0.28)  

(4)
clear  
set obs 10000  
set seed 527665  
gen v= runiform()  
gen u=1/v  
gen x= 2*u*exp(-(u^2))  
histogram x  
summ x, detail  
(mean 0.22, sd 0.26)
我的问题是:(i)(1)和(2)基于概率积分变换,我遇到过但不理解。如果(1)和(2)是有效的方法,那么这背后的直觉是什么,(ii)对(3)的输出是什么似乎不正确;我不确定是否正确应用了rexponential函数,以及比例参数是什么(在stata帮助中似乎没有对此进行解释)(iii)(4)的输出似乎也不正确,我想知道为什么这种方法存在缺陷


谢谢

好吧,你作为发行版所做的工作在我看来还行

如果

PDF(x)=2xexp(-x2),x in[0…无穷大),然后

CDF(x)=1-exp(-x2)

这意味着它基本上是指数分布RV的平方根。采样完成 使用
-ln(1-u)
-ln(u)

我没有Stata,只是看看代码

(1) 看起来不错,你对指数进行采样,得到它的平方根

(2) 看起来您正在对指数的平方根进行采样,并立即将其平方。 我相信你会回来的

(3) 我不知道它应该是什么意思,平方指数的指数?应该是

clear  
set obs 10000  
set seed 527665  
gen u = rexponential(1)  
gen x = sqrt(u)
summ x, detail  
rexponential()与-ln(1-runiform()相同)

(4) 没有意义。平方一致的指数

我很快编写了简单的Python代码进行说明

import numpy as np
import matplotlib.pyplot as plt

x = np.random.random(100000) // uniform in [0...1)
xx = np.sqrt(-np.log(1.0-x)) // -log(1-x) is exponential, then square root

q = np.linspace(0.0, 3.0, 101)
z = 2.0*q*np.exp(-q*q)

n, bins, patches = plt.hist(xx, 50, density=True, facecolor='g', alpha=0.75)
plt.plot(q, z, 'r-')
plt.show()
带图片


对于(4),如果gen v=runiform()生成0到1之间的随机数,那么v的倒数1/v会给出0到1之间的随机数吗infinity@Matt好的,它仍然没有意义。PDF中没有除法,为什么要除法均匀分布的RVs?它应该是指数的平方根,通过-ln(1-u)或者我在代码中输入的rexponential(),你可以绘制直方图并进行比较them@Matt我已经更新了答案,在柱状图顶部添加了重叠的PDF,一切看起来都很好
gen x=sqrt(rexponential(1))
更直接了一点。@NickCox当然,可能效率也更高一点