[R] 이상치, 박스플롯

이현지·2024년 8월 18일

R/머신러닝/딥러닝

목록 보기
6/16

이상치(Outlier)

정상 범주에서 크게 벗어난 값
-> 이상치 포함시 분석 결과 왜곡
-> 결측처리 후 제외하고 분석

  1. 존재할 수 없는 값
    ex) 성별 변수에 3 -> 결측 처리

  2. 극단적인 값
    ex) 몸무게 변수에 230 -> 정상 범위 기준 정해서 결측 처리

이상치 제거

존재할 수 없는 값

outlier <- data.frame(s = c(1,2,1,3,2,1),
score = c(5,4,3,4,2,6))

outlier

  s score
1 1     5
2 2     4
3 1     3
4 3     4
5 2     2
6 1     6

1. 이상치 확인

table(outlier$s)

1 2 3 
3 2 1 

table(outlier$score)

2 3 4 5 6 
1 1 2 1 1 

2. 결측 처리 - 성별, 만족도

outliers<ifelse(outliers <- ifelse(outliers == 3, NA, outlier$s)

outlierscore<ifelse(outlierscore <- ifelse(outlierscore == 6, NA, outlier$score)

outlier

ifelse() 함수를 사용하여 이상치 값을 NA로 처리
s 열에서 값이 3인 경우 NA로 변환
score 열에서 값이 6인 경우 NA로 변환

3. 결측치 제외 후 분석

outlier %>%
filter(!is.na(s) & !is.na(score)) %>%
group_by(s) %>%
summarise(mean_score = mean(score))

filter()를 사용하여 결측치(NA)가 아닌 데이터를 필터링한다.

group_by(s)를 사용하여 성별 기준으로 그룹화한 뒤,
summarise(mean_score = mean(score))를 통해 각 성별의 평균 점수를 계산한다.

    s mean_score
<dbl>      <dbl>
1     1          4
2     2          3

이상치 제거 - 극단적인 값

정상 범위 기준 정해서 벗어나면 결측 처리

  1. 논리적 판단 : 성인 몸무게 40kg - 150kg 벗어나면 극단치
  2. 통계적 판단 : 상하위 0.3% 극단치 또는 상자 그림 1.5IQR을 벗어나면 극단치

상자 그림으로 극단치 기준 정해서 제거

1. 상자 그림 생성

install.packages('ggplot2')

library(ggplot2)

mpg 데이터프레임을 불러온다.

mpg <- as.data.frame(ggplot2::mpg)

mpg

boxplot(mpg$hwy)

상자그림 통계치 출력법

boxplot(mpghwy)hwy)stats

'''
[1,] 12 # 아래쪽 극단치 경계
[2,] 18 # 1사분위수
[3,] 24 # 중앙값
[4,] 27 # 3사분위수
[5,] 37 # 위쪽 극단치 경계
'''

박스플롯 보는 방법

그림출처: EXCEL, SPSS, R로 배우는 통계학입문/강상욱/자유아카데미/2014

mpg$hwy가 12 ~ 37를 벗어나면 이상치로 간주하여 NA를 할당한다.

mpghwy<ifelse(mpghwy <- ifelse(mpghwy < 12 | mpghwy>37,NA,mpghwy > 37, NA, mpghwy)

table(is.na(mpg$hwy))

FALSE  TRUE 
  231     3 

결측치 제외하고 분석

drv 기준으로 그룹화하고,
결측치를 제외한 hwy의 평균을 계산한다.

mpg %>%
group_by(drv) %>%
summarise(mean_hwy = mean(hwy, na.rm = T))

  drv   mean_hwy
  <chr>    <dbl>
1 4         19.2
2 f         27.7
3 r         21  

profile
관심분야: 추천시스템, 자연어처리, 머신러닝, 딥러닝

0개의 댓글