Rで『身近な統計(’12)』第3章 度数分布表、ヒストグラム(ある集団の体重データ)
今回から、テキストのない人にも何をやっているのかわかるように、『身近な統計(’12)』の元データのExcelの画像を貼ることにしました。
今回のお題
以下のような与えられた度数分布表から、
ヒストグラムを書くための表を作り、
さらに、ヒストグラム(なんか、折れ線まで入ってます)までを描こうというものです。
データの準備
まず、度数分布表をRに読み込まなければなりません。
項目名まで含めて、クリップボード経由で読み込もうとしました。
df <- read.table("clipboard") # Windows df <- read.table("clipboard", header = T) # 'T'は'TRUE'の略です。1行目を項目名として読み込みます。 df <- read.table(pipe("pbpaste")) # Mac df <- read.table(pipe("pbpaste"), header = T) # 1行目を項目名として読み込みます。
するとエラーになり「1 行目には 5 個の要素がありません」と表示されてしまいました。また、項目名を列の名前(データフレームのヘッダ)として読み込もうとしても同じくエラーになり「列名よりも列数のほうが多いです」と表示されます。
これは、セルを結合しているためです。
Excelは、入力を確認しながら、表を作りつつ、計算もさせることができるところは利点ですが、そうやって作られたキレイな表は二次利用がしにくいことが多いのです。
解決するには、ExcelでRが読み込みやすい形にしてテキスト形式やCSV形式で書き出すか、とりあえず読み込んでから整理するかですが、データが少ないので、Excelを操作した方が楽そうですね。…このぐらいなら、手入力でもいいですが。
そうやって作ったデータファイル chapter03_1.csv が、以下です。
lower,upper,freq
36,38,8
38,40,7
40,42,11
42,44,11
44,46,19
46,48,15
48,50,2
50,52,2
52,54,5
これを保存しておきます。
テキストのグラフが気に入らない
累積相対度数の折れ線グラフが描いてあるのに、棒グラフは累積相対度数の半分しかなくて、中途半端です。
どうせ合っていないなら、度数の棒グラフをめいっぱい描いた方が見やすくなります。
でなければ、左右のスケールを合わせて、度数と相対度数がわかるようにしておいた方が、一度に複数の情報が得られます。
教科書のグラフはそのどちらでもない…。
作ったもの
というわけで、左右のスケールを合わせたものと、棒グラフめいっぱいのものを作ってみました。
Excelでは、全ての値を計算していますが、グラフを描くだけなら、度数と累積度数があれば、後は簡単な計算をすることでできますが、教科書どおり、累積相対度数なども全て計算しています。
2つ目グラフを描いている32行目〜48行目は、1つ目のグラフのところの14行目〜30行目をコピー&ペーストして、少し変更しただけです。また、凡例を加えて、折れ線グラフが累世相対度数とわかるようにしています。
具体的には
21: lines(x, t$cum)
22: points(x, t$cum)
39: lines(x, t$cum_rel * y_upper)
40: points(x, t$cum_rel * y_upper)
と
27: mtext("相対度数", side = 4, line = 4, las = 3)
45: mtext("累積相対度数", side = 4, line = 4, las = 3)
が違う程度です。
17行目、35行目
par()の引数、xaxs = "i", yaxs = "i"
は、データ範囲内で表示できる軸を設定します。
何も設定しない状態では、xaxs = "r", yaxs = "r"
と同じで、データの範囲より、上下左右に少しの広がります。
plot()などの引数として、記述することもできます。
28行目、46行目
legend()で、凡例を描いています。
出力
吐き出される計算結果です。
lower upper freq midpoint rel cum cum_rel
1 36 38 8 37 0.1000 8 0.1000
2 38 40 7 39 0.0875 15 0.1875
3 40 42 11 41 0.1375 26 0.3250
4 42 44 11 43 0.1375 37 0.4625
5 44 46 19 45 0.2375 56 0.7000
6 46 48 15 47 0.1875 71 0.8875
7 48 50 2 49 0.0250 73 0.9125
8 50 52 2 51 0.0250 75 0.9375
9 52 54 5 53 0.0625 80 1.0000
できあがったグラフは、以下の2つです。
実は、貼り付け用の画像は、png("hoge.png", width = 480, height = 360)
のようにファイルに書き出しています。png()
などの他のデバイスを使った後は、dev.off()
をします。これをしておかないと、グラフを描いたときにRStudioの右下のプロットのパネルに表示されずに、作業ディレクトリにファイルが出力されていたりします。(最悪、ファイルが書き換えられたり…)
グラフでの日本語の使用
グラフに日本語を使う場合は、事前にまたは作図する度に、使用する日本語フォントを指定する必要があります。
日本語フォントの指定をしてなかったり、指定しても使えないフォントだったりすると、日本語の部分が □□□ とか …… になり、警告がでる場合もあります。
日本語環境の設定は環境(OSなど)ごとにことなるので、Webで検索してみて下さい。
また、RStudio環境下ではうまく行かないこともあります。