모형과 분포
모형의 종류
- 모수 (parametric)
- 비모수 (non-parametric)
- 준모수 (semi-parametric)
이 중에서 모수 기반 모델은 반드시 분포를 가정해야 한다.
histogram을 그린 뒤, 그래프의 특정 부분이 outlier인지 아닌지를 확인가능.
분포 확인하기
이 3가지 그래프와 그 단점을 극복할 방안을 생각해보자.
- histogram
- boxplot
- q-q plot
히스토그램과 KDE
히스토그램
- 연속형 자료일 때 확인
- 구간의 길이(width of bin)에 민감
- 빈도 히스토그램 → 같은 구간의 길이. 면적 = 샘플 수
- 상대빈도 히스토그램 → 면적이 1이 되도록 설정
커널 밀도 추정(KDE)
- 히스토그램의 단점 : 연속형 자료 → 이산형 자료
- 이대로 분포를 추정하면 뭔가 잘 맞지 않는다.
- 이를 극복하기 위해 커널 밀도 추정을 활용
커널 밀도 추정 : 특징
- 비모수적인 방법이다.
- 연속형 자료에만 적용한다.
- 샘플을 커널함수에 넣고, 다 더한 뒤 샘플 수 \times h 로 나눠 분포를 만든다.
n = 표본 수.
K = 커널함수.
- 특정 분포로 만들어주는 함수
- 정규분포, 균등분포 등등
h = 대역폭(bandwidth)
- 커널의 모수를 평활화(smoothing parameter)
- 모수를 변화시켜주기 때문에 hist의 모양이 바뀐다.
만약 K가 가우시안 함수(정규분포)면,
이때 k값은 \sigma, 즉 분산을 의미하기에 그래프 모양에 영향을 미친다.
Boxplot과 이상치
Boxplot (상자그림)
- 상자그림을 그리기 위해서는 quantile이 필요.
- IQR (interquartile range): 전체 데이터의 50%를 찾아내는 기법
이상치 다루기
-
상자그림의 최대 단점 : 이상치
-
이상치를 구분짓는 기준 : Adjacent Values(근접값)
보통 LL과 UL은 다음 방식으로 설정한다.
\begin{align*} LL &= q(0.25) - 1.5 \times IQR \\ UL &= q(0.25) + 1.5 \times IQR \end{align*}
boxplot의 단점
- 보이는 것이 전부가 아니다.
- ex. 세 가지 시뮬레이션 샘플의 boxplot과 KDE
-
평범한 표준정규분포
-
균등분포 + 2개의 이상치
-
정규분포 3개의 혼합 = 봉우리가 3개인 모델
f_X(x) = \sum_i p_i~f_i(x~|~\mu_i, \sigma_i^2).~\sum p_i = 1
boxplot은 비슷해 보일지언정, 분포는 다를 수 있다.
Quantile plot
-
사분위수 기반의 그림은 이론적인 분포와 샘플을 비교하는데 좋다.
ex) 회귀분석 → 잔차가 정규분포를 따르는지 확인!
probability plot
한 축에는 x_i들을, 다른 축에는 F^{-1}\bigg(\dfrac{i-0.5}{n}\bigg) 을 놓는다.
-
샘플 cdf의 역함수인 empirical distirbution을 그린다.
(Empirical distribution은 step function의 형태)
-
또, 정규분포의 역함수를 그래프에 그린다.
-
둘을 비교해 본다.
Q-Q plot
-
probability plot = Q-Q plot의 특정한 형태
-
단, 두 랜덤 샘플을 비교해서 결과를 얻는 것임을 생각해야 한다.
샘플 사이즈가 작으면 생각보다 결과가 좋지 않을 수 있다.
예시 : 갤럭시 데이터
데이터 준비
해답
### 데이터 준비
rm(list=ls())
setwd("C:/Users/dlsfu/Desktop/EDA_rawData")
load("galaxy.RData")
attach(data)
str(data)
히스토그램과 kde
데이터의 히스토그램을 그려보자.
해답
## 히스토그램
par(mfrow = c(1, 2))
hist(EastWest, ylim=c(0, 70),
main="Galaxy Data")
hist(EastWest, freq=F, ylim=c(0, 0.04),
main="Galaxy Data")
커널밀도추정을 시행.
해답
## 커널밀도추정
d = density(EastWest) # 밀도 파악
str(d) # 밀도의 구조
d$bw # 커널의 대역폭
커널의 히스토그램과 실제 데이터를 비교해보자.
해답
# 커널의 히스토그램과 실제 데이터
windows()
par(mfrow = c(1, 2))
plot(d, main="Kernel density of Galaxy")
hist(EastWest, freq=F, main="Galaxy Data",
ylim=c(0, 0.04), xlim=c(-40, 40))
lines(d, lty=2, lwd=2)
대역폭(bandwidth)가 미치는 영향 역시 확인해보자.
해답
# 대역폭이 미치는 영향
bandwidth = c(0.5, 1, 3, 7)
title = "Kernel density of Galaxy \n with bandwidth of "
windows()
par(mfrow=c(2, 2))
for(i in bandwidth){
dens_galaxy = density(EastWest, bw=i)
plot(dens_galaxy,
xlim=c(-40, 40), ylim=c(0, 0.06),
main = paste(title, i, sep=""))
}
박스플롯과 kde
데이터가 들어갈 빈 행렬을 우선 만든다.
해답
### 상자그림
## 데이터 만들기
set.seed(101)
n = 400
simul = matrix(0, n, 3)
빈 행렬 속 각 열에 데이터를 채워넣는다.
- 정규분포에서 추출
- 균등분포에서 추출 + 이상치 첨가
- 정규분포 3개를 혼합
해답
# 정규분포 추출
simul[, 1] = rnorm(n)
# 균등분포 추출 + 이상치
simul[1:(n-2), 2] = runif(n-2) * 2.4 - 1.2
simul[(n-1):n, 2] = c(-2.9, 2.9)
# 정규분포 3개의 혼합
tmp1 = rnorm(300) * 0.5
tmp2 = rnorm(50) * 0.4 - 2
tmp3 = rnorm(50) * 0.4 + 2
simul[, 3] = c(tmp1, tmp2, tmp3)
# 이름 붙이기
colnames(simul) = c("std. normal", "uniform + outlier", "mixed 3 normal")
각 열의 커널밀도를 추정한다.
해답
# 커널밀도추정
dens_simul1 = density(simul[,1])
dens_simul2 = density(simul[,2])
dens_simul3 = density(simul[,3])
이후 시각화 진행.
해답
# 그래프
text2 = c("표준정규", "균등 + 이상치", "혼합")
windows()
par(mfrow=c(1, 2))
boxplot(simul, ylab="Values",
main="3 sample의 boxplot")
plot(dens_simul1, xlim=c(-4, 4),
ylim=c(0, 0.8), main="커널 밀도추정")
lines(dens_simul2, col=2)
lines(dens_simul3, col=4)
legend("topleft", text2, lty=1, col=c(1,2,4))
Q-Q plot 보기
확률을 얻고, 이론적으로 표준정규분포에 어디에 매칭되는지 확인.
해답
### 확률플롯
# 확률 얻기
sort_ew = sort(EastWest)
num = length(sort_ew)
probs = ((1:num)-0.5)/num
# 이론적인 표준정규분포 확인
q = qnorm(probs)
이후 확률플롯을 확인한다.
해답
# 확률플롯 확인
par(mfrow=c(1, 1))
plot(q, sort_ew, xlab = "표준정규분포",
ylab = "sorted EastWest")
이론적인 분포와 정렬 데이터를 비교해보자.
해답
# 이론적 분포 vs 정렬데이터
q_ew = quantile(EastWest, prob=(0:99)/100)
q_std = qnorm((0:99)/100)
windows()
par(mfrow=c(1, 3))
plot(q, sort_ew, xlab="표준정규 사분위수",
ylab="sorted EastWest",
main="EastWest의 확률플롯")
plot(q_std, q_ew, xlab="표준정규분포",
ylab="sample 사분위수",
main="EastWest의 QQ플롯")
qqnorm(EastWest)