1

我正在尝试在 Stata 中使用 10000 个随机样本进行模拟,用于 (i) 带有 pdf 的变量 X 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)的输出似乎不正确;我不确定我是否正确应用了 reexponential 函数,以及 scale 参数是什么(在 stata 帮助中似乎没有对此进行解释)(iii)(4)的输出似乎也不正确,我是想知道为什么这种方法有缺陷。

谢谢

4

1 回答 1

1

好吧,我认为你在分发时所做的工作看起来不错

如果

PDF(x) = 2 x exp(-x 2 ), x in [0...Infinity) 然后

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

这意味着它基本上是指数分布的 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  

reexponential() 与 -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()

有图

在此处输入图像描述

于 2020-09-11T14:19:41.320 回答