본문 바로가기
R/Graph

R 연속변수 시각화 - 히스토그램 hist

by 통계열등생 2021. 3. 24.
반응형
변수 개수 변수 형태 그래프
일변량 연속형 데이터 히스토그램 (hist)
상자 그래프 (boxplot)
범주형 데이터
(명목형, 수치형)
막대 그래프 (barplot)
파이 차트 (pie)
점 차트 (dotchart)
다변량 연속형 데이터 산점도(행렬) (plot, pairs)
범주형 데이터 모자이크 플롯 (mosaicplot)

 




 

 ◎ 히스토그램

 

hist(x, freq = NULL, probability = !freq, density = NULL, angle = 45,
       col = "lightgray", border = NULL, main = paste("Histogram of" , xname),
       xlim = range(breaks), ylim = NULL, xlab = xname, ylab, axes = TRUE,
       plot = TRUE, labels = FALSE, nclass = NULL, ...)

<인수설명>

freq  TRUE이면 frequency(빈도수)
FALSE이면 probability densities(확률 밀도)
probability  TRUE이면 probability densities(확률 밀도)
FALSE이면 frequency(빈도수)
density, angle  막대 내부 빗금의 1인치당 개수, 빗금의 각도
col, border  막대 내부의 색상, 막대 테두리 색상
main  제목
xlim, ylim  축의 범위
xlab, ylab  축의 이름
axes  축의 출력 여부
plot  TRUE이면 히스토그램 출력
FALSE이면 자료값들을 리스트로 반환
labels  TRUE or 문자열을 지정하면 막대 위에 label 출력
nclass  계급 구간의 개수

 

 

> str(iris)
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

iris 데이터셋은 R 프로그램에 저장되어 있는 내장 데이터셋이다. iris 데이터셋은 3 종의 붓꽃에서 각각 50 개의 꽃에 대해 꽃받침 길이와 너비, 꽃잎 길이와 너비 변수를 센티미터(cm) 단위로 측정한 데이터를 저장하고 있는 데이터프레임 구조이다. 붓꽃의 종은 setosa, versicolor, virginica가 있다. 

이 데이터를 사용해서 hist() 함수의 인수(옵션)들을 설명하려고 한다.

 

> hist(iris[,1])

히스토그램은 데이터의 분포를 알아보는 데 유용한 그래프이며, 값의 범위마다 빈도를 표시하고 있다. 

iris 데이터셋의 첫번째 변수인 꽃받침의 길이를 히스토그램으로 그린 그래프이다. 

 

 

 

  • freq / probability 
> par(mfrow=c(1,2))
> hist(iris[,1], freq=F)
> hist(iris[,1], probability=T)

freq 인수의 기본값은 NULL이고, TRUE인 경우 히스토그램 막대가 각 구간별 데이터의 개수(빈도 frequency)로 그려진다. FALSE이면 히스토그램의 전체 면적이 1이 되도록 각 구간의 확률 밀도(probability densities)가 그려진다.

probability 인수는 freq 인수와 반대로 TRUE인 경우 히스토그램의 전체 면적이 1이 되도록 각 구간의 확률 밀도(probability densities)가 그려진다. FALSE인 경우 히스토그램 막대가 각 구간별 데이터의 개수(빈도 frequency)로 그려진다.

그래프를 보면 freq 인수가 FALSE이고, probability 인수가 TRUE일 때, y축이 Density이며 확률 밀도 히스토그램이 그려진 것을 알 수 있다.

 

 

 

  • density / angle 
> hist(iris[,1], density=15)
> hist(iris[,1], density=15, angle=80)

density 인수는 막대 또는 막대의 구성요소에 대한 음영 선(빗금)의 밀도를 인치당 선의 수로 지정한다. 기본값 NULL은 음영 선이 그려지지 않음을 의미한다.

angle 인수는 막대 내부에 그려지는 음영 선의 기울기이다. 각도는 시계 반대 방향으로 변하고, 기본값은 45º이다. 

 

 

 

  • col
> hist(iris[,1], col="#000000")  # col="black" 과 같은 결과
> hist(iris[,1], col=rainbow(8))

col 인수는 막대를 채우는 데 사용할 색상을 지정한다. 기본값은 "lightgray" 색상이다. 단일값을 지정하면 모든 막대 색상이 똑같이 변경되고, 벡터값을 지정하면 왼쪽 막대부터 각각의 막대 색상을 변경할 수 있다. 

col 인수는 색상 이름(ex "red") or RGB 색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다. 

 

 

 

  • border 
> hist(iris[,1], border=NA)
> hist(iris[,1], border=rainbow(8))

border 인수는 막대의 테두리에 사용할 색상이다. 테두리를 생략하려면 border=NA로 지정하면 된다. 기본적으로 막대의 테두리는 검은색이다. 단일값을 지정하면 모든 막대 테두리 색상이 똑같이 변경되고, 벡터값을 지정하면 왼쪽 막대부터 각각의 막대 테두리 색상을 변경할 수 있다. 

border 인수 또한 col 인수처럼 색상 이름(ex "red") or RGB 색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다. 

 

 

 

  • main / xlab, ylab
> hist(iris[,1], main="Sepal.Length : 꽃받침 길이")
> hist(iris[,1], xlab="Sepal.Length", ylab="")  # ylab=NA / ylab=NULL 과 같은 결과

main 인수는 히스토그램의 제목을 지정한다. 기본적으로 제목은 "Histogram of (객체 x)"으로 출력된다. 

xlab 와 ylab 인수는 각각 x축 이름, y축 이름을 지정한다. ylab 인수의 기본값은 freq 인수가 TRUE일때 "Frequency"이다. x축 이름과 y축 이름을 없애고 싶으면 "" or NA or NULL 값을 지정해주면 된다.  

 

 

 

  • xlim, ylim / axes 
> hist(iris[,1], xlim=c(3,9), ylim=c(-10,40))
> hist(iris[,1], axes=F)

xlim 과 ylim 인수는 각각 x축의 범위, y축의 범위를 지정한다. 

axes 인수는 그래프 축의 출력 여부를 지정할 수 있다. 축을 출력하지 않아도 축의 이름은 출력된다.



 

  • plot
> hist(iris[,1], plot=F)
$breaks
[1] 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0

$counts
[1]  5 27 27 30 31 18  6  6

$density
[1] 0.06666667 0.36000000 0.36000000 0.40000000 0.41333333 0.24000000 0.08000000
[8] 0.08000000

$mids
[1] 4.25 4.75 5.25 5.75 6.25 6.75 7.25 7.75

$xname
[1] "iris[, 1]"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"

 

plot 인수는 논리값을 지정한다. TRUE(기본값)이면 히스토그램이 그려지고, 그렇지 않으면 히스토그램을 그릴 때 사용되는 자료값들이 리스트로 반환된다. 

 

 

 

  • labels / nclass
> hist(iris[,1], labels=T)
> hist(iris[,1], nclass=20)

labels 인수는 논리값 또는 문자열을 지정한다. FALSE가 아닌 경우 히스토그램 각각의 막대 위에 빈도수 레이블을 출력한다. 

nclass 인수는 숫자(정수)를 지정한다. 히스토그램의 막대 개수를 조절할 수 있다. 

 

 

 

 

 

 ◎ 히스토그램 응용

 

> cat("평균 =", mean(iris$Sepal.Width), "\n표준편차 =", sd(iris$Sepal.Width))
평균 = 3.057333 
표준편차 = 0.4358663
> 
> s.w_norm = rnorm(10000, mean(iris$Sepal.Width), sd(iris$Sepal.Width))
> cat("평균 =", mean(s.w_norm), "\n표준편차 =", sd(s.w_norm))
평균 = 3.058179 
표준편차 = 0.4430882

이번에는 iris 데이터셋의 두번째 변수인 꽃받침의 너비 변수를 사용해보려 한다. 

s.w_norm 객체는 rnorm() 함수를 사용해서 Sepal.Width의 평균과 표준편차 값의 정규분포를 따르는 난수를 10000개 생성하였다. Sepal.Width의 평균과 표준편차, s.w_norm의 평균과 표준편차로 히스토그램 위에 확률 밀도 곡선을 그릴 것이다.

 

> hist(iris$Sepal.Width, xlab="꽃받침 넓이", ylab="확률 밀도", 
+      freq=F, main="iris 꽃받침 넓이 histogram", nclass=24,
+      xlim=c(2.0,4.5), ylim=c(0,1.5), col=rainbow(100)[45:100], 
+      border=NA) 
>
> lines(density(iris$Sepal.Width), col="#FF5050", lwd=2, lty=2)
> lines(density(s.w_norm), col="#5050FF", lwd=2, lty=4) 

freq 인수를 FASLE로 지정하여 확률 밀도(probability densities) 히스토그램을 그렸다. nclass 인수로 막대의 개수를 늘려주었고, col 인수는 무지개 100가지 색 중에서 45번째 색부터 막대의 색상을 하나씩 채우도록 지정하였다.

 

lines() 함수는 기존에 그려진 그래프 위에 꺾은선을 추가하여 그린다. 

lwd 인수는 선의 두께를 조절하고, lty 인수는 선의 타입을 지정할 수 있다.

 

density() 함수는 커널 밀도를 추청하는 데이터를 반환한다.

Sepal.Width의 확률 밀도 곡선(빨간색)과 정규분포를 따르는 확률 밀도 곡선(파란색)을 비교해보면 위에서 표준편차를 출력한 결과처럼 정규분포를 따르는 곡선의 분산이 더 큼을 알 수 있다. 또한 빨간색 밀도 곡선를 보면 꽃받침 너비 데이터의 첨도가 0보다 큰 양수일 것을 짐작할 수 있다. 

 

> kurtosis = function(x){
+         sum4 = sum((x-mean(x))^4)
+         sum2 = sum((x-mean(x))^2)
+         kurtosis = ((sum4/length(x))/((sum2/length(x))^2))-3
+         kurtosis
+ }
> kurtosis(iris$Sepal.Width)
[1] 0.1809763

R에서 왜도와 첨도를 계산하는 함수를 사용하려면 "psych" 패키지를 설치해야 한다. 그래서 첨도를 계산하는 함수를 정의하여 꽃받침 너비 데이터의 첨도를 계산해보면 0보다 큰 양수임을 알 수 있다.

 

 

 

 

 

<R 연속변수 시각화 - 히스토그램 hist>

반응형

댓글