[6] 사분위수 구하기
set.seed(123) #난수 생성을 위해 seed를 123으로 지정합니다.
x <- rnorm(100, 65, 13) #평균 65, 표준편차 13인 data 100개를 생성합니다.
table(x) #생성된 50개의 난수 값을 확인해 봅시다.
#첫 줄은 생성된 난수를 의미하며, 둘째 줄은 빈도수를 의미합니다. 많이 중복돼봤자 3번이네요.
x<-c(x, max(x)+sample(10:20, 5), min(x)-sample(10:20, 5)) #이상치를 생성하기 위해 생성된 난수 중 최댓값 보다 5개 더,
#최소값보다 작은 5개 data 더 생성합니다.
boxplot(x) #난수 50개의 box plot을 그려봅니다.
#그림만 있을 때는, 전체적인 내용을 파악하기 쉽지만 정확한 수치를 알지 못한다는 단점이 있습니다.
quantile(x) #사분위수 정보에 대한 함수를 호출하겠습니다.
# 25%는 1사분위수, 50%는 2사분위수(median), 75%는 3사분위수를 의미합니다.
# Q1, Q2, Q3라고도 불리죠.
q <- quantile(x) #변수 q에 사분위수 정보들을 넣겠습니다. 7.0 ~ 99.0까지 순차대로 들어가겠네요.
q1 <- q[2] #1사분위수는 25%(27.0)가 두번 째에 있으므로 q[2] 값을 q1에 저장합니다.
q3 <- q[4] #3사분위수는 75%(77.5)가 네번 째 있으므로 q[4] 값을 q3에 저장합니다.
iqr <- q3-q1 # IQR은 3사분위수 - 1사분위수 값이므로 iqr 변수에 q3-q1 값을 저장합니다.
upper_fence <- q3 + (1.5*iqr) # box 위에 마진까지는 3사분위수 + iqr의 1.5배 입니다.
lower_fence <- q1 - (1.5*iqr) # box 아래 마진은 반대로 1사분위수 - iqr의 1.5배 겠죠?
#따라서, 이상치의 범위는 x < lower_fence | x > upper_fence 입니다.
outlier_idx <- which( x< lower_fence | x > upper_fence) #이상치 가진 값들을 indexing 하여 변수에 저장합니다.
x2 <- x[-outlier_idx] #이상치를 제외한 data들만 뽑아서 x2 변수에 새로 저장합니다.
boxplot(x2) #이상치를 제외한 data들만 x2에 있으므로,
#boxplot(x)와 다르게 boxplot(x2)에는 이상치 제외된 값들이 그려지게 됩니다.