Histograms and Density Plots

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)

simple histogram

Colored Histogram

# Colored Histogram with Different Number of Bins
hist(mtcars$mpg, breaks=12, col="red")

colored histogram

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)

histogram with normal curve

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

simple density plot

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")

colored density plot

그룹 간 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)

comparing densities


Tag Cloud

R    SQL    classification    demension reduction    jekyll    python    regression    supervised   
Hyeongjun Kim

Hyeongjun Kim

Financial Economist, Data Scientist, and Hearthstone Player

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora