楼主: previal
3025 9

关于生存数据的方法探讨,重大发现 [推广有奖]

  • 1关注
  • 1粉丝

硕士生

46%

还不是VIP/贵宾

-

威望
0
论坛币
22 个
通用积分
0
学术水平
5 点
热心指数
6 点
信用等级
3 点
经验
645 点
帖子
93
精华
0
在线时间
138 小时
注册时间
2010-5-24
最后登录
2015-7-7

楼主
previal 发表于 2010-7-1 20:54:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我用SAS做了一下生存时间数据的模拟,用两种方法,一是Log-rank,一是基于秩次的kruskal wallis h test ,结果前者的type I error 显著大于后者,这是为什么??难道是后一种方法更好??
二维码

扫码加我 拉你入群

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

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

关键词:Kruskal Wallis Error Wall type 数据 探讨 生存

回帖推荐

jingju11 发表于8楼  查看完整内容

7# previal 我按照你的思路复制检测。的确如你所言,二者的p不尽相同。我的问题是,为什么你认为P不相同,一种结果便优于另外一个呢?

本帖被以下文库推荐

I believe I can fly,and I can touch the sky!

沙发
andy162639 发表于 2010-7-1 22:13:10
发模型和程序探讨。。。
有人说,统计归根结底就是个P

藤椅
BraveMadMan 发表于 2010-7-1 22:33:23
标题党呀
Don't get lost in technical details. What is the big picture?

板凳
previal 发表于 2010-7-2 07:49:21
程序如下:
data a;                                                                                                                                 
do n=1 to 1000;                                                                                                                        
group=1;                                                                                                                                
do i = 1 to 5;                                                                                                                          
status=round(ranuni(20100628),1);                                                                                                      
surtime = ranexp(20100628) / 0.02;                                                                                                      
if surtime >50 then do;                                                                                                                 
surtime=50;                                                                                                                             
status=0;                                                                                                                              
end;                                                                                                                                    
output;                                                                                                                                 
end;                                                                                                                                    
end;                                                                                                                                    
run;                                                                                                                                    
                                                                                                                                       
                                                                                                                                       
data b;                                                                                                                                
do n=1 to 1000;                                                                                                                        
group=2;                                                                                                                                
do i = 1 to 5;                                                                                                                          
status=round(ranuni(20100629),1);                                                                                                      
surtime = ranexp(20100629) / 0.02;                                                                                                      
if surtime >50 then do;                                                                                                                 
surtime=50;                                                                                                                             
status=0;                                                                                                                              
end;                                                                                                                                    
output;                                                                                                                                 
end;                                                                                                                                    
end;                                                                                                                                    
run;                                                                                                                                    
                                                                                                                                       
                                                                                                                                       
data c;                                                                                                                                
do n=1 to 1000;                                                                                                                        
group=3;                                                                                                                                
do i = 1 to 5;                                                                                                                          
status=round(ranuni(20100630),1);                                                                                                      
surtime = ranexp(20100630) / 0.02;                                                                                                      
if surtime >50 then do;                                                                                                                 
surtime=50;                                                                                                                             
status=0;                                                                                                                              
end;                                                                                                                                    
output;                                                                                                                                 
end;                                                                                                                                    
end;                                                                                                                                    
run;                                                                                                                                    
                                                                                                                                       
data d;                                                                                                                                 
set a b c;                                                                                                                              
run;
I believe I can fly,and I can touch the sky!

报纸
previal 发表于 2010-7-2 07:49:49
接上:
/*拆分为1000个数据集*/                                                                                                                  
%macro test;                                                                                                                           
data                                                                                                                                    
  %do i=1 %to 1000;                                                                                                                     
    n&i                                                                                                                                 
  %end;                                                                                                                                 
  ;                                                                                                                                    
set d;                                                                                                                                 
%do i=1 %to 1000;                                                                                                                       
  if n=&i then output n&i;                                                                                                              
%end;                                                                                                                                   
run;                                                                                                                                    
%mend test;                                                                                                                             
%test;                                                                                                                                 
                                                                                                                                       
/*两种检验方法*/                                                                                                                        
                                                                                                                                       
%macro test1;                                                                                                                           
%do i=1 %to 1000;                                                                                                                       
/*Wilcoxon test*/                                                                                                                       
proc npar1way data=n&i WILCOXON;                                                                                                        
class group;                                                                                                                           
var surtime;                                                                                                                           
output out=wilcoxon&i (keep=P_KW );                                                                                                     
PROC APPEND BASE=wilcoxon force;                                                                                                        
run; quit;                                                                                                                              
                                                                                                                                       
/*Log-Rank test*/                                                                                                                       
ods listing close ;                                                                                                                     
ods output homtests=life&i;                                                                                                            
proc lifetest data=n&i method=lt;                                                                                                      
time surtime * status(0);                                                                                                               
strata group;                                                                                                                           
data life&i (keep= test ProbChiSq);                                                                                                     
set life&i;                                                                                                                             
if test='Log-Rank';                                                                                                                     
PROC APPEND BASE=lifetest force;                                                                                                        
run;quit;                                                                                                                              
ods listing;                                                                                                                           
%end;                                                                                                                                   
%mend test1;                                                                                                                           
%test1;                                                                                                                                 
                                                                                                                                       
/*找出P<=0.05的观测*/                                                                                                                  
data wilcoxon;                                                                                                                          
set wilcoxon;                                                                                                                           
if P_KW<=0.05 ;                                                                                                                        
run;                                                                                                                                    
                                                                                                                                       
                                                                                                                                       
data lifetest;                                                                                                                          
set lifetest;                                                                                                                           
if ProbChiSq<=0.05;                                                                                                                     
run;
I believe I can fly,and I can touch the sky!

地板
previal 发表于 2010-7-2 07:55:01
3# BraveMadMan
我不是标题党
I believe I can fly,and I can touch the sky!

7
previal 发表于 2010-7-2 11:05:56
知道原因了,生存分析因针对远期和近期差别,有多种方法,选择合适的方法分析是提高生存分析效率的关键!
I believe I can fly,and I can touch the sky!

8
jingju11 发表于 2010-7-2 12:13:43
7# previal
我按照你的思路复制检测。的确如你所言,二者的p不尽相同。我的问题是,为什么你认为P不相同,一种结果便优于另外一个呢?

  1. /*create data*/
  2. data aa;
  3. do n = 1 to 1000;
  4.   do group = 1 to 3;
  5.    do _n_ = 1 to 5;
  6.     status=round(ranuni(20100628));   
  7.     surtime = min(50, ranexp(20100628) / 0.02);  
  8.     if surtime =50 then status = 0;
  9.     output;
  10.    end;
  11.   end;
  12. end;
  13. run;  
  14. /*get two tests*/
  15. proc npar1way data=aa WILCOXON noprint;
  16. by n;
  17. class group;                                                                                                                           
  18. var surtime;                                                                                                                           
  19. output out=wilcoxon1 (keep=P_KW );  
  20. run;
  21. ods output homtests=life1(keep= test ProbChiSq where = (Test = 'Log-Rank'));                                                                                                            
  22. proc lifetest data=aa method=lt;  
  23. by n;
  24. time surtime * status(0);                                                                                                               
  25. strata group;   
  26. run;
  27. ods output clear;         
  28. data all;
  29. set life1(rename =(ProbChisq = p)) wilcoxon1(rename =(p_kw = p) in = w) ;
  30. if w then test = 'Wilcoxon';
  31. run;
  32. /*count significant p values*/
  33. proc format;
  34. value Pfmt low-0.05 ='p <=0.05' 0.05<-high = 'p>0.05';
  35. run;
  36. proc freq data = all;
  37. tables test*p/chisq;
  38. format p Pfmt.;
  39. run;
复制代码

9
previal 发表于 2010-7-2 14:35:49
8# jingju11
是计算的一类错误,即1000次中P<=0.05的个数,不过我现在又进行了修改,考虑了生存分析各种方法的结合,选择最优的结果
I believe I can fly,and I can touch the sky!

10
previal 发表于 2010-7-2 14:42:05
9# previal
前辈的程序好简洁,我还要继续努力!
I believe I can fly,and I can touch the sky!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 20:46