如何模拟联合分布中的对

时间:2018-04-14 16:28:25

标签: stata scatter-plot

我有两个正态分布X和Y,并且它们之间具有给定的协方差以及X和Y的方差,我想模拟(比如200点)来自联合分布的点对,但我似乎无法找到执行此操作的命令/方式。我想最终在散点图中绘制这些点。

到目前为止,我已经

set obs 100
set seed 1

gen y = 64*rnormal(1, 5/64)
gen x = 64*rnromal(1, 5/64)
matrix D = (1, .5 | .5, 1)

drawnorm x, y, cov(D)

但这会导致错误,表明xy已经存在。

另外,一旦我有样本,我如何将drawnorm输出绘制为散点图?

2 个答案:

答案 0 :(得分:1)

这是一个几乎最小的例子:

. clear 

. set obs 100
number of observations (_N) was 0, now 100

. set seed 1

. matrix D = (1, .5 \ .5, 1)

. drawnorm x y, cov(D)

正如help drawnorm所述,您必须提供新的变量名称。由于xy已经存在,drawnorm会把你赶出去。您还有一个多余的逗号会触发语法错误。

help scatter告诉您有关散点图的信息。

答案 1 :(得分:1)

生成相关数据的相关方法是使用corr2data命令:

clear

set obs 100
set seed 1

matrix D = (1, .5 \ .5, 1)

drawnorm x1 y1, cov(D)
corr2data x2 y2, cov(D)


. summarize x*

Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
      x1 |        100    .0630304    1.036762  -2.808194   2.280756
      x2 |        100    1.83e-09           1  -2.332422   2.238905

. summarize y*

Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
      y1 |        100   -.0767662    .9529448  -2.046532   2.726873
      y2 |        100    3.40e-09           1  -2.492884   2.797518

值得注意的是,与drawnorm不同,corr2data方法不会生成来自基础人群的数据。

然后,您可以按如下方式创建scatter图:

scatter x1 y1 

或者在单个图表中比较两种方法:

twoway scatter x1 y1 || scatter x2 y2

修改

对于特定的均值和方差,您需要在μ中指定平均向量Σ和协方差矩阵drawnorm。例如,要绘制两个随机变量,这些变量通过8和12的方式联合正态分布,分别为方差5和8,您键入:

matrix mu = (8, 12)
scalar cov = 0.4 * sqrt(5 * 8) // assuming a correlation of 0.4
matrix sigma = (5, cov \ cov, 8)

drawnorm double x y, means(mu) cov(sigma)

mean cov文件中记录了drawnormhelp的{​​{1}}选项。