gpt4 book ai didi

random - 如何生成相关的 Uniform[0,1] 变量

转载 作者:行者123 更新时间:2023-12-01 00:48:34 25 4
gpt4 key购买 nike

(这个问题与how to generate a dataset of correlated variables with different distributions?有关)

在 Stata 中,假设我创建了一个遵循均匀 [0,1] 分布的随机变量:

set seed 100
gen random1 = runiform()

我现在想创建第二个与第一个相关的随机变量(相关性应该是 .75,比如说),但以 0 和 1 为界。我希望第二个变量也为 more-or-少统一 [0,1]。我该怎么做?

最佳答案

这并不准确,但 NORTA/copula 方法应该非常接近并且易于实现。

相关引用是:

Cario, Marne C., and Barry L. Nelson. Modeling and generating random vectors with arbitrary marginal distributions and correlation matrix. Technical Report, Department of Industrial Engineering and Management Sciences, Northwestern University, Evanston, Illinois, 1997.

可以找到论文here .

任何分布生成相关随机变量的一般方法是:

  1. 使用 corr2data
  2. 从联合标准正态分布中绘制两个(或更多)相关变量
  3. 使用 normal()
  4. 计算每个变量的单变量正态 CDF
  5. 应用任何分布的逆 CDF 来模拟该分布的抽取。

使用 [0,1] uniform 的第三步非常简单: 你甚至不需要它。通常,您获得的相关性幅度将小于原始(正常)相关性的幅度,因此将它们提高一点可能会有用。

相关系数为 0.75 的 2 个统一变量的 Stata 代码:

clear

// Step 1
matrix C = (1, .75 \ .75, 1)
corr2data x y, n(10000) corr(C) double
corr x y, means

// Steps 2-3
replace x = normal(x)
replace y = normal(y)

// Make sure things worked
corr x y, means
stack x y, into(z) clear
lab define vars 1 "x" 2 "y"
lab val _stack vars
capture ssc install bihist
bihist z, by(_stack) density tw1(yline(-1 0 1))

如果您想改善统一情况的近似值,您可以像这样转换相关性(请参阅链接论文的第 5 节):

matrix C = (1,2*sin(.75*_pi/6)\2*sin(.75*_pi/6),1)

这是 0.76536686 而不是 0.75。


评论中的问题代码

相关矩阵C写得更紧凑,我正在应用变换:

clear
matrix C = ( 1, ///
2*sin(-.46*_pi/6), 1, ///
2*sin(.53*_pi/6), 2*sin(-.80*_pi/6), 1, ///
2*sin(0*_pi/6), 2*sin(-.41*_pi/6), 2*sin(.48*_pi/6), 1 )
corr2data v1 v2 v3 v4, n(10000) corr(C) cstorage(lower)
forvalues i=1/4 {
replace v`i' = normal(v`i')
}

关于random - 如何生成相关的 Uniform[0,1] 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com