2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rのヒストグラムでfreq=FALSEにした時の縦軸がおかしい

Last updated at Posted at 2023-08-11

Rでヒストグラムを作成する際、縦軸を度数(頻度)ではなく相対度数にしたいという時が結構あると思います。

この時、freq=FALSEを指定してやればOKと思っていましたが、実はそうではなかったっぽいのでメモしておきます。

縦軸のデフォルトは度数(頻度)

タイトルのまんまです。何も指定しなければ縦軸は度数(頻度)になります。

X <- rnorm(100, mean=0, sd=1) # サンプルデータの作成(正規乱数)
hist(X)

hist_freqT.png

もちろん hist(X, freq=TRUE) としても同じ図が出力されます。

hist(data, freq=FALSE) の縦軸は相対度数ではない

Rのヒストグラムは freq=FALSE としても相対頻度(割合)にはなりません。
見た方が早いので早速。freq=FALSE を指定してやります。

hist(X, freq=FALSE)

histgram_freqF.png

もし、縦軸が相対度数を表しているなら棒1の長さの合計は1になるはずですが、どう見ても1にならなさそうです(真ん中らへんの3つの棒を足すだけで1を超えている)

というわけで、freq=FALSE としても相対頻度が描画されないことが分かりました。

「じゃあこれってなんなんだよ」って思うと思いますが、これは確率密度関数を推定したものになっているようです。なのでヒストグラムの面積の総和は1になっています。

相対度数を描画するには

一旦、ヒストグラムを格納して中身を見てみます。

H <- hist(X)

すると、

histの中身.png

こんな感じで、ヒストグラムが色々なパラメータを持っていることが分かります(Rstudioで見ています)

freq=FALSE とした際の縦軸は $density を使っており、各棒の度数は $counts に入っているので、$counts をもとに相対度数を計算して $density を書き換えます。

H$density <- H$counts / sum(H$counts)
plot(H, freq=FALSE)

hist_相対度数.png

この際、グラフの出力には上記のように plot を使います。
また、 freq=FALSE も書いてあげる必要があります。

これで無事に相対頻度を描画することができました。

めでたしめでたし。


ちなみにヒストグラムのパラメータがそれぞれ何を表しているかというと、

  • $breaks:セル間の分割点(それぞれの棒の端の座標だと思えばOK)
  • $counts:棒に含まれるデータの数
  • $density:確率密度の推定値(たぶん $mids における確率密度の推定値2
  • $mids:棒の真ん中の座標
  • $xname:データの名前
  • $equidistbreaks の間隔がすべて等しいか(等しい場合は TRUE

★参考文献★

[1] http://127.0.0.1:21889/library/graphics/html/hist.html (histのドキュメント)
[2] http://127.0.0.1:21889/library/stats/html/density.html (densityのドキュメント)

  1. たぶん普通は"bin"っていうと思いますが、この記事では誰にでもわかりやすく"棒"でいきます。

  2. histのドキュメントのSee Alsoにdensityがあり、これによるとどうやらカーネル密度推定をしているみたいです。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?