[SAS][R]Proc Ttest 三種t-test一次搞懂

by wenwu
0 comment

[SAS][R]Proc Ttest

進行研究時,我們常常需要比較兩組資料是否有顯著差異,下列三種 t-test 為最常見的狀況,並附上SAS的程式碼 Proc ttest和R的程式碼

一組獨立樣本t檢定(One sample t-test)

當我們想要去檢驗手邊樣本和某特定值之間的關係時,我們會將樣本的平均數和該特定值加以比較 (例如:某班的平均分數是否與全校平均分數有差異),此時則採用單一樣本t檢定來進行檢驗。
*資料必須為常態

H0: μ=μₒ (無顯著差異)
H1: μ≠μₒ (顯著差異)

example for R

t.test(x)

假設 x 為大華國小A班12位同學的數學成績,我們想知道A班的成績和全校的成績(60分)是否有差異
我們可以先看到A班的平均成績為61.25分,進行檢定前先使用 shapiro test 檢定這組資料是否為 normal

shapiro.test(x)

p-value=0.498 , p>0.05 不拒絕虛無假設,表示常態性的假設是合理的

再來就是進入我們的 t-test 了,程式碼非常的簡單
t.test(x,mu=60,alternative=”two.sided”)
p-value=0.862 , p>0.05 不拒絕虛無假設,沒有顯著性差異

那我們再來試試看A班的成績與100分是否有差異呢?
t.test(x,mu=100,alternative=”two.sided”)
p-value=0.0001816 , p<0.05 拒絕虛無假設,有顯著差異

每一種 t-test都可以分成雙尾與單尾檢驗,R只要在alternative設定就可以了alternative的預測值為”two.sided”,所以上面兩種情形沒有寫也是可以的
alternative的另外兩種設定為”greater”和”less”,就是表示 對立假設(alternative hypothesis; H1; Ha)的狀態

H0: μ ≤ μₒ
H1: μ > μₒ

首先來嘗試A班的成績是否有顯著差異大於60呢?
t.test(x,mu=60,alternative=”greater”) 
p-value=0.431 , p>0.05 不拒絕虛無假設,沒有顯著大於60

H0: μ ≥ μₒ 
H1: μ < μₒ

再試試看A班的成績是否有顯著差異小於60呢?
t.test(x,mu=60,alternative=”less”) 
p-value=0.569 , p>0.05 不拒絕虛無假設,沒有顯著小於60

其實這樣的結果完全符合我們的預期,接著再試試看
A班的成績是否有顯著差異小於100呢?
t.test(x,mu=100,alternative=”less”) 
p-value=9.075e-5 , p<0.05 拒絕虛無假設,x顯著小於100


example for SAS

SAS 的程式碼也大同小異

PROC TTEST DATA=xy H0=60 side=2; /*設定H0的值,檢定平均數是否等於60,因此要設立H0*/ 
 VAR math; /*告訴SAS現在欲檢定的變項為math*/
 RUN;

首先,先檢查 x 是否符合常態性假設

PROC UNIVARIATE DATA=xy NORMAL;VAR x; run; 

p-value=0.498 不拒絕虛無假設,表示常態性的假設是合理的

再來,和R的範例做一樣的事情,下面就不詳細敘述了
proc ttest data=xy H0=60;var x;run;
p-value=0.862 , p>0.05 不拒絕虛無假設,沒有顯著性差異
proc ttest data=xy H0=100;var x;run;
p-value=0.0001816 , p<0.05 拒絕虛無假設,有顯著差異

和R一樣,SAS也可以使用單尾檢驗,使用side設定,side的預測值為2(雙尾)
R的”greater”,SAS表示成 side=u
“less”,SAS表示成 side=l (這邊注意是英文的L,不是數字1喔)

同樣的來使用看看

proc ttest data=xy H0=60 sides=u; var x;run; 
p-value=0.431 , p>0.05 不拒絕虛無假設,沒有顯著大於60

proc ttest data=xy H0=60 sides=l; var x;run;
p-value=0.569 , p>0.05 不拒絕虛無假設,沒有顯著小於60

proc ttest data=xy H0=100 sides=l; var x;run;
p-value=<0.0001, p<0.05 拒絕虛無假設,x 顯著小於100


兩組獨立樣本t檢定(Two independent sample t-test)

結束單個樣本的t-test後,若我們想要檢定兩組樣本間母體平均數的差異是否大於、小於或等於某一特定數值,我們可以使用 Two Independent Sample t-test
*資料必須為常態(或是資料中兩組樣本之樣本數皆較大時(≧30))
*注意變異數是否相等 (使用F檢定)

H0: μx = μy (無顯著差異)
H1: μx ≠ μy (顯著差異)

example for R

t.test(x,y)

假設 x 和 y 分別為大華國小A班和B班12位同學的數學成績,我們想知道A班的成績和B班的成績是否有差異
同樣的,進行分析之前需要確認我們的資料是否為常態
shapiro.test(x)
p-value=0.498 不拒絕虛無假設,表示常態性的假設是合理的
shapiro.test(y)
p-value=0.5468 不拒絕虛無假設,表示常態性的假設是合理的

再來使用F檢定來確認兩組的變異數是否相同
var.test(x,y)
p-value=0.005289 ,p<0.05 拒絕虛無假設,表示變異數不相同
***注意*** 如果變異數不相同的話,之後在 t-test的 function 裡面加入var.equal=F ,如果相同就是 var.equal=T

現在我們想要知道 x 和 y 是否有差異,就可以直接用 t-test 了
t.test(x,y,var.equal=F)
p-value=0.04167 p<0.05 拒絕虛無假設,表示 x&y 有顯著差異

而 two sample t-test 一樣可以使用單尾
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≤ 0
H1: μx-μy > 0 
t.test(x,y,alternative=”greater”,var.equal=F)
p-value=0.9792 p>0.05 不拒絕虛無假設 沒有顯著差異

也來試試看”less”吧
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≥ 3
H1: μx-μy < 3
t.test(x,y,mu=3,alternative=”less”,var.equal=F)
p-value=0.0097 p<0.05 拒絕虛無假設 表示 x-y 有顯著差異

example for SAS

PROC TTEST DATA=xy_2;
 CLASS group; /*告知SAS分組變項為何*/
 VAR value; /*欲檢定的變項*/
 RUN;

首先,這邊解釋一下 SAS在 two sample t-test 的資料型態與上面的不同

左邊為這次的資料,x&y的數值和上面的資料都是一樣的

不同的地方在於 需要給兩個變項

type紀錄他是 x or y ,而score則是分別的成績

直接進入我們的程式碼
proc ttest data=xy_2; class type ;var score;run;

和R一樣,我們需要用F檢定來確認兩組的變異數是否相同
不過這邊SAS不需要跑另外的程式,t-test就會幫我們檢定他的變異數是否相同

可以看到左邊的變異數相等性的p-value為0.0053 P<0.05代表表示變異數不相同,所以對到上面的表格分析後 我們可以得到p-value=0.0417
p<0.05 拒絕虛無假設 表示A班和B班的成績有顯著差異

而 two sample t-test 一樣可以使用單尾
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≤ 0
H1: μx-μy > 0 
proc ttest data xy_2 sides=u; class type; var score;run;
p-value=0.9792 p>0.05 不拒絕虛無假設 沒有顯著差異

也來試試看”less”吧
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≥ 3
H1: μx-μy < 3
proc ttest data xy_2 sides=l h0=3; class type; var score;run;
p-value=0.0097 p<0.05 拒絕虛無假設 表示 x-y 有顯著差異


兩組相依樣本t檢定(paired t-test)

前面的 two independent sample t-test 是兩組樣本為獨立的情形,paired t-testy則為非獨立(相依)的情形,像是看樣本前後的差異等
*資料必須為常態

H0: μx = μy (無顯著差異)
H1: μx ≠ μy (顯著差異)

example for R

t.test(x,y,paired = T)

現在假設 x 是大華國小 A 班第一次的數學成績,y 為同樣12位學生補考後的成績(非獨立,使用paired t-test)

t-test 的程式碼非常簡單,只要在後面加上 paired=T
t.test(x,y,paired=T) 
p-value=0.02013 p<0.05 拒絕H0 表示補考後的成績有顯著的差異

而 paired t-test 一樣可以使用單尾
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≤ 0
H1: μx-μy > 0 
t.test(x,y,alternative=”greater”,paired=T)
p-value=0.9899 p>0.05 不拒絕虛無假設 沒有顯著差異

也來試試看”less”吧
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≥ 3
H1: μx-μy < 3
t.test(x,y,mu=3,alternative=”less”,paired=T)
p-value=0.004259 p<0.05 拒絕虛無假設 表示 x-y 有顯著差異

example for SAS

PROC TTEST DATA=wt;
 PAIRED before*after; /*不同於兩組獨立樣本t檢定,以paired後面接著兩個變數,分別是前測與後側的數值*/
 RUN;

資料集的部分和one sample t-test 一樣使用 xy

同樣和R的範例做一樣的事情,下面就不詳細敘述了

proc ttest data=xy ; paired x*y; run;
p-value=0.0201 p<0.05 拒絕H0 表示補考後的成績有顯著的差異

而 paired t-test 一樣可以使用單尾
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≤ 0
H1: μx-μy > 0 
proc ttest data=xy sides=u; paired x*y; run;
p-value=0.9899 p>0.05 不拒絕虛無假設 沒有顯著差異

也來試試看sides=l吧
假設我們想知道 x-y 的差異是否有顯著差異
H0: μx-μy ≥ 3
H1: μx-μy < 3
proc ttest data=xy sides=l h0=3; paired x*y;run; 
p-value=0.0043 p<0.05 拒絕虛無假設 表示 x-y 有顯著差異

三個 t-test 就介紹到此啦~~謝謝收看

Related Articles

發表迴響