728x90
SAS와 R의 분석 결과를 비교하고 있습니다. 그리고 마지막에 Scipy를 이용한 파이썬 프로그램도 실었습니다.
우선 두 그룹간 평균치차이 검정을 하는 t검정을 살펴보았습니다.
SAS에서는 PROC TTEST를 사용하지만 R에서는 t.test 를 사용합니다.(분산분석을 위해 var.test 사용)
물론 결과는 동일하게 나옵니다.

[SAS]

DATA a1;INPUT group score @@;       * 3학급의 국어 성적;   
CARDS;                               
1  60   2  64  3 83                        
1  63   2  69  3 77                    
1  72   2  75  3 82                     
1  78   2  81  3 97                     
1  84   2  87  3 99                     
1  79   2  92  3 89
;
DATA a1;SET a1;
IF group IN (1,2);       * 그룹 1,2 를 추출, t검정은 두 그룹간 평균치 차이 검정이니까;
PROC TTEST;CLASS group;VAR score;    * CLASS 에는 독립변수 group 지정, VAR 에는 종속변수 score 지정;
RUN;  

 

            

[R]

주의할점:

t검정을 하려면 t.test( ) 함수를 사용하면 됩니다.

그런데 무작정 t.test( ) 를 사용하면 안 됩니다. 이는 기본(default)으로 "두 그룹의 분산이 다른 경우"에
사용합니다.

그리하여 먼저 두 집단의 분산이 같은지? var.test( )를 통하여 검정을 먼저 해야 합니다.

두 집단의 분산이 같은 경우에는 var.equal=T옵션을 사용해야 합니다.

 

x1 <- c(60,63,72,78,84,79)  # 3학급의 국어 성적을 벡터로 입력
x2 <- c(64,69,75,81,87,92)
x3 <- c(83,77,82,97,99,89)
var.test(x1,x2)                  # 학급1과 학급2의 분산을 먼저 검정
t.test(x1,x2,var.equal=T)     # 분산이 같으므로 var.equal=T 라는 옵션을 지정 *주의

 

[Python]

Python 을 이용한 t 검정은 여러 방법이 있으나 Scipy라이브러리를 이용했습니다.

 

# 귀무가설 : 두 그룹간의 평균치 차이가 같다.
# 대립가설 : 두 그룹간의 평균치 차이기 다르다.
from scipy import stats
x=[60,63,72,78,84,79]
y=[64,69,75,81,87,92]
z=[83,77,82,97,99,89]
result1 = stats.ttest_ind(x, y)
result2 = stats.ttest_ind(x, y, equal_var=True)
result3 = stats.ttest_ind(x, y, equal_var=False)
print("t검정 통계량: %.3f, pvalue=%.3f"%(result1)) 
print("t검정 통계량: %.3f, pvalue=%.3f"%(result2)) 
print("t검정 통계량: %.3f, pvalue=%.3f"%(result3)) 

 

+ Recent posts