如何模拟给定协方差与方差的二元正态联合分布样本点?
解决Stata模拟联合正态分布点对的问题
我来帮你梳理下代码里的问题,然后给出正确的实现方案:
你的代码存在的几个问题
- 变量重复定义:你先手动生成了
x和y变量,之后又用drawnorm尝试生成同名变量,Stata默认不允许覆盖已存在的变量,这是报错的直接原因。 - 拼写错误:
rnromal是笔误,正确的函数名是rnormal。 - 观测数不符:你设置了
set obs 100,但需要模拟200个点对,得改成set obs 200。 - 冗余操作:手动生成
x和y的步骤完全没必要,drawnorm可以直接生成符合联合正态分布要求的变量对,无需提前手动创建。
正确的实现代码
根据你之前的参数(X和Y均值为64,标准差为5,相关系数0.5),这里提供两种可行的写法:
方法1:使用相关系数矩阵(更直观,对应你给出的矩阵D)
set obs 200 set seed 1 // 设置随机种子,保证结果可重复 // 直接生成符合要求的联合正态分布变量 drawnorm x y, means(64 64) sds(5 5) corr((1, 0.5 \ 0.5, 1))
方法2:使用协方差矩阵
先根据相关系数、标准差计算协方差:cov = 相关系数 * 标准差X * 标准差Y = 0.5*5*5=12.5,协方差矩阵为[[25,12.5],[12.5,25]],代码如下:
set obs 200 set seed 1 // 定义协方差矩阵 matrix cov_mat = (25, 12.5 \ 12.5, 25) // 生成变量 drawnorm x y, means(64 64) cov(cov_mat)
后续绘制散点图
生成变量后,直接用以下命令绘制散点图:
scatter y x
内容的提问来源于stack exchange,提问作者user9407642
相关产品推荐
相关产品推荐

