【问题标题】:How to generate correlated Uniform[0,1] variables如何生成相关的 Uniform[0,1] 变量
【发布时间】:2015-09-22 13:51:53
【问题描述】:

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

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

set seed 100
gen random1 = runiform()

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

【问题讨论】:

  • 统计评论:我很难理解您在这里想象的数据生成模型,因为线性关系和变量界限将相互竞争。如果您在想象非线性关系,则很难看出相关性是自然的总结。

标签: random stata correlation


【解决方案1】:

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

相关引用为:

Cario、Marne C. 和 Barry L. Nelson。 建模和生成具有任意边际分布和相关矩阵的随机向量。技术报告,工业工程和管理科学系,西北大学,伊利诺伊州埃文斯顿,1997 年。

论文可以在here找到。

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

  1. 使用corr2data从联合标准正态分布中绘制两个(或更多)相关变量
  2. 使用normal() 计算每个变量的单变量正态 CDF
  3. 应用任何分布的逆 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。


cmets 中问题的代码

相关矩阵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')
}

【讨论】:

  • 哇——非常感谢!效果很好!我知道我最初并没有问这个问题,而是快速跟进:假设我需要创建多个变量:var2,它与 var1 相关(你的代码做什么),然后还有 var3,它与变种2; var4,与 var 3 相关;等等。将您的解决方案扩展到这种情况是否容易?理想情况下,我们不会扩展矩阵并创建 x、y、z 等,而是保留 x 和 y,并根据现有的 y 创建 z。
  • @bill999 我添加了一个带有任意相关矩阵的四变量示例。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多