Summary

연령별 선호하는 패션 브랜드 설문자료를 통해서 상관비 개념을 검토한다.[1] 또한 STAT-110[3] 에서 배운 전체확률의 법칙[2]을 통해서 구한 값과 비교한다.

상관비 = 급간변동 / (급내변동 + 급간변동)

자료 입력 및 상관비 계산

library(ggplot2)
library(dplyr)
library(knitr)

# 데이터 생성
person <- LETTERS[1:15]
age <- c(27, 33, 16, 29, 32, 23, 25, 28, 22, 18, 26, 26, 15, 29, 26)
brand <- c('테르메스', '샤네리올', '버퍼리', '버퍼리', '샤네리올','테르메스',
           '샤네리올', '테르메스', '버퍼리', '버퍼리', '샤네리올', '테르메스',
           '버퍼리', '샤네리올', '버퍼리')

df_data <- data.frame(person=person, age=age, brand=brand)
TM <- df_data[df_data$brand=='테르메스',]$age
SN <- df_data[df_data$brand=='샤네리올',]$age
BB <- df_data[df_data$brand=='버퍼리',]$age

kable(df_data, caption = "연령별 선호하는 브랜드표",
      align=c("c","c","c"))
연령별 선호하는 브랜드표
person age brand
A 27 테르메스
B 33 샤네리올
C 16 버퍼리
D 29 버퍼리
E 32 샤네리올
F 23 테르메스
G 25 샤네리올
H 28 테르메스
I 22 버퍼리
J 18 버퍼리
K 26 샤네리올
L 26 테르메스
M 15 버퍼리
N 29 샤네리올
O 26 버퍼리
# 선호하는 사람수를 확인한다.
table(brand) # 브랜드별 선호하는 사람 수
## brand
##   버퍼리 샤네리올 테르메스 
##        6        5        4
g <- ggplot(df_data, aes(x=brand, fill=brand)) + geom_bar()
g <- g + theme(text = element_text(family = "NanumGothic")) # XXX: 한글설정 for mac
g

# boxplot 을 그려서 각 범주별 평균과 분포 정도를 확인한다.
g <- ggplot(df_data, aes(x = brand, y = age, fill = brand)) + geom_boxplot()
g <- g + theme(text = element_text(family = "NanumGothic"))
g <- g + theme(axis.text.x = element_text(angle=45, hjust=1, vjust=1)) # XXX: 눈금 라벨을 30도 기울인다.
g

# 급내변동 (SSE) = (테르메스 - 테르메스의 평균)^2 + ... = 224
#group_inner <- sum((TM - mean(TM))^2) + sum((SN - mean(SN))^2) + sum((BB - mean(BB))^2) 
tmp_1 <- df_data %>% group_by(brand) %>% summarise(avg = sum((age - mean(age))^2))
group_inner <- sum(tmp_1$avg)
group_inner
## [1] 224
# 급간변동 (SSR) = (테르메스의 데이터 개수)*(테르메스의 평균 - 전체평균)^2 + ... = 180
# E_T <- mean(c(TM, SN, BB)) # 전체평균 = 25
# group_between <- length(TM) * (mean(TM) - E_T)^2  + length(SN) * (mean(SN) - E_T)^2 + length(BB) * (mean(BB) - E_T)^2 
E_T <- mean(df_data$age) # 전체평균
tmp_2 <- df_data %>% group_by(brand) %>% summarise(sub_sum = length(age) * sum((E_T - mean(age))^2))
group_between = sum(tmp_2$sub_sum)
group_between
## [1] 180
# 상관비 = 급간 변동 / (급내 변동 + 급간 변동)
#        = SSR / SST = SSR / (SSE + SSR)
group_between / (group_inner + group_between) # 0.4455446
## [1] 0.4455446

위의 개념은 회귀분석 및 일원배치분산분석(ANOVA) 에서도 사용된다.

전체 분산의 법칙을 이용해서, 위에서 구한 상관비와 비교한다.

\[ Var(Y) = E(Var(Y|X)) + Var(E(Y|X)) \]

# 분산 공식
varp <- function(x) mean((x-mean(x))^2)

Total <- length(c(TM, SN, BB)) # 전체 개수
p_TM <- length(TM) / Total # 0.266
p_SN <- length(SN) / Total # 0.333
p_BB <- length(BB) / Total # 0.4

# 그룹내 변동성 = 그룹내 분산의 평균을 구한다 = E(Var(Y|X))
E_V <- varp(TM)*p_TM + varp(SN)*p_SN + varp(BB)*p_BB

# 그룹간 변동성 = 그룹내 평균을 구하고, 평균에 대한 분산을 구한다 = Var(E(Y|X))
# E(X), E(X^2) 을 구한다.
EX <- mean(TM) * p_TM + mean(SN) * p_SN + mean(BB) * p_BB
EX2 <- mean(TM)^2 * p_TM + mean(SN)^2 * p_SN + mean(BB)^2 * p_BB

# Var(E(Y|X)) = E(X^2) - (E(X))^2
V_E <- EX2 - EX^2
V_E # 12
## [1] 12
# 총 분산 비교 확인
varp(c(TM, SN, BB)) # 총 분산: 26.93333
## [1] 26.93333
E_V + V_E # 총 분산: 26.93333
## [1] 26.93333
# 상관비 확인, 위에서의 상관비와 동일함을 알 수 있다.
V_E / (E_V + V_E) # 0.4455446
## [1] 0.4455446

REFERENCES

[1] Shin Takahashi, 2006, 만화로 쉽게 배우는 통계학, 성안당, 121-124

[2] https://blog.naver.com/skkong89/222467620542

[3] https://www.youtube.com/watch?v=KbB0FjPg0mw&list=PL2SOU6wwxB0uwwH80KTQ6ht66KWxbzTIo