본문 바로가기

방법론 공부/계량통계 방법론

[STATA] 히스토그램과 instant command - histogram, scatteri

하나의 STATA do-file 일부를 살펴보면서 histogram, twoway histogram, scatteri command 등에 대해 알아보겠습니다.


twoway (histogram foreign, discrete width(5) percent ytitle(percent of sites) ///

xtitle("foreigners") xlabel(, angle(zero) tposition(inside)) ///

title("Distribution of percent of foreigners")) ///

(scatteri 0 13 25 13, c(l) m(i) legend(off) ///

note("Note: Red line is the average (13).")) 

save "`figurepath'distforeigns.png", replace




STATA를 통해서 바로 주어진 데이터에 대한 그래프 및 히스토그램을 그릴 수 있습니다. 히스토그램 관련 command로는 twoway histogram과 histogram 두 가지가 있습니다. histogram에서만 사용할 수 있는 몇 가지 옵션을 제외하고는 두 command는 거의 비슷하게 사용됩니다. 한편 여기서는 twoway histogram과 twoway scatteri를 통해 두 가지 그래프를 동시에 그리기 때문에 twoway가 앞에 추가되었습니다. 




히스토그램은 연속변수와 이산변수에 모두 사용할 수 있으며, 기본 형식은 다음과 같습니다.


histogram 변수명


이때 사용된게 discrete, width(), percent, ytitle, xtitle, xlabel, tposition, title, scatteri, note option인데 차례로 살펴보겠습니다.

discrete

histogram foreign, discrete

이 command를 통해 히스토그램을 그리는 데에 사용하는 해당 데이터가 이산 변수라고 지정해줍니다. 따라서 해당 변수에 있는 각각의 값들이 bin으로 사용하게 합니다.히스토그램은 기본적으로 해당 변수가 연속변수라고 인식합니다.


width()

histogram foreign, discrete width(5)

bin들 간의 간격을 지정해줍니다. 사실 이산변수 히스토그램에서는 width를 잘 지정해주지 않는데, 데이터가 너무 드문드문 위치해있다고 생각하면 이처럼 지정해줄 수 있습니다. 예컨대 1, 2, 3, . . . , 9가 관측될 수 있는 상황에서 2, 4, 7, 8이 관측되었다고 합시다. 기본 설정에 따르면 width(2)로 히스토그램이 생성되겠지만, width(1)로 설정해줄 수 있습니다. 앞서의 예에서는 width(5)로 지정이 되었으니 5를 간격으로 bin이 생성되겠지요.

이때 직접적으로 bin의 수를 bin()를 통해 지정해줄 수도 있습니다.


percent

histogram foreign, discrete width(5) percent

히스토그램의 y축은 기본적으로 density로 표시됩니다. 이를 density; fraction; frequency; percent의 네 가지 단위로 바꿀 수 있습니다. density는 밀도(전체 히스토그램 면적을 합하면 1), fraction는 상대적 빈도(전체 히스토그램의 높이를 합하면 1), frequency는 빈도, percent는 퍼센트를 의미하겠죠.


xtitle & ytitle & title

histogram foreign, ytitle(percent of sites) ///

xtitle("foreigners") ///

title("Distribution of percent of foreigners"))

각각 command option을 통해 x축의 title, y축의 title, 그리고 전체 히스토그램의 title을 설정할 수 있습니다. 

xtitle("First line" "Second line" "Third line")

ytitle("First line" "Second line")  

과 같이 여러 개의 title을 설정할 수도 있습니다. 


xlabel & ylabel & tposition

xlabel(, angle(zero) tposition(inside))

x축과 y축 변수값 간격에 대한 라벨을 붙일 수 있습니다. 이때 angle(zero)는 라벨의 기울기를 의미합니다. 숫자가 너무 빼곡히 있을 때에는 (45)정도로 기울기를 줄 수 있겠죠. tposition(inside)는 간격마다 있는 tick의 위치가 그래프 안에 위치할 것이냐, 바깥에 위치할 것이냐를 지정해주는 것입니다.(outside | crossing | inside)로 지정해줄 수 있습니다. 


scatteri

(scatteri 0 13 25 13, c(l) m(i) legend(off)

이는 histogram에 걸리는 option이 아니라, twoway scatteri에 해당하는 command입니다. 이는 기본적으로 immediate command로, 저장된 dataset에서 정보를 추출하는 것이 아니라 해당 command 실행시 입력된 data에 기반하여 결과를 나타냅니다. twoway scatteri command를 통해 히스토그램에 문자 혹은 실선 등을 추가할 수 있습니다. 다음의 형식을 따릅니다.


twoway scatteri #y축값 #x축값 (시계방향기준위치[0,12]) "표시할 글자"


(x,y)에 해당하는 위치를 기준으로 (시계#시방향으로) "글자"를 표시하라는 것이지요. 그런데 위에서는 입력된 숫자가 네 개지요. 이는 


. clear

. input y x

y x

1. 0 13

2. 25 13

3. end

. twoway scatter y x, any_options


과 동일한 결과를 줍니다. 앞서 이 command가 immediate command라고 했지요. 직접 x값과 y값을 입력한 다음에 방금 입력한 x와 y에 대해서 그래프를 그립니다.  


이때 c(l)은 각각의 point를 실선으로 연결할 것인지 여부를 나타냅니다. c(i)는 연결하지 말라는 것이고 대부분 c(l) option이 사용됩니다. m(i)는 msymbol(i)를 의미하며, marker의 모양을 결정합니다. 각각의 marker를 동그란 점으로, 세모꼴로, 네모꼴로 등등 표현할 수 있으며, m(i)는 marker 표시를 하지 않겠다는 것을 의미합니다. legend(off)는 범례를 표시하지 말라는 것이지요.


따라서 (13,0)과 (13,25)의 두 지점을 잇는 실선이 그려지겠지요. 


note

note("Note: Red line is the average (13).")) 

히스토그램에 대한 정보를 담을 수 있습니다. 앞서 그려진 실선에 대한 정보를 담고 있습니다. 


save

save "`figurepath'distforeigns.png", replace

이렇게 그려진 히스토그램이 해당 파일명으로 저장됩니다.'figurepath'는 앞서 local command를 통해 directory가 지정된 것입니다.


앞서의 command에 사용되지 않은 몇 가지 옵션 중 normal과 kendensity까지 소개하겠습니다. 


normal & kdensity


두 옵션을 사용하면 히스토그램 위에 정규분포곡선과 커널분포곡선을 추가할 수 있습니다. 이때 커널분포곡선이란 커널 함수에 따라 특정 변수의 확률분포를 근사한 커널밀도추정에 따른 그래프를 말합니다. 단순히 말해 히스토그램이 bin의 경계에서 불연속성을 갖는 것에 비해, 히스토그램의 확률밀도함수를 스무딩(smoothing)한 것으로 볼 수 있습니다.