グラフの例:リッカート型データ

[追記] R に likert パッケージというものが2016年にできたようです(GitHub: jbryer/likert 参照)。関連:Workflows: Likert Scale Survey

はじめに

リッカート型データとは,何段階か(たとえば「大反対」「やや反対」「どちらでもない」「やや賛成」「大賛成」)で答えるアンケートの回答数データである。

次は従来型とICT利用型の授業を受けた感想を尋ねた架空のデータである。

         最悪 悪い 普通 良い 最高
従来型      4    5    6    3    2
ICT利用型   1    4    3    6    6

これがテキストファイル result.txt に入っているとして,次のようにしてRで読むことができる(保存の場所によってはパス指定が必要。クリップボード経由でも可)。

> data = read.table("result.txt")

data とだけ打ち込んでEnterを押して,正しく読めているか確認する。

普通の棒グラフ

普通の積み重ね棒グラフ((stacked|divided) bar (plot|chart))を描いてみよう。

> rowSums(data)  # 行ごとに和を求める
   従来型 ICT利用型 
       20        20 
> ratio = data / rowSums(data)  # 行ごとに和で割る
> ratio
          最悪 悪い 普通 良い 最高
従来型    0.20 0.25 0.30 0.15  0.1
ICT利用型 0.05 0.20 0.15 0.30  0.3
> barplot(t(ratio)) # 積み重ね棒グラフ
> barplot(t(ratio), horiz=TRUE)   # 横向けに
> par(las=1)               # 字を横書きに
> par(mgp=c(2,0.8,0))      # 目盛り位置調整
> par(mar=c(5,7,4,2)+0.1)  # マージン調整(元は c(5,4,4,2)+0.1)
> barplot(t(ratio), horiz=TRUE) # 再描画
> # ラベルを描くのはちょっと難しい
> t = as.numeric(ratio[2,])
> mtext(names(data), at=cumsum(t)-t/2)
リッカート型データの棒グラフの例

某の順序が下から上になるのが嫌なら,あらかじめ data = data[2:1,] で逆順にすればよい。

色が寂しい場合は,例えば次のように色を設定する。

cols = c("#CA0020", "#F4A582", "gray90", "#92C5DE", "#0571B0")
barplot(t(ratio), horiz=TRUE, col=cols)

これらの色は次のようにして計算した。

library(RColorBrewer)
cols = brewer.pal(5, "RdBu")
cols[3] = "gray90"

これが次のHHパッケージのデフォルト色である。

これに次のHHパッケージの技も含めてまとめると次のようになる:

data = data[2:1,]        # 逆順に
par(las=1)               # 字を横書きに
par(mgp=c(2.4,0.8,0.4))  # 目盛り位置調整
par(mar=c(5,6,4,4)+0.1)  # マージン調整(元は c(5,4,4,2)+0.1)
off = -(data[,1] + data[,2] + 0.5 * data[,3]) # センタリング用オフセット
cols = c("#CA0020", "#F4A582", "gray90", "#92C5DE", "#0571B0")
barplot(t(data), horiz=TRUE, offset=off, col=cols, xlab="人数")
t = as.numeric(data[2,])
mtext(names(data), at=cumsum(t)-t/2 + off[2])
リッカート型データの棒グラフの例

HHパッケージによる棒グラフ

中央の階級の真ん中を中心として両側に伸びた積み重ね棒グラフ((diverging|staggered|centered) stacked bar (plot|chart))である。3つ以上あるときは,ずれの順(あるいはリッカート値の平均の順)に並べるとわかりやすい。

HHパッケージがインストールされていない場合はあらかじめ:

install.packages("HH")

HHパッケージを読み込む:

library("HH")

あとは簡単。

plot.likert(data, main="アンケート結果", xlab="人数")
HHパッケージのplot.likertの例

HHパッケージのグラフィックはRの標準グラフィックではなくlatticeを使っている。日本語が文字化けする場合は ~/.Rprofile を参考に設定する。

参考