根据Stata中的指数分布生成随机样本

问题描述

我正在尝试在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)的输出似乎不正确;我不确定我是否正确应用了弹性函数,并且scale参数是什么(stata帮助中对此似乎没有任何解释)(iii)(4)的输出似乎也不正确,我当时想知道为什么这种方法有缺陷。

谢谢

解决方法

好吧,您对发行版的了解对我来说很好

如果

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

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

这意味着它基本上是指数分布的RV的平方根。 Exponential distribution采样已完成 使用-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()

有图片

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...