Rで箱ひげ図と蜂群図を合体させる

データの可視化についてのお話を聞かせていただいたり発表資料を見せていただいたりすると、箱ひげ図と蜂群図を合わせて、データを要約しながらも全体の分布を提示することが薦められているようです(詳しくは小林(2013)や草薙(2014)を参照)。ちなみに箱ひげ図とは下のような図です。単に平均値のみを提示する棒グラフよりも多くの情報を読み取ることができます。

boxplot

 

蜂群図(beeswarm)とは以下の様な図です。個々のデータの全体的なばらつきが視覚的に提示されます。

beeswarm

この二つのグラフを合体させて以下の様なグラフを作成したいわけです。二つを合体させることで要約されたデータと個々のデータの分布を一つのグラフで読み取ることができるため、よい視覚化の手法として提案されています。

boxplot2

グラフの描画にはをRを使用しましたが、意外にも(?)完成までには悪戦苦闘しました。いくつか注意点があるので、備忘録として記載していおきます。

グラフ作成の前に:データの準備と蜂群図を描く準備をする

まず、データとして適当な値を持つグループ(n=30)を3グループ準備します。便宜上、dat1,dat2,dat3というグループを作成します。

dat1<-rnorm(n=30)
dat2<-rnorm(n=30)
dat3<-rnorm(n=30) # dat1,dat2,dat3に30個の乱数を格納する。(ちなみにrnorm(n=30,mean=10,sd=5)などとすると、平均値10, 標準偏差5の分布に従う乱数を30個生成してくれる。)

一応データを確認してみます。dat1と入力すると以下の様な値が入っていることが確認できました

dat1
[1] -0.696673881 -0.096907749 -0.024893093 -0.501707913 -1.148229893
[6] 0.052926455 0.056307916 1.754715429 -0.437464063 -0.129450015
[11] 0.648202583 1.843154807 0.579061711 -1.236842281 -1.086156870
[16] 0.653076210 -0.146905052 -1.488712088 -0.002318016 0.088805757
[21] -0.323390177 -1.120192715 1.512775980 -1.064644486 -0.892978699
[26] 1.454616771 0.886713657 -0.115766801 0.122375023 0.526842260

dat2、dat3も同様に確認します。

dat2
[1] 0.1019368942 -0.8198904418 -0.3744620288 -0.6072474458 -0.8027879845
[6] -0.8687848558 1.8321574210 0.2087934551 -1.2366441774 -1.2712738667
[11] -0.0006406788 -0.5999658260 0.1340664991 -1.1984889919 -0.0001141821
[16] 0.1146403068 -2.3950331007 -1.0241161067 -1.6901899350 -0.5358067819
[21] -1.6976701957 -1.5825121405 1.0014211713 1.0077299777 0.6412079903
[26] -0.4872082283 -0.4464768378 -0.8590309093 -1.2989472173 0.4512354119

dat3
[1] 0.8840772 -0.9607509 0.6621758 0.2261821 0.8937998 0.4915920
[7] -0.2081712 0.2372956 -1.1162683 -0.9370383 -1.4002460 -0.3318328
[13] -0.4560114 -0.5052164 1.2180124 1.7451215 0.4123308 -1.7272754
[19] -1.8983872 0.6186608 0.8224288 1.7339782 -1.2710421 -0.1089045
[25] 0.6216647 -0.6709525 1.0951401 -0.4407932 1.4956916 0.6493476

 

rnormは乱数発生関数ですので、再度rnorm関数を使って乱数を発生させると異なる値が抽出されます。

次に蜂群図を描く準備をします。蜂群図はデフォルトでは描画できませんので、beeswarmという拡張パッケージをRにインストールしなければなりません。インストールするには

install.packages(beeswarm) # パッケージbeeswarmをインストールする

と一行記述します。これでインストールが始まります。拡張パッケージも当然無料です。一行でインストール完了ですから非常に簡単ですね。ただし、インストールしただけでは使えませんので、このパッケージを使えるように読み込んであげる必要があります。読み込みには

library(beeswarm) #パッケージbeeswarmを読み込む

と一行記述します。これで蜂群図を描く準備が整いました。

まずは箱ひげ図を描画する

dat1,dat2,dat3にデータが格納されたところで、まず箱ひげ図を書きます。箱ひげ図の書き方は簡単。以下の一行を記述するだけで描画されます。

boxplot(dat1,dat2,dat3)

以下の様な図が描画されます。

boxplot3

ただ、これだと味気ないので、各箱ひげ図に名前をつけます。ついでに色も変えます。そこで、再度以下のように記述します。

boxplot(dat1,dat2,dat3,names=c(“dat1″,”dat2″,”dat3”),col=”gray”)

#names=c(“dat1”,”dat2”,”dat3”)というのは、1つ目のグラフ(dat1のグラフ)にdat1というグラフ名をつけ、続いて2つ目のグラフにdat2という名前を、3つ目のグラフにdat3という名前をつけます。

#col=”gray”とすると箱ひげ図がグレーに塗られます。col=”red”やcom=”orange”なども可能です。

すると以下の様な図が描画されます。

boxplot

蜂群図を描画する
次に、蜂群図を描きます。まず、boxplotと同じように以下のように記述してみます。

beeswarm(dat1,dat2,dat3)

すると、なぜか以下の様なエラーが返されました

以下にエラー match.arg(method) : ‘arg’ must be NULL or a character vector

この点がクリアされずやきもきしていましたが、いろいろ調べてみると、以下のように記述する必要があることがわかりました。

beeswarm(list(dat1,dat2,dat3)) #僕が悪戦苦闘したのはここでした。

これで3つの蜂群図を一枚に収めることができました。ちなみにドットを塗りつぶしたり形を変えたり出来ます。
beeswarm(list(dat1,dat2,dat3),pch=13) #pch=13とするとドットの形が以下の図のように変わります。16とすると塗りつぶされたドットに変化します。

beeswarm

二つのグラフを合体させる
後は生成した箱ひげ図と蜂群図を組み合わせます。ここまでで作成した図を組み合わせるために、まず箱ひげ図生成します。

boxplot(dat1,dat2,dat3,names=c(“dat1″,”dat2″,”dat3”),col=”gray”)

次に蜂群図を上書きします。上書きするときにはadd=Tという命令を加えます。

beeswarm(list(dat1,dat2,dat3),pch=13, add=T) #add=Tを記入すると既存のグラフにプラスして描画される

すると最初に提示したような図が完成します。

一つ一つ順番を追って書きましたが、実際に分析する場合は上記の手順を一通り行う必要はありません。dat1,dat2,dat3にデータが既に入っていると仮定すると、

install.packages(beeswarm) # パッケージbeeswarmをインストールする
library(beeswarm) #パッケージbeeswarmを読み込む
boxplot(dat1,dat2,dat3,names=c(“dat1″,”dat2″,”dat3”),col=”gray”) #箱ひげ図の作成
beeswarm(list(dat1,dat2,dat3),pch=13, add=T) #蜂群図を上に重ねて描画する

の4行だけで描画できます。 (#以下は書く必要はありません)

書き起こしに重宝するソフトCasual Transcriber

Casual TranscriberはCasual Concの作者である大阪大学の今尾先生が作成されたソフトウェアです。学習者の発話を分析したり会話分析をしたりする際には、まず学習者の発話を聞いて書き起こす作業をしなくてはなりません。書き起こしという作業は中々重労働で、研究をする際にかなりの労力を取られます。現在行っている研究でも書き起こし作業が必要でしたが、先日ちょうどよいタイミングでCasual Transcriberの存在を知ることができました。しかも作者自らのデモ付きで。

Casual Transcriberは書き起こしに特化したソフトウェアなので、書き起こしを助けてくれる機能がたくさんついています。僕はすべてを使いこなせているわけではないのですが(むしろ多分ほとんど使いこなせていないです)、以下にCasual Transcriberが書き起こしのためにとても便利な理由を3つ挙げたいと思います。

– すべてが一つのソフトで完結する
これまでパソコンで書き起こしをするときには、メディアプレーヤーで音声ファイルを流し、適度な箇所で止めて、別のテキストエディタを立ち上げて聞き取った内容を書き、またメディアプレーヤーに戻る、という作業を繰り返していました。または、メディアプレーヤーでなくiPodを使用することもありました。このような手法を用いると「聞いて書く」という作業以外にしなければならないことが多く、結果として余計な負担がかかってしまっていました。Casual Transcriberはメディアファイルの再生とテキストの打ち込みがこのソフトで完結しますからこういった心配がありません。

– キーボードだけで必要な動作ができる
また、上記のようなメディアプレーヤの再生停止⇔テキストファイルへの移動はすべてマウスを使っていました。そうすると上述のように、マウスからキーボードへ移動するという余計な動作が入ってしまいます。たかがそれだけのことと思われるかもしれませんが、こういった入力デバイスのスイッチは意外と集中力を散らしてしまい、書き起こしを辟易とさせる一つの原因となってしまいます。Casual Transcriberは再生、停止はもちろん、3秒戻る、5秒戻る、といった動作までキーボードだけで完結します。これがCasual Transcriberを使いやすいツールにしている一番の理由だと思います。

– かゆいところに手が届く設定がたくさんある
例えば、再生時に音声をパソコン上でのボリューム調整以上に大きな音でならすことができます(これは本当に重宝しています)。また、タイムスタンプを書くことも可能ですし、再生速度の調整もできます。こういった要素は書き起こしには不可欠なのでとても助かります。

Casual Transcriberは以下のサイトからダウンロードできます。Macにのみ対応しています。ソフトは無料で配布されています。

https://sites.google.com/site/casualconcj/yutiriti-puroguramu/casualtranscriber

Mac OSX10.9で最初に開こうとすると、セキュリティの関係で開けないことがあります。その際には、

[システム環境設定]→[セキュリティとプライバシー]→[ダウンロードしたアプリケーションの実行許可]を開くと対処することが出来ます。

Rで作図するときの基本的なあれこれ

Rは関数一つで瞬時に作図できて便利なのですが、それは「とりあえず作図」できるというレベルであって、細かいところを修正していくには、様々なコードを組み合わせていく必要があります。一つ一つのコードを憶えていることは毎日Rを使うような人でない限り不可能(少なくとも僕には)なので、備忘録として勉強したことをまとめておきたいと思います。

まず普通にヒストグラムを作成します。今回はdat93allというところにデータが入っているものとします。

hist(dat93all)

上記の関数によって得られたグラフはこちらです
Rplot01

これを必要に応じて、以下のようなグラフに修正しました。

Rplot03

変更した部分は異化の内容です

グラフのタイトル

グラフの色

y軸の目盛幅

x軸のラベル

軸とラベルの間のマージン

使用したRのコードはこちら

hist(dat93all,main=”sample-histogram”,ylim=c(0,30),col=”blue”,breaks=c(0.5,1.5,2.5,3.5,4.5,5.5), xlab=”sample-x”,ylab=”frequency”,cex.lab=1,mgp=c(1.5,0.4,0))

 

hist(dat93all)だけのシンプルな関数から後ろにたくさん色々な指標をつけました。以下1つずつメモします。

# グラフのタイトルをsample-histogramとする

main=“sample-histogram”

# y軸の目盛を0から30に設定する

ylim=c(0,30)

# グラフの棒の色をブルーに設定する

col=“blue”

#ヒストグラムの階級を0.5~1.5, 1.5~2.5, 2.5~3.5,3.5~4.5,4.5~5.5に設定する

breaks=c(0.5,1.5,2.5,3.5,4.5,5.5)

# x軸のラベルをsample-x, y軸のラベルをfrequencyと設定する
xlab=“sample-x”
ylab=“frequency”

#軸のラベルのフォントの大きさを調整する(デフォルトは1)

cex.lab=1

# 軸のマージンを設定する。
以下の式の場合は、[1]軸からラベルまでのマージンが1.5, [2]軸からメモリまでのマージンが0.4, [3]軸から軸線までのマージンが0となります
mgp=c(1.5,0.4,0))

以上です。これらの関数くらいは日々毎日Rを使用する中で覚えてしまいたいです。後、Rで作成したグラフの背景を透明にする方法がわかりません。そもそも透明にできるのかどうかも分かりませんが、ボチボチ調べていこうと思います。