본문 바로가기

내가 터득한 R 프로그램

[R프로그래밍] 상대빈도, 2차원 빈도

상대빈도

저번시간에는 절대빈도를 잠깐 알아봤구요 이번시간에는 상대빈도를 알아봅시다. 사실 저번 포스팅에서 상대빈도에 대한 이야기를 마지막에 언급했는데요. 그것이 핵심입니다. 남과 여의 '비율'을 알아보자는 것이지요.

그 전에 항상 먼저 해야하는 것! 바로 데이터를 불러와야겠지요? 저번과 마찬가지로 명령어를 입력해 줍니다.


library("Ecdat")

attach(BudgetFood)


그중에서 데이터중에서 저희는 성별의 비율을 봐봅시다. 절대빈도를 볼때는 "table"이라는 명령어를 사용했는데요. 여기에 proportion(비율)이라는 단어를 첨가한 다른 명령어를 입력합니다.


prop.table(table(sex))

sex

     man    woman 

0.860373 0.139627 


이렇게 나옵니다. 대략 남자가 86퍼센트 여자가 14퍼센트정도의 비율로 나오네요. prop.table이라는 명령어에 다시한번 table이 들어가 있네요? 제가 저번시간에 R프로그램의 연산은 괄호가장 안쪽부터 바깥쪽 순서로 한다고 했지요? 성별을 먼저 남과 여로 구분해서 절대적인 수로 표현해주고 그것을 다시한번 비율로 바꾸는 것입니다. 만약에 여기서 그냥 prop.table(sex)라고 해버리면 


> prop.table(sex)

Error in Summary.factor(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L,  : 

  'sum' not meaningful for factors


man,man,man,woman,man,man.... 이런식으로 나열되어 있는 데이터를 무작정 비율로 나타낼 수는 없습니다. 그래서 남과 여로 구분해주는게 선행되어야합니다. 반드시 기억해두세요


도시의 크기도 한번 해볼까요?


prop.table(table(town))

town

               1                2               3                4               5 

0.1210996 0.1662773 0.1819623 0.4122727 0.1183881 


4번이 약 41.23퍼센트로 압도적으로 많습니다. 가장 큰 도시가 5번 이었으니 그다음 규모인데요. 아쉽게도 그 도시의 규모는 help란에 정확하게는 기술이 안되어 있어서 각 숫자가 얼만큼의 규모를 의미하는지는 알 수 없습니다.


2차원 빈도

저희가 통계에서 많이 만나는 것은 남과 여의 비율도 있겠지만 남과 여의 비율과 흡연자의 비율도 함께 보는 경우도 많이 있습니다. 그래서 그런 경우에 사용하는 것이 2차원 빈도입니다.


그럼 계속해서 우리가 사용했던 데이터를 이용해 볼 건데요. 이것도 마찬가지로 절대빈도와 상대빈도로 볼 수 있습니다.


먼저 절대빈도로 성별과 도시 규모를 한번 봐 볼까요?


table(sex,town)

       town

sex               1       2       3       4       5

  man     2534 3481 3839 8413 2357

  woman  369   505   523 1469   481


데이터에 워낙 남녀의 편중이 심하다보니 이렇게만 봐서는 유의미한 것들을 찾지 못할 것 같지만 나중에 조금 더 들어가다 보면 이 중에서도 나름대로 유의미한 결과를 도출해 낼 수 있습니다.


이것을 상대빈도로 나타내려면 위에 우리가 배운것과 거의 다르지 않습니다. 앞에 prop.table만 붙여주면 되지요


prop.table(table(sex,town))

       town

sex                       1                2                 3                   4                 5

  man   0.10571107 0.14521714 0.16015185 0.35096575 0.09832715

  woman 0.01539360 0.02106712 0.02181803 0.06128238 0.02006591


숫자가 많이 나오니 정신이 없습니다. 소숫점 둘째자리까지만 보도록 합시다. R프로그래밍 2번째 시간에 잠깐 언급했었던 round라는 명령어가 있습니다. 그때는 round라는 명령어만 입력했는데요. 그렇게 되면 상대빈도표에서는 50% 이상은 1, 50% 미만은 다 0으로 나올겁니다. 왜냐하면 반올림을 해서 소수점을 첫째자리를 반올림해버리거든요. 그래서 round 다음에 반올림 할 대상을 입력하고 그뒤에 소숫점 몇째짜리까지 올릴건지도 입력해줘야합니다.


round(prop.table(table(sex,town)),digits = 2)

       town

sex               1        2      3      4       5

  man       0.11   0.15 0.16 0.35  0.10

  woman 0.02 0.02 0.02 0.06 0.02


반올림할 대상은 "prop.table(table(sex,town))"이고 반올림은 소숫점 둘째자리 "digits = 2"까지 해봅니다.

소숫점을 절대빈도로보면 여자그룹은 4 이외에도 1,2,4,5가 어느정도는 차이가 있어보이는데 소숫점을 반올림하니까 차이가 없어보입니다. 이렇게 되면 데이터를 보는데 어려움이 큽니다. 그래서 소숫점을 어디에서 반올림할 건지도 통계에서는 상당히 중요합니다.