[追記] 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])
中央の階級の真ん中を中心として両側に伸びた積み重ね棒グラフ((diverging|staggered|centered) stacked bar (plot|chart))である。3つ以上あるときは,ずれの順(あるいはリッカート値の平均の順)に並べるとわかりやすい。
HHパッケージがインストールされていない場合はあらかじめ:
install.packages("HH")
HHパッケージを読み込む:
library("HH")
あとは簡単。
plot.likert(data, main="アンケート結果", xlab="人数")
HHパッケージのグラフィックはRの標準グラフィックではなくlatticeを使っている。日本語が文字化けする場合は ~/.Rprofile を参考に設定する。