请求各位老师帮我看一个问题,这个问题很关键也很基本,但是从我的角度我难以看出问题。。
描述:我想做的是一些列的SAS蒙特卡洛模拟,但是第一步,生成数据集我觉得就有点问题,请听我描述:
我想模拟两个组,一个对照组group1,一个试验组group2,模拟7个变量(称之为v1-v7),v1的时候,两组的均数都是140,v7的时候,两组的均数都是125,标准差都是2,模拟group1六十例,group2也是六十例,并且,①,从v1至v7,两组均数递减;②,我想看一类错误,两组在这里其实没有差别
我SAS程序方面如下设置:①,通过两个种子生成两个完整的数据集;②,将这两个数据集set到一起;③,对这个数据集依照变量group做成组t检验,获得P值;④,统计并判断P值得到最终的一类错误alpha
SAS实现(整个是在一个大的宏内完成,因为我要做一类错误,需要模拟很多次):
①两个数据集的生成,seed为12345。
data all1;
%do j = 1 %to 60; //60为例数
%do i =1 %to 7; //7为7个变量
group=1;
v&i.=int(140 + (125-140)*(&i-1)/(7-1) + 2*normal(12345)); //①,每一个i,也就是每一个变量,得到一个按梯度递增的均数int(140 + (125-140)*(&i-1)/(7-1);
//②,(接上一句)2代表标准差,12345代表种子
%end;
output;
%end;
run;
data all2;
。。。 //2和1一样,就是种子变成了12345+10000=22345
run;
②SET处理。
data all;
set all1 all2;
run;
③t检验。
proc ttest data=all; *ALL数据集统计分析;
class group;
var v:;
ods output ttests=pall; //这个pall是存放v1-v7,每个变量的P值的。
run;
④,收集P值,算得alpha。
data a;
set pall;
if Variances='Equal' then do;
call symputx('pva'||compress(variable),(Probt<0.05)+symget("pva"||compress(variable))); //这里的symputx方法还是版里老师教的,呵呵,感谢。
//pva&v在seed循环外作过初始化,%let pva...=0;
end;
run;
结果和问题:
现在有一个问题实在搞不懂出在哪?还请各位老师帮我看下,我做出来的结果是这样的:
V All
v1 0.046
v2 0.049
v3 0.039
v4 0.052
v5 0.062
v6 0.053
v7 0.055
我十分不明白:①,例如v5的一类错误为啥这么高,我还有的模拟出现过0.07,甚至0.08;我的模拟是1000次,两组均数又是0,为什么会超过0.05这么多?
②,我有点不明白这个波动性是为什么(加,减,加,加,减,加)?为何不是单调的,请问,有什么做法能让他平稳吗?(是因为标准差2太大的原因吗)
感谢您的帮助,祝看帖者新年快乐。
我挺着急,以前一直没发现这个问题,可是现在我估计进度就卡在这个地方,我今天想了一下午,现在才写完帖子,请您多提想法,谢谢了!