楼主: 大理公主
2921 18

[问答] 如何用GAUSS生成多变量分布? [推广有奖]

11
大理公主 发表于 2011-5-12 09:51:07
好象是s=5^12使之不变啦。rndns(T,2,s)中的s是seed的作用,如果将之去掉,成为rndn(T,2), 生成的w就会变了。

12
大理公主 发表于 2011-5-12 09:57:01
论坛上已有讨论:Seed数与Gauss模拟。
Xuehe老师说,“某种分布有一个它的发生器(生成程序产生)生成,这个发生器(生成程序)由一个初值开始,这个初值就是seed, seed是可重复,随机的...”。但为什么seed一旦定下是某个数值,如这里的s=12^5, 得到的w就不变了呢。

请大家讨论。

13
大理公主 发表于 2011-5-12 10:07:30
一般在模拟时,样本容量T是定下的,它是不变的。对于s,  我需要程序自动生成数据,不可能手动让s变。

14
大理公主 发表于 2011-5-12 10:20:02
zhaomn200145, 你好!
如果将你的程序变成
M=zeros(2,2);
M[1,1]=1;
M[1,2]=0.6; M[2,1]=0.6; M[2,2]=1;
L=chol(M);
T=1000;
@
s=5^12;
e=(rndns(T,2,s))*L;
@
e=(rndn(T,2))*L;
e1=e[ .,1];
e2=e[ .,2];
w=corrx(e);
w;

结果与之前的有什么区别呢?请指教。

15
zhaomn200145 发表于 2011-5-12 15:04:56
你这里生成的是另一组多变量分布,但均值、方差以及相关系数应该也是符合要求的。

16
大理公主 发表于 2011-5-14 11:36:05
如果我做模拟,让程序run1000次,如用“seed=某个数”,那么生成的数据是一样的怎么行呢。所以,觉得不用seed,“s=5^12;e=(rndns(T,2,s))*L;” 而用“e=(rndn(T,2))*L;”可解决模拟问题。例如:

run=1000;
i=1; do until i>1000;
e[i]=(rndn(T,2))*L;
i=i+1;endo;

如用:
s=5^12;
run=1000;
i=1; do until i>1000;
e[i]=(rndn(T,2,s))*L;
i=i+1;endo;
得到的e[i]都是一样的,得不到模拟的效果。

对吗?请讨论。

17
zhaomn200145 发表于 2011-5-14 15:30:17
我觉得你对计算机模拟的理解可能有一些问题............

18
大理公主 发表于 2011-5-14 22:11:15
我的意思是,在模拟时,我们需要生成模型y=0.5+x+u中各变量的数据,然后由数据{yi,xi},i=1,2,...,200 (say), 来估计参数(OLS)。这样重复100次,得到100个参数估计值。那么,生成这些数据,比如解释变量x的数据,由下面生成:
t=200;
x=zeros(t,1);
i=1;do until i>t;
s=5^12;
x[i]=rndns(1,1,s);
i=i+1;endo;
得到的各x数值都是一样的。但用
t=200;
x=zeros(t,1);
i=1;do until i>t;
x[i]=rndn(1,1);
i=i+1;
endo;
就能得到200个不同的值,OLS可做。

不知你理解我没有?

19
大理公主 发表于 2011-5-14 22:14:37
如改成:
t=200;
x=zeros(t,1);
s=12^5;
i=1;do until i>t;
x[i]=rndns(1,1,s);
i=i+1;endo;
也可等到200个不同的x值。我想问的是,这与上面第二种生成数据有什么不同?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-28 17:38