3.3 재표본 추출
재표본 추출이란 관찰된 데이터 값에서 표본을 반복적으로 추출하는 것. 귀무가설 H0=H1 을 증명하기 위해 데이터 집합들을 하나로 뭉친 후 섞어 다시 나눈다. 이것을 여러 번 반복하여 분포를 만든 후 처음 검정하려던 데이터가 우연에 의한 결과인지 아닌지를 증명한다.
web_page_data = read.csv("web_page_data.csv")
session_times = read.csv("web_page_data.csv")
library("ggplot2")
ggplot(session_times , aes(x= Page, y = Time))+
geom_boxplot()
mean_a = mean(session_times[session_times['Page'] == 'Page A', 'Time'])
mean_b = mean(session_times[session_times['Page'] == 'Page B', 'Time'])
mean_b - mean_a
박스플롯은 페이지 B가 방문객들을 더 오래잡은 것으로 나타난다.
각 그룹의 평균의 차이를 구한다.
두 그룹의 데이터를 섞고 다시 비복원 추출로 두 그룹으로 나눈다. 그 후 새로만든 그룹의 평균의 차이를 구한다.
이런 과정을 n회 반복하여 분포를 구하고, 처음 평균의 통계적 유의미성을 구한다.
perm_fun = function(x,n1,n2)
{
n = n1 + n2
idx_b = sample(1:n, n1)
idx_a = setdiff(1:n, idx_b)
mean_diff=mean(x[idx_b])-mean(x[idx_a])
return(mean_diff)
}
위의 것이 1회 반복과정을 나타낸 코드.
perm_diffs = rep(1:1000)
for(i in 1:1000)
perm_diffs[i]=perm_fun(session_times[,'Time'],21,15)
hist(perm_diffs,xlab='Session time differences (in seconds)')
abline(v = mean_b-mean_a)
반복문으로 1000회 반복한 뒤 히스토그램으로 분포를 나타낸다.
분포상 A페이지와 B페이지의 평균의 차이는 그렇게 유의미 하지 않을 확률이 높다.
3.4 통계적 유의성과 P값
책에 담긴 전자상거래 실험 결과를 확률로서 구현하자.
obs_pct_diff = 100*(200/23739 - 182/22588)
아까 사용했던 순열검정 함수를 이용해 전환율 차이에 대한 히스토그램을 그린다.
conversion = c(rep(0,45945),rep(1,382))
perm_diffs = rep(0,1000)
for(i in 1:1000)
perm_diffs[i] = 100*perm_fun(conversion, 23739, 22588)
hist(perm_diffs, xlab = 'conversion rate', main = '')
abline(v = obs_pct_diff, lty = 2, lwd = 1.5)
text(" Observed\n difference", x = obs_pct_diff,y = par()$usr[4]-20, adj = 0)
관찰된 차이(obs_pct_diff) 0.0368%의 차이는 유의미 하지 않을 확률이 높다. (랜덤 변이의 범위안에 있다.)
좀 더 정확한 검정을 위해 P값을 구해보면 다음과 같다.
p_value = mean(perm_diffs > obs_pct_diff)
p_value
p값은 0.312로 역시 유의미하다고 보기 힘들다.
가설이 이항분포를 따르기 때문에 정규분포로 p값을 근사할 수도 있다.
3.8 분산분석 ANOVA
A/B같이 두 그룹간의 분석 말고, 여러 그룹들의 데이터를 비교하는 절차를 분산분석이라고 한다.
아래는 네 웹페이지의 점착성(머무르는 시간)을 나타낸다.
four_sessions = read.csv("four_sessions.csv")
ggplot(four_sessions, aes(x = Page, y = Time) ) +
geom_boxplot()
이 네가지 데이터를 2가지씩 분류해 비교하면 잘못된 결과가 포함될 확률이 높아진다.
95%의 유의기준을 가지고 6번 분석했을 때, 거짓이 하나라도 포함될 경우는 약 26.5%이다.
따라서 이런 방법 대신, 모든 데이터의 통계량의 차이에 대해 우연인지, 세션시간 역시 우연에 의해 차이가 나는것인지를 다루는 전체적인 총괄검정을 시행할 수 있다.
평균 대신 분산의 분포를 이용해 검정한다.
library("lmPerm")
summary(aovp(Time ~ Page, data = four_sessions))
Pr(prob) = p값으로 0.1009이다.
aov함수를 이용하면 F통계량을 이용한 검정 역시 가능하다.
summary(aov(Time ~ Page, data = four_sessions))
'배우는 것들 > R' 카테고리의 다른 글
데이터과학을 위한 통계 -7 (0) | 2021.03.01 |
---|---|
데이터 과학을 위한 통계 - 6 (0) | 2021.02.08 |
데이터 과학을 위한 통계 - 5 (0) | 2021.01.31 |
데이터 과학을 위한 통계학 - 3 (0) | 2021.01.24 |
구름 ide로 R 서버 만들기 (0) | 2021.01.24 |