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行だけで描画できます。 (#以下は書く必要はありません)

Read More

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で作成したグラフの背景を透明にする方法がわかりません。そもそも透明にできるのかどうかも分かりませんが、ボチボチ調べていこうと思います。

Read More

効果量とRについて勉強しよう

英語教育界隈の方々が全国英語教育学会で盛り上がっている最中、地元では有志6人で研究法についての勉強会を行いました。きっかけは、ある先生が統計手法について勉強しましょうと声をかけていただいたのがきっかけでした。勉強会は思った以上に中身の濃い充実したものになり、ぜひ冬季も開催したいと思わされました。

僕からはデータの視覚化と効果量、そしてRの簡単な使い方についてお話させていただきました。僕以外の先生方と基礎的な観点を確認しあうことができたことが収穫でした。Rや効果量について興味を持っていただけた先生も(多分)いらっしゃったと思いますので、紹介した資料をウェブ上にまとめておこうと思います。

効果量については水本篤先生、浦野研先生が大変わかり易く解説してくれています。Rやデータの視覚化という観点からは小林雄一郎先生、阪上辰也先生のお二方の資料が参考になります。また、水本・竹内(2011,2008)は効果量を勉強したい人にとっては広く知られていますのでまずはこちらを一読されることをおすすめします。 効果量に関する文献も下の資料の中で紹介されていますが、まずは下の発表資料をきちんと理解した上で専門書の方にとりかかるとより理解が深まるように思います。

浦野 研(2013)「有意性や効果量についてしっかり考えてみよう」外国語教育メディア学会第53回全国大会発表資料 http://www.slideshare.net/uranoken/let2013workshop

その他PDF形式やkeynote形式でも資料を配布されています。

http://www.urano-ken.com/blog/2013/08/05/let2013-workshop/

水本 篤(2012)「Excelを使った統計解析とグラフ化入門」2012年度大学英語教育学会(JACET)関西支部秋季大会企画ワークショップ発表資料

http://www.slideshare.net/AtsushiMizumoto/excel-15316169

水本 篤・竹内 理(2011)「効果量と検定力分析入門ー統計的検定を正しく使うためにーより良い外国語教育研究のための方法ー」『外国語教育メディア学会関西支部メソドロジー研究部会2010年報告論集ー』47-73頁

http://kuir.jm.kansai-u.ac.jp/dspace/handle/10112/6008

水本 篤・竹内 理(2008)「研究論文における効果量の報告のためにー基礎的概念と注意点ー」『英語教育研究』第31号 57-66頁 http://www.mizumot.com/files/EffectSize_KELES31.pdf

小林雄一郎(2013)「Rによる統計グラフ入門」LET中部支部第81回支部研究大会ワークショップ発表資料

http://www.slideshare.net/langstat/let-chubu-2013

小林雄一郎(2011)「Rによる成績データ分析入門」外国語教育メディア学会(LET)関西支部メソドロジー研究部会2011年度報告論集 81-91頁

http://www.mizumot.com/index/method2011.html

阪上辰也(2011)「統計解析環境「R」を利用した言語データの処理」外国語教育学会(LET)関西支部メソドロジー研究部会2011年度報告論集 8-14頁

http://www.mizumot.com/index/method2011.html

札幌R勉強会(2013)オンライン動画集

http://www.ustream.tv/channel/sapporo-r-2.

Read More