「Rによるデータ分析のレシピ」の第一章(p6)のヒストグラムの練習です。

library(readxl)
mydata <- read_excel("./Data.xlsx", sheet="Sheet11")
head(mydata)
day shortrib
1 35
2 35
3 40
4 52
5 43
6 43
str(mydata)
## tibble [30 x 2] (S3: tbl_df/tbl/data.frame)
##  $ day     : num [1:30] 1 2 3 4 5 6 7 8 9 10 ...
##  $ shortrib: num [1:30] 35 35 40 52 43 43 38 42 41 47 ...
summary(mydata)
##       day           shortrib    
##  Min.   : 1.00   Min.   :28.00  
##  1st Qu.: 8.25   1st Qu.:36.00  
##  Median :15.50   Median :39.00  
##  Mean   :15.50   Mean   :40.00  
##  3rd Qu.:22.75   3rd Qu.:42.75  
##  Max.   :30.00   Max.   :52.00

このデータから、ヒストグラムを作ってみます。 まず、スタージェスの公式から、最適な棒の数を求める式を関数化しておきます。※この関数の書き方は理解不能。

mybk <- function(x, min, max) seq(min, max, length.out=(nclass.Sturges(x)+1))

【参考】スタージェスの公式から棒の数を求める

\[ k=1+log_2(n) \]

です。今回の場合、\(n=30\)なので、\(k=1+4.90...≒6\)となる。

データフレームmydataの変数shortribの最小値は28、最大値は52だったので、横軸の左端を25皿、右端を55皿としてヒストグラムの棒の位置を計算します(関数mybkに左端の数値と右端の数値を渡すと、スタージェスの公式で求めた最適な棒の数から計算した棒の切れ目の数値を返してくれるっぽい)。

(BK <- mybk(mydata$shortrib, 25, 55))
## [1] 25 30 35 40 45 50 55

切れ目を指定してヒストグラムを描く

geom_histogram(breaks=BK)で、切れ目を指定してヒストグラムを描く。

library(ggplot2)
ggplot(mydata, aes(x=shortrib)) +
  geom_histogram(breaks=BK)

棒の幅を指定してヒストグラムを描く

棒の幅(5)を決めて作成すると、以下のようになる。

ggplot(mydata, aes(x=shortrib)) +
  geom_histogram(binwidth=5)