我有两个正态分布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)
但这会导致错误,表明x
和y
已经存在。
另外,一旦我有样本,我如何将drawnorm
输出绘制为散点图?
答案 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
所述,您必须提供新的变量名称。由于x
和y
已经存在,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
文件中记录了drawnorm
和help
的{{1}}选项。