全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4872 5
2013-02-23
悬赏 1000 个论坛币 已解决
请求各位老师帮我看一个问题,这个问题很关键也很基本,但是从我的角度我难以看出问题。。

描述:我想做的是一些列的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太大的原因吗)

感谢您的帮助,祝看帖者新年快乐。
我挺着急,以前一直没发现这个问题,可是现在我估计进度就卡在这个地方,我今天想了一下午,现在才写完帖子,请您多提想法,谢谢了!

最佳答案

webgu 查看完整内容

我的机子太寒碜,试了10个。结论可靠。 最后结果和问题表中的 ALL 具体是什么值? 出现I类错误 的次数/1000? 我的简易代码如下: %macro test(start,end); %do seed=&start %to &end; data tmp_&seed(drop=id i); array v[7]; do id=1 to 60; do group=1 to 2; do i=1 to 7; v(i)=int(140 + (125-140)*(i-1)/(7-1) + 2*normal(&seed)); end; output; en ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-2-23 02:11:39
我的机子太寒碜,试了10个。结论可靠。
最后结果和问题表中的 ALL 具体是什么值? 出现I类错误 的次数/1000?

我的简易代码如下:
%macro test(start,end);
%do seed=&start %to &end;
data tmp_&seed(drop=id i);
array v[7];
  do id=1 to 60;
          do group=1 to 2;
      do i=1 to 7;
            v(i)=int(140 + (125-140)*(i-1)/(7-1) + 2*normal(&seed));
         end;
         output;
        end;        
end;
run;

ods output  ttests=p_&seed(where=(variances='Equal'));
proc ttest data=tmp_&start ;
  var v:;
  class group;
run;
%end;
%mend;


%test(1,10)
  
data pall;
  set p:;
run;
proc sql;
  select variable, sum(probt<0.05) /10 as typeIerror
   from pall
   group by variable
   ;
quit;


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 12:12:49
感觉不高啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 19:47:00
webgu 发表于 2013-2-23 14:30
我的机子太寒碜,试了10个。结论可靠。
最后结果和问题表中的 ALL 具体是什么值? 出现I类错误 的次数/100 ...
最后那个ALL是数据集各变量的一类错误,就是累加宏变量除以1000,感谢回答;

老师有空的话,可以看下我新的询问,我这问题太多了。。

https://bbs.pinggu.org/thread-2225393-1-1.html
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 20:06:30
Tigflanker 发表于 2013-2-23 19:47
最后那个ALL是数据集各变量的一类错误,就是累加宏变量除以1000,感谢回答;

老师有空的话,可以看下我 ...
客气了,我也只是个学生。这个问题解决了?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-2-23 20:35:20
webgu 发表于 2013-2-23 20:06
客气了,我也只是个学生。这个问题解决了?
没有,有了新的问题,请帮我看下这个帖子,给我点建议也行,谢谢了。
https://bbs.pinggu.org/thread-2225393-1-1.html
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群