산포도(분산도)

R로 시작하는 통계학 입문

Maggie Matsui

Content Developer, DataCamp

산포란?

두 개의 히스토그램: 하나는 좁아서 몇 값만 포함하고, 다른 하나는 넓어서 더 많은 값을 포함.

R로 시작하는 통계학 입문

분산

각 데이터가 평균에서 떨어진 평균 거리 7개의 점그래프와 가운데 평균을 나타내는 검은 선.

R로 시작하는 통계학 입문

분산 계산하기

7개의 점그래프와 가운데 평균을 나타내는 검은 선. 각 점과 가운데 선 사이에 화살표 표시.

dists <- msleep$sleep_total - mean(msleep$sleep_total)
dists
1.66626506  6.56626506 ... -4.13373494  2.06626506 -0.63373494
R로 시작하는 통계학 입문

분산 계산하기

squared_dists <- (dists)^2
2.776439251 43.115836841 ... 17.087764552  4.269451299  0.401619974
sum_sq_dists <- sum(squared_dists)
sum_sq_dists
1624.066
R로 시작하는 통계학 입문

분산 계산하기

sum_sq_dists/82
19.80568
var(msleep$sleep_total)
19.80568
R로 시작하는 통계학 입문

표준편차

sqrt(var(msleep$sleep_total))
4.450357
# 'sleep_total'의 표준편차
sd(msleep$sleep_total)
4.450357
R로 시작하는 통계학 입문

평균절대편차

dists <- msleep$sleep_total - mean(msleep$sleep_total)
mean(abs(dists))
3.566701

 

표준편차 vs. 평균절대편차

  • 표준편차는 거리를 제곱하여 큰 거리를 더 크게 벌줍니다.
  • 평균절대편차(MAD)는 모든 거리를 동일하게 반영합니다.
  • 어느 한쪽이 항상 더 좋지는 않지만, 표준편차가 더 흔합니다.
R로 시작하는 통계학 입문

사분위수

quantile(msleep$sleep_total)
   0%   25%   50%   75%  100% 
 1.90  7.85 10.10 13.75 19.90

제2사분위/50백분위 = 중앙값

R로 시작하는 통계학 입문

상자그림은 사분위수를 사용

ggplot(msleep, aes(y = sleep_total)) +
  geom_boxplot()

포유류 총 수면 시간의 상자그림

R로 시작하는 통계학 입문

분위수

quantile(msleep$sleep_total, probs = c(0, 0.2, 0.4, 0.6, 0.8, 1))
   0%   20%   40%   60%   80%  100% 
 1.90  6.24  9.48 11.14 14.40 19.90

seq(from, to, by)

quantile(msleep$sleep_total, probs = seq(0, 1, 0.2))
   0%   20%   40%   60%   80%  100% 
 1.90  6.24  9.48 11.14 14.40 19.90
R로 시작하는 통계학 입문

사분위범위(IQR)

상자그림의 상자 높이

iqr = quantile(msleep$sleep_total, 0.75) - quantile(msleep$sleep_total, 0.25)
iqr
75%
5.9
R로 시작하는 통계학 입문

이상치

이상치: 다른 값들과 상당히 다른 데이터 포인트

얼마나 다르면 상당한가요? 다음을 만족하면 이상치입니다:

  • $\text{data} < \text{Q1} - 1.5\times\text{IQR}$    또는
  • $\text{data} > \text{Q3} + 1.5\times\text{IQR}$
R로 시작하는 통계학 입문

이상치 찾기

iqr <- quantile(msleep$bodywt, 0.75) - quantile(msleep$bodywt, 0.25)

lower_threshold <- quantile(msleep$bodywt, 0.25) - 1.5 * iqr upper_threshold<- quantile(msleep$bodywt, 0.75) + 1.5 * iqr
msleep %>% filter(bodywt < lower_threshold | bodywt > upper_threshold ) %>% 
  select(name, vore, sleep_total, bodywt)
# A tibble: 11 x 4
   name                 vore  sleep_total bodywt
   <chr>                <chr>       <dbl>  <dbl> 
 1 Cow                  herbi         4      600 
 2 Asian elephant       herbi         3.9   2547 
 3 Horse                herbi         2.9    521 
 ...
R로 시작하는 통계학 입문

연습해 봅시다!

R로 시작하는 통계학 입문

Preparing Video For Download...