밀도 그래프(densityplot)은 수치형 변수를 촘촘히 배열하면서 그 사례사이의 거리를 역으로 밀도화시키는 방법이다. 줄여 말하면, 거리가 가까우면 밀도가 높고, 거리가 멀면 밀도가 낮게 계산되고 시각화된다. Prestige 데이터셋의 income 변수를 사용해보자.
밀도 추정 그래프를 시각화하는 경우, 그래프의 시작점과 끝점에 대한 사전정보를 수치적 정보 요약 등을 활용하여 미리 알고서 지정해주면 그래프가 보다 정교해진다. 위의 그래프를 보라. 수입(연봉)을 표시하는 촘촘한 사례들의 영역 바깥에 그래프의 왼쪽 긑과 오른쪽 끝이 표시된 것을 보게된다. 변화를 줘보자.
한편, 직업유형인 요인형 변수 type을 기준으로 수입(연봉)의 분포를 재분류해보자. <집단 기준으로 그리고...> 버튼을 누르면 <집단 변수 (하나 선택)> 기능에서 요인형 변수 목록이 나타날 것이다. Prestige 데이터셋에는 type 하나만 있다. 그리고 예(OK) 버튼을 누른다.
그러면 <집단 기준으로 그리기...> 버튼이 <Plot by: type>으로 바뀐다. type의 수준별로 income의 밀도 분포를 시각화할 준비가 된 것이다.
그래픽장치 창에 type 별 수입(연봉)에 대한 밀도 그래프가 등장한다. 그래프의 오른쪽에는 네모상자 안에 범례 표시가 있어서 어떤 선이 요인형 변수의 어떤 수준을 나타내는지 알려준다.
그래프 > 그래프를 파일로 저장하기 > PDF/Postscript/EPS(으)로 에서 PDF 파일로 저장해보자. 넓이와 높이에 대한 조정 없이<글 크기 (점)>을 16까지 키워보자.
아래 코드에서 'main'인자를 살펴보라. 메뉴창에 등장하는 기능을 활용하면서 적용할 수 있는 범위에 DensityPlot 함수에는 제목 입력이 없다. 아쉽기도 한 부분이다. 이 경우는 입력창에서 main="제목 이름"을 추가하여 넣고 실행하기 버튼을 누르면 된다.
densityPlot(income~type, data=Prestige, bw=bw.SJ, adjust=1, kernel=dnorm,
method="adaptive", from=611, to=25879, xlab="수입(연봉)", ylab="밀도(Density)",
main="1971년 캐나다 직업 유형별 수입에 관한 밀도그래프")
그래프 > 색인 그림... Graphs > Index plot... 데이터셋이 활성화되어 있는 경우, 색인 그림(index plot)을 사용할 수 있다. 예를 들어, carData 패키지의 Prestige 데이터셋이 활성화되어있다고 하자.
Prestige 데이터셋에 있는 education 변수의 색인 그림을 만들자. 메뉴창에 있는 variable (pick one or more) 에서 education을 선택한다. 그 아래에 있는 <집단별 표시...>에서 요인형 변수를 선택하여 요인 수준별로 색인 그림을 출력할지 결정할 수 있다(이 설명에서는 이 기능을 사용하지 않는다). 그리고 <선택기능> 디렉토리로 이동하여 세부사항을 점검한다.
<선택기능>의 메뉴창에 다양한 기능이 있다. <그림 이름표>에서 <y-축 이름표> <그래프 제목>는 자동적으로 변수이름이 사용되고 제목은 미설정되는데, '교육연수'와 'education index plot'이라고 입력하자. 그리고 예(OK) 버튼을 누른다.
새로운 그래픽 장치창이 등장한다. 그리고 그 장치창에 안의 아래 화면 왼쪽에 '교육연수'가, 상단 중앙에 'education index plot'이 출력된다. 한편 그래프 안에 두개의 사례 이름이 겹쳐서 인쇄된 현상을 보게된다.
아래 출력창을 살펴보자. indexplot() 함수의 코드 사용법을 먼저 살펴본다. 앞서 입력한 '교육연수', 'education index plot'이 인자 안에 들어있는 알 수 있다.
indexplot(Prestige[,'education', drop=FALSE], type='h', id.method='y', id.n=2,
ylab="교육연수", main="education index plot")
education 변수의 사례 값 중에서 university.teachers는 15.97, physicians는 15.96라는 두개의 최고 값을 갖는다. 출력창에는 university.teachers, physicians 라는 순서와 함께 사례번호인 21, 24가 출력된다.
R이 시작될 때, datasets 패키지가 자동으로 호출된다. 따라서 R Commander를 실행할 때, datasets 패키지는 첨부 패키지화되어 메뉴창을 통해서 내부 데이터셋을 찾고 불러올 수 있다.
메뉴창에서 순서대로 데이터 > 패키지에 있는 데이터 > 첨부된 패키지에서 데이터셋 읽기... 를 선택하면 다음과 같은 창이 등장한다.
출력창을 보면, airquality라는 데이터셋에는 6개의 변수가 있고, 각 변수는 수치형 정보를 담고 있다.
Month 변수는 최소 5에서 최대 9로 값이 있는데, 정확히는 5월부터 9월까지일 것이다. 한달 한달을 뜻하는 월(month)은 5월이 9월보다 크다고 할 수 없고, 5월, 6월, 7월, 8월, 9월 등으로 개체화되어 분리된다. 다시 말하면, 요인형 변수가 되어야 한다는 뜻이다.
그럼 왜, airqualty 데이터셋의 Month 변수는 수치형으로 되어 있을까. 원자료를 R의 데이터셋으로 불러오는 과정에서 해당 변수의 요인화과정이 생략되었을 것이다.
airquality {datasets}
R Documentation
New York Air Quality Measurements
Description
Daily air quality measurements in New York, May to September 1973.
Usage
airquality
Format
A data frame with 153 observations on 6 variables.
[,1]
Ozone
numeric
Ozone (ppb)
[,2]
Solar.R
numeric
Solar R (lang)
[,3]
Wind
numeric
Wind (mph)
[,4]
Temp
numeric
Temperature (degrees F)
[,5]
Month
numeric
Month (1--12)
[,6]
Day
numeric
Day of month (1--31)
Details
Daily readings of the following air quality values for May 1, 1973 (a Tuesday) to September 30, 1973.
Ozone: Mean ozone in parts per billion from 1300 to 1500 hours at Roosevelt Island
Solar.R: Solar radiation in Langleys in the frequency band 4000–7700 Angstroms from 0800 to 1200 hours at Central Park
Wind: Average wind speed in miles per hour at 0700 and 1000 hours at LaGuardia Airport
Temp: Maximum daily temperature in degrees Fahrenheit at La Guardia Airport.
Source
The data were obtained from the New York State Department of Conservation (ozone data) and the National Weather Service (meteorological data).
References
Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983) Graphical Methods for Data Analysis. Belmont, CA: Wadsworth.
Examples
require(graphics)
pairs(airquality, panel = panel.smooth, main = "airquality data")