추론통계는 모수통계(Parametric Statistics)와 비모수통계(Non parametric Statistics)로 나누어지게 된다. 모수통계는 모집단의 분포를 알고 있다고 가정하고 여기에 맞추어 추론을 진행하게 되는데, 간혹 1) 모집단의 분포에 대해 제대로 알지 못하는 경우, 2) 표본의 크기가 너무 작은 경우(표본 크기가 충분히 큰 경우 중심극한정리를 통해 정규분포를 가정할 수 있음) 3) outlier의 문제가 있는 경우에는 비모수통계를 사용하게 된다.
비모수검정을 진행하는 경우 우선적으로 해당 데이터가 정규성검정을 만족하는지 여부를 파악하게 된다. R에서 데이터의 정규성 검정은 Shapiro-Wilk's Test를 통해 진행하게 된다.
x <- c(1,1,2,1,1,2,1,3,4,5,6,7,8,2,12,15,31)
shapiro.test(x)
#단, 이때 x는 위와 같은 Vector값이여 함
## 결과
## Shapiro-Wilk normality test
## data: x
## W = 0.68629, p-value = 8.119e-05
위의 결과와 같이 shapiro-Wilks 테스트의 결과 p value는 0.05보다 작아 귀무가설을 기각하게 된다(정규분포로 볼 수 없다).
이 경우 이에 대한 검정을 수행할 때는 모수검정이 아닌 비모수 검정을 수행해야 한다.
순위 검정(Rank Test)
(1) 독립표본 평균검정 -> 윌콕슨 순위합 검정(Wilcoxon rank sum test)
모수검정에서 독립표본에 대한 평균검정은 t 검정(두 집단의 평균이 동일한지를 확인하는 것)을 통해 진행하게 된다. 하지만 비모수검정에서는 윌콕슨 순위합 검정을 통해 두 집단의 중위수가 같은지 여부를 검정하게 된다.
윌콕슨 순위합 검정은 아래와 같이 진행되게 된다.
Step 1. 두 집단의 관측값을 통합하고, 가장 작은 값부터 가장 큰 값까지에 순위를 부여한다. (단, 동일한 관측값이 존재하는 경우 동일하지 않았다면 부여될 관측값의 평균값이 각각에 부여된다. -> ex. 6,7위가 동일한 값이라면 6.5가 들어가게 된다.)
Step 2. 각 집단별로 순위합의 평균을 계산한다.
만약 두 집단의 중위수가 동일하다는 귀무가설이 참이라고 하면, 두 집단의 순위합 평균은 거의 비슷할 것이라고 생각할 수 있다. 이를 위해 사용하는 R함수는 아래와 같다.
예시 : 진보와 보수 정치성향을 가진 사람들에 대해 대통령 지지도를 1~10점을 부여하게 한 경우 진보 정치성향의 사람들과 보수 정치성향의 사람들의 대통령 지지도에 차이가 있는지를 검정
#정당은 1은 보수, 0은 진보
지지도 <- c(10,10,2,1,2,5,4,2,6,5,7,4,6,7,3,7,6,2,3,5,1,3,5,9)
정당 <- c(0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1)
wilcox.test(지지도~정당)
### 결과 ###
wilcox.test(지지도~정당)
Wilcoxon rank sum test with continuity correction
data: 지지도 by 정당
W = 76, p-value = 0.8386
alternative hypothesis: true location shift is not equal to 0
Warning message:
In wilcox.test.default(x = c(10, 10, 1, 4, 6, 4, 7, 7, 2, 3, 1, :
tie가 있어 정확한 p값을 계산할 수 없습니다
# 참고 : 여기서 나오는 Warning은 동순위가 있기 때문에 발생하는 문제로 동순위가 있음에도 정확한 통계량을
# 구하기 위해서는 2*pwilcox(U-stat,진보의 수, 보수의 수)를 사용
위의 결과 p-value가 매우 높기 때문에 귀무가설을 기각할 수 없고, 이에 따라 두 집단의 대통령 지지도 중위수는 동일하다는 귀무가설을 채택하게 된다.
RDocumentation에 나와있는 wilcox.test에 대한 설명방법도 첨부하니 단순히 중위수 차이가 0이 아니다 외에 다양한 귀무가설을 통해 검정을 진행하는 경우 아래를 참고하기 바란다.
#RDocumentation 내 코드 사용법 발췌
wilcox.test(x, …)
# S3 method for default
wilcox.test(x, y = NULL,
alternative = c("two.sided", "less", "greater"),
mu = 0, paired = FALSE, exact = NULL, correct = TRUE,
conf.int = FALSE, conf.level = 0.95, …)
# S3 method for formula
wilcox.test(formula, data, subset, na.action, …)
(2) 3개 이상의 집단간 차이검정
위에서는 2개 이상의 집단에 대해 검정을 했다면, 이제는 3개 이상의 집단에 대한 차이검정을 어떻게 하는지에 대해 확인해볼 것이다. 3개 이상의 집단의 경우 크러스칼-왈리스 검정(Kruskal- Walis test)을 통해 검정을 진행하게 되는데, 크러스칼-왈리스 검정의 경우에도 진행되는 방식은 위의 윌콕스 테스트와 거의 유사하다.
Step 1. 모든 집단의 관측값을 통합하고, 가장 작은 값부터 가장 큰 값까지에 순위를 부여한다. (단, 동일한 관측값이 존재하는 경우 동일하지 않았다면 부여될 관측값의 평균값이 각각에 부여된다. -> ex. 6,7위가 동일한 값이라면 6.5가 들어가게 된다.)
Step 2. 각 집단별로 순위합의 평균을 계산한다.
예시 : 진보, 중도, 보수 정치성향을 가진 사람들에 대해 대통령 지지도를 1~10점을 부여하게 한 경우 진보 정치성향의 사람들, 중도 성향의 정치성향 사람들, 보수 정치성향의 사람들의 대통령 지지도에 차이가 있는지를 검정
#정당은 2는 중도 1은 보수, 0은 진보
지지도 <- c(10,10,2,1,2,5,4,2,6,5,7,4,6,7,3,7,6,2,3,5,1,3,5,9)
정당 <- c(2,0,2,0,1,1,0,1,2,1,1,0,1,0,1,0,1,2,0,1,0,1,2,1)
kruskal.test(지지도~정당)
### 결과 ###
Kruskal-Wallis rank sum test
data: 지지도 by 정당
Kruskal-Wallis chi-squared = 0.081963, df = 2, p-value = 0.9598
결과 해석 : p-value가 0.05보다 커서 귀무가설을 기각하지 못한다. 따라서 정치 선호도에 따른 대통령 지지도 차이는 없는 것으로 확인할 수 있다.
이에 대해 RDocument에 작성되어 있는 사용법은 아래와 같다.
kruskal.test(x, …)
# S3 method for default
kruskal.test(x, g, …)
# S3 method for formula
kruskal.test(formula, data, subset, na.action, …)
(3) Friedman 검정
Friedman 검정은 (2)에서 설명한 Kruskal-Wallis 검정의 확장으로 두 요인 간의 교호작용이 없는 경우에 이원배치법 실험에서 얻어진 자료를 비모수적인 방법으로 검정하는 것이다. 예를 들어 정당에서 5명의 전문가를 고용하여 4명의 예비후보들에 대해 점수를 매겼다고 생각해보자. 이때 각각의 전문가들은 각자의 기준에 따라 예비후보들에게 점수를 산정하게 되기 때문에 이를 통합하여 순위를 매기는 것이 아니라 개별 전문가에 대해 순위를 부여하고, 이에 대한 순위합 검정을 진행하는 것이다.
이에 대한 RDocumentaion의 활용방법은 아래와 같다.
friedman.test(y, …)
# S3 method for default
friedman.test(y, groups, blocks, …)
# S3 method for formula
friedman.test(formula, data, subset, na.action, …)
'Business Analytics > R로 하는 통계검정' 카테고리의 다른 글
변수 변환 - log 변환, Exp 변환, 박스-콕스 변환(Box-Cox Transformation) (0) | 2023.01.02 |
---|---|
R로 하는 가설검정과 확률분포 (0) | 2022.12.04 |
R 데이터 불균형 처리(imbalance data) (0) | 2022.11.20 |
댓글