Histograms and Density Plots
preface 이번 포스트에서는 자료의 분포를 한눈에 알아볼 수 있는 히스토그램에 대하여 설명합니다.
다음 자료를 참고하였습니다:
Histograms
R 에서 숫자 벡터(numeric vector) x 에 대한 히스토그램을 그리려면 hist(x)
함수를 이용합니다. freq=FALSE
옵션을 사용하면 빈도수 대신 비율을 사용합니다. breaks=
옵션을 사용하여 구간을 몇개로 나눌 것인지 결정할 수 있습니다.
# Histogram
hist(iris$Petal.Length)
hist(iris$Petal.Length, col="gray", xlab="Petal Length", main="Colored histogram")
hist(iris$Petal.Length, breaks=30, col="gray", xlab="Petal Length", main="Colored histogram")
# Histogram with Normal Curve
hist(iris$Petal.Length, freq=FALSE, col="gray", xlab="Petal Length", main="Colored histogram") # density
curve(dnorm(x, mean=mean(iris$Petal.Length), sd=sd(iris$Petal.Length)), add=TRUE, col="red") # add a normal distribution line in histogram
# Histogram with Percentage
hist(iris$Petal.Length, col="gray", labels=TRUE, ylim=c(0,45))
histPercent <- function(x, ...){
H <- hist(x, plot=FALSE)
H$density <- with(H, 100*density*diff(breaks)[1])
labs <- paste(round(H$density),"%",sep="")
plot(H,freq=FALSE,labels = labs, ylim=c(0,1.08*max(H$density)),...)
}
histPercent(iris$Petal.Length,col="gray")
Simple Histogram
# Simple Histogram
hist(mtcars$mpg)
Colored Histogram
# Colored Histogram with Different Number of Bins
hist(mtcars$mpg, breaks=12, col="red")
Histogram with Normal Curve
# Add a Normal Curve (Thanks to Peter Dalgaard)
x <- mtcars$mpg
h<-hist(x, breaks=10, col="red", xlab="Miles Per Gallon",
main="Histogram with Normal Curve")
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit, yfit, col="blue", lwd=2)
Kernel Density Plots
히스토그램은 구간을 몇개로 나누느냐에 따라 그래프 모양이 결정되므로, 이것만으로 분포 형태를 결정하는 것은 좋은 방법이 아닙니다. Kernel Density Plots 를 사용하면 변수의 분포를 보다 효과적으로 살펴볼 수 있습니다. plot(density(x))
함수를 사용하면 그래프를 그릴 수 있습니다.
Simple Density Plot
# Kernel Density Plot
d <- density(mtcars$mpg) # returns the density data
plot(d) # plots the results
Colored Density Plot
# Filled Density Plot
d <- density(mtcars$mpg)
plot(d, main="Kernel Density of Miles Per Gallon")
polygon(d, col="red", border="blue")
그룹 간 Kernal Density 비교 (Comparing Groups VIA Kernal Density)
sm 패키지의 sm.density.compare( )
함수를 이용하면 그룹 별 kernal density plot 을 그릴 수 있습니다. sm.density.compare(x, factor)
형식으로 사용하며 x 는 숫자형 벡터(numeric vector), factor 는 grouping variale 입니다.
# Compare MPG distributions for cars with
# 4,6, or 8 cylinders
library(sm)
attach(mtcars)
# create value labels
cyl.f <- factor(cyl, levels= c(4,6,8),
labels = c("4 cylinder", "6 cylinder", "8 cylinder"))
# plot densities
sm.density.compare(mpg, cyl, xlab="Miles Per Gallon")
title(main="MPG Distribution by Car Cylinders")
# add legend via mouse click
colfill<-c(2:(2+length(levels(cyl.f))))
legend(locator(1), levels(cyl.f), fill=colfill)