통계, paired t-test에 대해 알아보자(R)

표본이 독립적이지 않다?
독립표본 t-test는 표본이 독립적인 경우에만 사용이 가능하다. 표본이 독립적이라는 말은 표본의 관측치가 다른 표본의 영향을 받지 않는 경우를 말한다. 예를 들어보자, 특정 앱 시퀀스를 개선해서 A/B테스트를 하려 한다. A/B테스트를 할 표본을 모아야 하는데 아래와 같이 두 가지 경우로 모을 수 있다.
A를 테스트할 사용자 30명과 B를 테스트할 사용자를 각각 30명을 모집하여 테스트를 진행한다.
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-subjects, 독립적이지 않은 설계를 within-subjects라고 한다. 알아두면 도움이 된다.
표본이 독립적이지 않을 때 사용할 수 있는 게 paired t-test다. paired t-test는 짝지어진 두 관측값의 차이가 정규분포를 따르고 조건이 2개(2 condition)로 나뉘는 경우에 사용이 가능하다.
paired t-test가 가능한 조건을 다시 정리하면 다음과 같다.
짝지어진 두 관측치의 차이가 정규분포를 따라야 한다.
정규분포를 따르지 않으면 t-test 대신에 Wilcoxon signed-rank test를 사용해야 한다.
애초에 t-test 자체가 정규분포를 전제하고 만들어진 검정이다.
조건(condition)이 두 개여야 한다.
쉽게 말하면 프로토타입을 사용하는 조건과 사용하지 않는 조건. 두 개가 필요하다.
3개 이상이 되면 반복측정 분산분석(repeated measures ANOVA)을 사용해야 한다.
하나면 비교할 대조군이 없으니 애초에 실험이 성립하지 않는다.
독립변수가 하나여야 한다.
독립변수가 많아지면 Factorial ANOVA를 사용해야 한다.
독립변수가 두 개 이상 나오는 경우를 많이 보지는 못했다.
두 조건의 관측치가 같은 참가자에게서 짝지어 나와야 한다.
- 위에서 설명했다.
위의 조건이 만족되면 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
이 글, 어떠셨어요?
이 글에 오류가 있나요?
사실이 틀렸거나 오탈자, 깨진 링크를 발견하셨다면 알려주세요. 확인하고 고치겠습니다.