본문 바로가기

빅데이터과정/R

#50_140825_R_이상치, 중앙값, 상한, 하한

728x90


# 이상치, 중앙값, 상한, 하한



 

  

 

평균값을 알아야하는 이유 ?

헬스 클럽에 오는 사람들이 자신과 비슷한 연령의 사람들과 같은 교실에 있을때 가장 행복해 한다는 사실을 알게 되어서 각 교실에 가장 전형적인 나이대가 어디쯤인지 파악하려면 각 교실별로 나이의 평균값을 알아야한다.

통계학에서는 이것을 mean 이라고 한다.

average 라고 안하고 mean 이라고 하는 이유는 평균값을 구하는데 여러가지 방법이 있기 때문이다

  

 

 

>> 현재 반의  나이의 평균값을 구한다고 했을때 지금은 사람의 수가 몇 명인지 알고있지만 새로운 누군가 나오면 다시 계산을 해야하는 번거로움이 생긴다.

이런 번거로움을 해결하기 위해서 아래처럼 숫자를 문자로 표현한다

sum = X1 + X2 + X3 + X4 + X5 + ... + xn 

결국 이것은 아래의 수식 시그마와 같다

∑x  ( 시그마 x 라고 읽는다).

그럼 평균을 구하는것은 아래의 수식과 같다

∑x

----------   = μ

 

                                                 

 

     

 

 

아래의 평균값을 구해보자

 

     나이    19   20   21          

     도수     1    3    1

 

            19+20+20+20+21

     μ =   --------------   = 20

                   5  

 

위의 결과를 보면 숫자 20 3번 반복되고 있다이것을 표현한 공식이 아래와 같다

               ∑fx             1*19 + 3*20 + 1*21

    μ =   ---------------- = ---------------------- = 20

               ∑f                       5

 

 

1.     아래의 두개의 표를 이용해서 평균값과 중앙값을 이용한 비교

 

파워워크아웃 교실

            나이   19   20  21

            도수    1    3   1

 

> x <- c(rep(19,1),rep(20,3),rep(21,1))

> mean(x)

[1] 20

 

 

쿵푸 교실 학생들의 나이

            나이  19  20  21  145  147

            도수   3   6   3    1   1

 

> y <- c(rep(19,3),rep(20,6),rep(21,3),rep(145,1),rep(147,1))

> mean(y)

[1] 38

 

쿵푸 교실의 데이터는 이상치를 가지고 있다이 이상치로 평균값이 커졌다.

이상치란 ?

다른 데이터에 비해서 눈에 띄게 높거나 낮은 값

편향(skewed) 이란?

이상치에 의해서 평균값이 상승되었다면 데이터가 편향 됐다고 할 수 있다

 

 

>> 위의 현상은 평균값이 편향된 데이터와 이상치 때문에 그릇된 정보를 제공하기 때문이다이를 해결하기 위한 해결방법은 중앙값(median)을 구하는 것이다

 

     19     19    20    20    20    21    21    100    102

                              ↑

                            중앙값

 

        19    20    20    20    21    21    100    102

                             ↑

                       20 과 21의 가운데 평균값

 

평균값이 갖는 위험은 실제로 데이터 집합에 존재하지 않는 수라는 것이다.

그런데 중앙값은 그 반의 임의 학생을 선택한것이라 다른 학생들도 20세일 가능성이 높다.

 

 

각각의 데이터 집합에 대해서 중앙값과 평균값을 구해서 데이터가 편향되었는지 살펴보자 ( 평균값이 중앙값보다 높은지 낮은지)

 

             1    2   3   4   5   6   7   8

        도수   4    6   4   4   3   2   1   1

 

             1    4   6   8   9  10   11  12

        도수   1    1   2   3   4   4    5   5

 

> headf3 <-   c(  1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,7,8 )

> headf4 <-   c(  1,4,6,6,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,11,12,12,12,12,12)

 

>> 중앙값과 평균을 이용해서 편향여부를 판단할 수 있다

 

> median(headf3)

[1] 3

> mean(headf3)

[1] 3.44

왼쪽으로 편향됐다고 판단할 수 있다

> median(headf4)

[1] 10

> mean(headf4)

[1] 9.28

왼쪽으로 편향됐다고 판단할 수 있다

 

 

 

 

최빈값을 구하는 단계

      1. 데이터 집합에서 서로 구별되는 범주나 값을 모두 찾는다

      2. 각 값이나 범주의 도수를 적는다

      3. 최빈값을 얻기 위해 가장 도수가 높은값을 고른다.

 

최빈값(mode)

평균값과 중앙값 이외에 세번째 종류의 평균이 존재하는데 이것이 최빈값이다

최빈값은 데이터 중에서 가장 흔하게 나타나는 값을 말한다

 

예제

 

1.     아래의 데이터에서 최빈값을 고르시오 !

 

      1   2   3   4   5   6   7    8

 도수   4   6   4   4   3   2   1    1

 

c <- c (1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,7,8)

 

 

> table(c)

c

1 2 3 4 5 6 7 8

4 6 4 4 3 2 1 1

 

> which.max(table(c))

2

2

 

> names(table(c))[2]

[1] "2"

 

 

 

 

평균 데이터는 중심이 어디쯤인지 알려주지만데이터가 어떤식으로 변화하는지에 대해서는 알려주지 않는다.

점수가 평균을 중심으로 어떻게 분포되어 있는지 알려면 범위(range)를 구한다

 

 7,8,9,9,10,10,11,11   ,12,13

 ↑                  ↑

하한                상한

 

  범위 =  상한 - 하한 = 6 

13     7

 

 

>> 왜 범위를 알아야하는가 ?  x1 , x2, x3 가 내가 건너가야할 강의 길이라고 생각하고 범위최저 높이 , 최고 높이)를 알아내서 내가 가야할 강의 길이 어딘지 알아낸다고 가정하자

 그런데 범위는 그 자체로는 데이터의 폭만 설명할 뿐 그 안에서 데이터가 분포되는 방식은 설명해주지 않는다.

 

x1 <-c(7,8,9,9,10,10,11,11,12,13)

x2 <- c (7,9,9,10,10,10,10,11,11,13 )

x3 <- c(3,3,6,7,7,10,10,10,11,13,30 )

 

> range(x1)

[1]  7 13

> range(x2)

[1]  7 13

> range(x3)

[1]  3 30

 

 



범위의 문제점은 무엇인가 ?

범위는 데이터 집합의 분포를 간단하게 측정하는 방법이지만 이상치가 있다면 범위를 이용해서 분포된 방식을 이야기 하는것은 올바른 방법이 아니다.

 

 

>> 그래서 결국은 아래와 같은 요소가 필요하다

이상치로부터 멀어질 필요가 있다그럴려면 미니 범위를 지정해야한다.

이는 사분위수로 해결한다

 

 



 사분위수?

데이터를 동일한 크기의 조각으로 나누는 값들을 사분위수라고 한다.

 

         1 1 1 2 2  □  2 2 3 3 3  □  3 3 4 4 4 □  4 5 5 5 10

               ↑                           ↑

                -----------------------------

               4구간으로 나눈 2구간의 범위를 미니 범위라고 한다

10의 이상치는 미니범위에 속하지 않는다.

 

 



outlier 함수를 이용하여 c2 의 이상치를 찾으시오 !

 

> c1 <- c(1, 1 ,1, 2, 2, 2 ,2, 3, 3 ,3, 3, 3, 4, 4, 4 ,4, 5, 5, 5 )

> install.packages("outliers")

> library(outliers)

> outlier(c2)

   [1] 10

 

 

>> 하한값하한 사분위수 , 중앙값상한 사분위수상한값을 출력

    

    1 1 1 2 2  □  2 2 3 3 3  □  3 3 4 4 4 □  4 5 5 5 10

    ↑     ↑             ↑            ↑            ↑      

   하한   하한           중앙값        상한         상한

         사분위수                      사분위수

 

하한 사분위수 첫번째 구간의 맨 끝값

하한 사분위수 세번쨰 구간의 맨 끝값

 

> boxstats <- boxplot(c2)

 



 

 

> boxstats

$stats

     [,1]

[1,]    1    ← 하한

[2,]    2    ← 하한 사분위수

[3,]    3    ← 중앙값

[4,]    4    ← 상한 사분위수

[5,]    5    ← 상한값

 

$n

[1] 20

 

$conf

         [,1]

[1,] 2.293403

[2,] 3.706597

 

$out

[1] 10      ← 아웃라이어

 

$group

[1] 1

 

$names

[1] "1"

 



 

boxplot을 이용하여 위의 나열된 값들을 구하는 이유

이상치 때문이다이상치를 제거하고 가운데 데이터를 중심으로 분석하여 이상치에 의한 오류를 줄이기 위해서 필요하다

 





1.     위의 농구선수 점수를 가지고 박스 플롯을 그려 사분범위를 확인)

 

> x1 <- c(7,8,9,9,10,10,11,11        ,12,13)

> x2 <-c(7,9,9,10,10,10,10,11,11,13,13)

> x3 <-c(3,3,6,7,7,10,10,10,11       ,13,30 )

> z <- cbind(x1,x2,x3)

> boxplot(z)

 

 

 

 

 

 

 

이상치중앙값상한하한 확인

1.     ggplot2( ) 패키지를 설치한 후 로딩

> install.packages("ggplot2") 

> library(ggplot2)

 

2.     파일을 읽어서 데이터 프레임을 생성

> stemp <- read.csv("서울의기온변화.csv",header=T)

 

3.      ggplot 을 이용하여 챠트를 생성

> mt <- ggplot(stemp,aes(factor(Month),MeanTemp)) + geom_boxplot()

> mt

 

 






'빅데이터과정 > R' 카테고리의 다른 글

#50_140825_R_PIE CAHRT  (0) 2014.08.26
#50_140825_R_TWITTER 분석  (0) 2014.08.26
#50_140825_R_움직이는 GRAPH  (0) 2014.08.25
#50_140825_R_AUDIO GRAPH  (0) 2014.08.25
#49_140822_R_LINE CHART  (0) 2014.08.22