SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 718|回复: 9
打印 上一主题 下一主题

再問平均數t檢定的問題?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-2-20 15:28:48 | 只看该作者

再問平均數t檢定的問題?

請教各位前輩,我現在有一個關於平均數t檢定的問題想請教大家,我的資料中可分五組(1、2、3、4、5),每組數量不一樣。我現在想將其每組報酬兩兩做比較(也就是說第一組的A和B,A和C,第二組的A和B,A和C,第三組的A和B,A和C第四組的A和B,A和C),看其平均值是否具有差異性,想請教各位前輩,若是要完成此項工作,其代碼應該要如何設計呢,請各位前輩幫幫忙吧!

问题二: 不好意思,我想再请教大家,若我现在想将其每组报酬两两做比较(也就是说returnA中第一组和第二组比较,第二组和第三组比较,第三组和第四组比较,第四组和第五组比较,其它returnB和returnC也是以此方式做比较),看其平均值是否具有差异性,不知这样有办法做吗?

group        returnA         returnB        returnC
1        12        13        22
1        15        15        21
1        10        30        24
1        22        23        19
1        21        16        24
2        30        22        13
2        22        19        31
2        15        18        24
2        23        21        18
2        15        17        16
3        10        18        34
3        9        24        24
3        13        24        17
3        15        13        13
4        20        19        35
4        22        29        17
4        23        25        29
4        25        17        27
4        20        33        19
4        26        17        24
5              30        13        17
5              23        23        13
5              25         21        18
5              21        13        21
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-2-20 16:04:45 | 只看该作者

Re: 再問平均數t檢定的問題?

[code:3jwxikua]
data group_t;
        input group returnA returnB returnC ;
datalines;
1 12 13 22
1 15 15 21
1 10 30 24
1 22 23 19
1 21 16 24
2 30 22 13
2 22 19 31
2 15 18 24
2 23 21 18
2 15 17 16
3 10 18 34
3 9 24 24
3 13 24 17
3 15 13 13
4 20 19 35
4 22 29 17
4 23 25 29
4 25 17 27
4 20 33 19
4 26 17 24
5 30 13 17
5 23 23 13
5 25 21 18
5 21 13 21
;
run;
proc ttest data=group_t;
        paired returnA*returnB returnA*returnC;
        by group;
run;
[/code:3jwxikua]
呵呵,希望是你要的

.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-2-20 20:35:43 | 只看该作者

Re: 再問平均數t檢定的問題?

非常谢谢您的指导,虽然在套用我的数据后有些地方不太一样,但结果应该是可以用,非常感谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-2-21 02:01:00 | 只看该作者

Re: 再問平均數t檢定的問題?

赞同HSSNOW。
许多喜欢PROC MEANS/SUMMARY, TABULATE的同仁们往往忽视t test也是其可输出统计量(同时ttest也有很难看的listing)。举例如下:

[code:2n1onyqj]data have;
        set had;
        returnB1 =returnB -returnA;        returnC1 =returnC -returnA;
run;

options ps =100 ls =100;
proc tabulate;
        class group; var returnB1 returnC1;
        table group, (returnB1 ='return B vs. A'  returnC1 ='return C vs. A' )*(mean ='Mean difference'  t probt ='p value' *f =pvalue6.3);
run;[/code:2n1onyqj]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-2-21 19:32:39 | 只看该作者

Re: 再問平均數t檢定的問題?

哇,原来还可以这样写喔,真是太感谢了!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-2-22 16:31:51 | 只看该作者

Re: 再問平均數t檢定的問題?

个人感觉以上做法都有点欠妥,多次比较会增加1型错误的概率。
就这个问题的本质,应该是两因素的多重比较,可以看看下面的代码,抛砖引玉。
[code]data group_t;                                                                                                                           
   input group returnA returnB returnC ;                                                                                                
datalines;                                                                                                                              
1 12 13 22                                                                                                                              
1 15 15 21                                                                                                                              
1 10 30 24                                                                                                                              
1 22 23 19                                                                                                                              
1 21 16 24                                                                                                                              
2 30 22 13                                                                                                                              
2 22 19 31                                                                                                                              
2 15 18 24                                                                                                                              
2 23 21 18                                                                                                                              
2 15 17 16                                                                                                                              
3 10 18 34                                                                                                                              
3 9 24 24                                                                                                                              
3 13 24 17                                                                                                                              
3 15 13 13                                                                                                                              
4 20 19 35                                                                                                                              
4 22 29 17                                                                                                                              
4 23 25 29                                                                                                                              
4 25 17 27                                                                                                                              
4 20 33 19                                                                                                                              
4 26 17 24                                                                                                                              
5 30 13 17                                                                                                                              
5 23 23 13                                                                                                                              
5 25 21 18                                                                                                                              
5 21 13 21                                                                                                                              
;                                                                                                                                       
run;                                                                                                                                    
                                                                                                                                       
data result;                                                                                                                           
set group_t;                                                                                                                           
array g(3)returnA returnB returnC;                                                                                                      
do group1=1 to 3;                                                                                                                       
v=g(group1);                                                                                                                           
output;                                                                                                                                 
end;                                                                                                                                    
drop return:;                                                                                                                           
run;                                                                                                                                    
                                                                                                                                       
proc anova data=result;                                                                                                                 
class group group1;                                                                                                                     
model v=group group1;                                                                                                                  
means group1/ dunnett('1');                                                                                                            
run;  [/code]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-2-23 03:21:30 | 只看该作者

Re: 再問平均數t檢定的問題?

不好意思,我想再请教大家,若我现在想将其每组报酬两两做比较(也就是说returnA中第一组和第二组比较,第二组和第三组比较,第三组和第四组比较,第四组和第五组比较,其它returnB和returnC也是以此方式做比较),看其平均值是否具有差异性,不知这样有办法做吗?group        returnA         returnB        returnC
1        12        13        22
1        15        15        21
1        10        30        24
1        22        23        19
1        21        16        24
2        30        22        13
2        22        19        31
2        15        18        24
2        23        21        18
2        15        17        16
3        10        18        34
3        9        24        24
3        13        24        17
3        15        13        13
4        20        19        35
4        22        29        17
4        23        25        29
4        25        17        27
4        20        33        19
4        26        17        24
5              30        13        17
5              23        23        13
5              25         21        18
5              21        13        21
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-2-23 07:10:51 | 只看该作者

Re: 再問平均數t檢定的問題?

[code:10odf21r]%macro multiTtests;
        %do i =1 %to 4;       
                ods output ttests(persist =proc ) =ttests;               
                proc ttest data=had; where group in (&i, %eval(&i+1));
                        class group;
                   var returnA returnB returnC;
        %end; run; ods output clear;       
        data ttests; keep groups variable tValue Probt;
                length groups $10; set ttests;
                if mod(_n_, 2); groups =catx(' vs. ', ceil(_n_/6), ceil(_n_/6) +1);
        run;
%mend multiTtests;
%multiTtests;
proc print blankline =3; run;[/code:10odf21r]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-2-23 20:05:16 | 只看该作者

Re: 再問平均數t檢定的問題?

不好意思,macro的使用方式其实我不太熟,且刚才试了一下,还是不能用,可否请前辈将用法完整的写出来,让我参考一下,谢谢了!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2011-3-2 03:02:01 | 只看该作者

Re: 再問平均數t檢定的問題?

Under such a situation you can fit a GLM, while you put the group as a categorical variable in the "class" statement, and in the "model" statement you just put "group" as the only variable. Then the output wll give you 4 p-values that corresponds to the 4 groups comparing to the reference group (group 1).
Hope this is what you want~
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-11 10:52 , Processed in 0.072259 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表