표본이 독립적이지 않을 때 사용할 수 있는 paired t-test
t-test는 표본이 독립적인 경우에만 사용이 가능하다. 표본이 독립적이라는 말은 표본에 관측치가 다른 표본에 의해서 영향을 받지 않는 경우를 말한다. 예를 들어보자, 특정 앱 시퀀스를 개선해서 A/B테스트를 하려 한다. A/B테스트를 할 표본을 모아야 하는데 아래와 같이 두 가지 경우로 모을 수 있다.
1. A를 테스트할 사용자 30명과 B를 테스트할 사용자를 각각 30명을 모집하여 테스트를 진행한다.
2. A를 먼저 테스트하고 B를 테스트할 사용자 30명을 모집하여 테스트를 진행한다.
1의 경우에는 표본이 독립적이다. A를 사용하는 사용자와 B를 사용하는 사용자들에게서 수집된 관측치는 서로 영향을 받지 않는다. 각각 30명씩 모아서 진행했으니 당연히 그럴 것이다.
반면에 2의 경우에는 표본이 독립적이지 않다. A를 먼저 테스트하고 B를 테스트했으니 (혹은 순서가 바뀌더라도) 관측치에 영향을 미칠 것이다.
조금 더 구체적으로 예를 들어보자. A/B 테스트의 목적이 결제 페이지까지 도달하는 시간을 측정하는 것이라 하자. 물론 실제 A/B 테스트는 도달 시간보다는 도달률을 테스트하는 경우가 일반적이다. 이때 1의 경우는 총표본이 60명, 2의 경우는 표본이 30명이다. 물론 관측 데이터는 둘 다 60개일 것이다. 문제가 없는가? 문제가 있다. 아무리 A/B 테스트라도 A를 먼저 써보고 B를 써보면 앱의 시퀀스를 익히게 되어 B 앱의 도달 시간이 훨씬 빠를 수밖에 없을 것이다.(반대의 경우도 마찬가지다.) 표본이 독립적이지 않기 때문에 생기는 문제다.
그렇다면 어차피 독립적인 표본을 모으면 되는 거 아닌가? 물론 맞다. 다만 일반적으로 독립적으로 표본을 모으는 것은 금전적인 문제가 있다. 30명이 아니라 300명이라고 하거나 3000명이라 해보자. 물론 극단적인 차이가 있으면 적은 수의 표본으로도 모집단의 평균을 추정할 수 있지만 그렇지 않은 경우도 있다. 3000명이라면 1의 경우에 총 6000명이 필요하다. 반면에 2의 경우에는 3000명만 필요할 뿐이다. 물론 구글 애널리틱스 같은 걸 사용한다면 굳이 돈이 들지 않기에 표본을 모으고 자시고 할 필요도 없지만.
결국 금전적인 혹은 기타 다른 문제로 독립적인 표본을 구하지 못할 때가 있다. 특히 논문을 쓸 때는 한 참가자에게 테스트를 여러 번하개 하는 경우가 있으므로 표본이 독립적이지 않은 경우가 더러 있다. 추가로 표본이 독립적인 경우를 between-group, 독립적이지 않은 경우를 within-group이라고 한다. 알아두면 도움이 된다.
표본이 독립적이지 않을 때 사용할 수 있는 게 paired t-test다. paired t-test는 t-test와 같이 표본이 정규분포를 따르고 표본이 2개 집단(2 condition)으로 나뉘는 경우에 사용이 가능하다.
paired t-test가 가능한 조건을 다시 정리하면 다음과 같다.
1. 관측치가 정규분포를 따라야 한다.
- 정규 분포를 따르지 않으면 t-test 대신에 wilcoxon test를 사용해야 한다.
- 애초에 t-test 자체가 정규분포를 따르지 않으면 사용할 수 없다.
2. 표본 집단(condition)이 두 개여야 한다.
- 쉽게 말하면 프로토타입을 사용할 집단과 사용하지 않을 집단. 두 개가 필요하다.
- 3개 이상이 되면 ANOVA를 사용해야 한다.
- 1개는 실험군과 대조군이 비교되지 않으니 애초에 실험이 성립하지 않는다.
3. 독립변수가 하나여야 한다.
- 독립변수가 많아지면 Factorial ANOVA를 사용해야 한다.
- 독립변수가 1개 이상 나오는 경우를 많이 보지는 못했다.
4. 두 집단이 독립적이지 않아야 한다.
- 위에 설명했다.
위의 조건이 만족되면 paired t-test(paired sample t-test)를 진행할 수 있다.
R로 돌리는 방법은 매우 간단하다.
t-test 돌리는 방법: https://brunch.co.kr/@jihoonleeh9l6/33에서 몇 단어만 추가해주면 된다.
이번엔 csv 파일을 사용하지 않아서 코드가 좀 이상해 보이긴 하지만. 가장 중요한 건 맨 마지막 줄이다.
t.test(관측값 1, 관측값 2, paired=TRUE). 이 한 줄이면 끝.
boxplot(df$prototype.applied, df$prototype.nonapplied)
이 코드를 한 줄 추가하면 아래 그림과 같이 boxplot을 그릴 수 있다.
Youtube 영상 링크: https://youtu.be/Eqwdv-s1IVc