'r'에 해당되는 글 2건

  1. 2015.02.03 One Sample T-Test
  2. 2015.01.07 R을 이용한 구글 애널리틱스 분석

One Sample T-Test

통계 2015. 2. 3. 20:39

필요할 때 찾아보고, 쓰고 나서 잊어 버려 실무에서 사용하는 통계에 대해 정리해 놓으려 합니다. 저도 통계 전문가는 아니라 R을 배우면서 겸사 겸사 이용법 위주입니다.


집단 간 차이가 있는 알아 보기 위해 가장 많이 이용하는 분석이 T-Test인데요. 일반적으로 T-Test라고 하면 Student's t-Test를 말합니다. 세부적으로는 단일 집단의 평균이 특정 값(모집단의 평균)과 차이가 있는지 검정하는 One Sample T-Test와 두 집단 간 평균의 차이가 있는 검정하는 Two Sample T-Test를 많이 이용합니다. 또 하나는 한 집단을 대상으로 사전-사후 차이를 검정하는 Paired T-Test가 있습니다.


T-Test에 앞서 정규성 검정을 하는데요. 표본의 크기가 30보다 크면 정규성을 있다고 가정하기도 하는 것 같습니다. (중심극한정리 어쩌구...) 하지만 정규분포를 따르지 않는 경우에는 비모수 검정이 있기 때문에 굳이 정규분포를 따르지 않는 자료를 T-Test할 필요도 없을 것 같습니다.(R에서 wilcox.test 입니다. 나중에 다시 정리하지요.)


One Sample T-Test


가정: 분석 대상 데이터는 정규 분포를 따른다.


R 명령어: t.test(변수명, mu=모집단의 평균, alternative=검정방법)


예) 1부터 10사이의 10개 데이터의 평균 6이 모집단의 평균 5와 차이가 있는지 검정합니다.


귀무가설: x의 평균은 5이다.

대립가설1: x의 평균은 5가 아니다 (양측검정)

대립가설2: x의 평균은 5보다 작다 (단측검정)

대립가설3: x의 평균은 5보다 크다 (단측검정)


; 샘플 데이터를 만듭니다.

> x <- c(1,3,4,5,6,7,7,8,9,10)


; x의 기본 통계량 확인

; x의 산술평균은 6입니다.

> summary(x)

Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 

1.00    4.25    6.50    6.00    7.75   10.00 


; x가 정규분포를 따르는지 검정합니다.

; p-value가 0.05보다 크므로 정규 분포를 따른다는 귀무가설을 기각할 수 없습니다.

; 만약, p-value가 0.05보다 같거나 작다면 비모수 검정을 실시합니다.

> shapiro.test(x)

Shapiro-Wilk normality test


data:  x

W = 0.9795, p-value = 0.9623


; 먼저 대립가설1을 검정해 봅니다. 

; 기본적으로 t.test는 양측검정을 실시합니다. alternative="two.sided" 생략 가능.

; 평균이 1 차이가 있지만, 통계적으로 유의하지 않습니다. 

; 만약 표본이 더 많았다면 차이 있는 것으로 나올 수도 있습니다.


> t.test(x, mu=5, alternative="two.sided")

One Sample t-test


data:  x

t = 1.1339, df = 9, p-value = 0.2861

alternative hypothesis: true mean is not equal to 5

95 percent confidence interval:

 4.004965 7.995035

sample estimates:

mean of x 

        6


; 대립가설2 검정입니다.

; 역시 평균의 차이가 유의하지 않게 나왔습니다.

> t.test(x, mu=5, alternative = "less")

One Sample t-test


data:  x

t = 1.1339, df = 9, p-value = 0.8569

alternative hypothesis: true mean is less than 5

95 percent confidence interval:

     -Inf 7.616654

sample estimates:

mean of x 

        6 


; 그럼 대립가설3도 해보지요.

; 귀무가설을 기각하지 못했습니다.

> t.test(x, mu=5, alternative = "greater")

One Sample t-test


data:  x

t = 1.1339, df = 9, p-value = 0.1431

alternative hypothesis: true mean is greater than 5

95 percent confidence interval:

 4.383346      Inf

sample estimates:

mean of x 

        6 


; 결과를 자세히 보신 분은 양측검정과 단측검정의 신뢰구간이 달라진 것을 보셨을 겁니다.

; 말 그대로 단측검정은 한 쪽 방향으로만 검정하기 때문에 같은 95% 유의수준에서도 신뢰구간이 달라지게 됩니다.

; 만약 유의수준을 변경하고 싶다면 아래와 같이 지정합니다.

> t.test(x, mu=90, conf.level=0.90)

One Sample t-test


data:  x

t = 1.1339, df = 9, p-value = 0.2861

alternative hypothesis: true mean is not equal to 5

90 percent confidence interval:

 4.383346 7.616654

sample estimates:

mean of x 

        6 


샘플 데이터를 대충 만들었더니 재미 없는 해설이 되었네요.

책 쓰시는 분들은 샘플 데이터 만드는 것도 일이겠어요.


현업에서는 이번 실시한 캠페인의 효과가 기존의 평균적인 성과와 차이가 있는지 검정한다거나... 에구 예로 들만한 것이 언뜻 떠오르지 않네요. 현업에서는 별로 쓰이지 않는 것으로... ㅜㅜ


다음에 다룰 two sample t-test는 꽤 쓰인다는...


Posted by 값진인생
,

좀 더 편하게 로그 분석을 할 수 있는 방법을 찾다가 어느 블로그에서 발견한 것입니다. 소스만 복사해 놓은 거라... 원문을 쓰신 분 죄송합니다.


우선, 구글 API를 이용할 수 있도록 합니다. 자세한 사항은 구글링 참조

1) Google Developers Console 가입 

2) Analytics API 사용 등록

3) API 및 인증 메뉴 → 사용자 인증 정보 메뉴에서 "새 클라이언트 ID 만들기"


R코드는 아래 처럼 인증 → 가져올 데이터 정의 → 데이터 가져오기 → 분석 순으로 작성됩니다. 이를 응용하면 반복되는 분석을 자동화하는데 큰 도움이 될 것 같습니다. 그런데 R을 잘 모른다는 것이 함정 ㅜㅜ


library(RGoogleAnalytics)

library(ggplot2)

library(magrittr)

library(dplyr)

library(lubridate)

library(xts)


; 새로 만들거나 기존의 클라이언트 ID와 클라이언트 비밀 보안 입력

token <- Auth(client.id = "XXXXXXX.apps.googleusercontent.com", client.secret = "XXXXXXX")

save(token,file="./token_file")

load("./token_file")

ValidateToken(token)


; 데이터를 가져올 보기의 번호 입력(table.id는 구글 애널리틱스 → 보기 → 설정에서 볼 수 있습니다.

query.list <- Init(start.date = "2014-12-01",

                   end.date = "2014-12-31",

                   dimensions = "ga:date",

                   metrics = "ga:users,ga:pageviews",

                   max.results = 10000,

                   sort = "-ga:users",

                   table.id = "ga:XXXXXXXX")

ga.query <- QueryBuilder(query.list)                   

ga.data <- GetReportData(ga.query, token)


; 분석에 맞게 데이터를 작성합니다. 아래는 요일변수를 만드는 예입니다.

ga.data <- ga.data %>% mutate(weekdays=factor(weekdays(as.Date(date, "%Y%m%d")), levels = c("일요일", "월요일", "화요일", "수요일", "목요일","금요일", "토요일")))


; 분석 결과를 시각화 합니다.

ga.data %>% data.frame %>% group_by(weekdays) %>% summarise(wdsums=sum(users)) %>% ggplot(aes(weekdays, wdsums)) + geom_bar(aes(fill=weekdays),stat="identity")

Posted by 값진인생
,