前回に引き続きbootパッケージ中のサンプルデータを眺めています。今回は英国の「交通標識とスピード違反」の関係データセットらしい amis です。R素人の処理の結果として出てきた意外なグラフに愕然。どこかの処理を間違えてないか、自分?それとも人間心理の深淵をば覗き込んでおるのか?本当はどうなんだろ。
※「データのお砂場」投稿順Indexはこちら
boot パッケージのamisサンプルデータセット
R言語のbootパッケージにも、大量のデータセットが含まれています。それらについては以下のCRANサイトに解説文書がおかれています(パッケージのロード後、helpで読める内容と同じではないかと。)
https://cran.r-project.org/web/packages/boot/boot.pdf
今回眺めているのは amis という名がつけられたサンプルデータセットです(データセットの利用は、bootパッケージをロードしてから。)
このパッケージのタイトルには
Car Speeding and Warning Signs
と書かれてます。端的にいえば、スピード違反と警告(交通)標識ってな感じでしょうか。ケンブリッジシャー(英国)でのデータです。ちなみに米国にもケンブリッジはありますが「シャー」はつかないデス(米国のケンブリッジにあるのはハーバード大とMIT。)
測定箇所は24か所ありますが、pair というカテゴリで2か所づつ組になってます。どうも交通状況を勘案して似たものを組にしているみたいですが詳しいことなど一切書いてありません。その各ペアは、warning というカテゴリで分けてます。交通標識を立てた場所と立てなかった場所です。そして交通標識を立てたケースでは、立てる前、立てた直後、立ててしばらくした後、の3分類にしてます。それぞれのケースで通行する車の速度を測った結果のようです。特に制限速度はいくらとかは書かれていません。単位は当然の?マイル・パー・アワーっす。
まずは生データ
まずは生データをロードしてその様子を調べてみます。こんな感じ。
久しぶりに8437点という、直接画面で愛でるには過ぎたるデータセットで嬉しいです。形式は普通のデータフレームですが、データは全て数値です。
茫漠とした数値の羅列なので、とりあえずplot関数にデータセットを渡して様子も眺めてみました。
集計してプロット
とくに解説文書には処理例などは載っていないように見えたので、R素人が勝手にプロットしてみることにいたしました。
今回データは、3種類のカテゴリでデータが分類可能です。それぞれに分割して、集計してプロットすることになろうということで、今回は「伝統の」plyrパッケージを使いました。plyrは「遅い」ということでもっとカッコいいパッケージが好まれるらしい昨今、あえての選択であります。年寄の頭の固さ?
さて、まず pair になった14個の組について平均速度を集計してみたいと思います。処理はこんな手順で。
library(plyr) ddply(amis, "pair", summarize, AveSpeed=mean(speed))
「プライヤ」にかけた結果は以下のようです。平均速度が速い組もあれば、遅い組もあると。当然か。
最初のグラフとして、交通標識を立てた側と立てなかった側の平均速度の違いをグラフにしてみました。例によって ggplot2 を使用(libraryのロード必要。)
なお、標識を立てた=1と標識を立てないで放置=2という数値データでは見ずらいということで、文字列に置換してからプロットしてます。
amis.D <- ddply(amis, .(period, warning, pair), summarize, AveSpeed=mean(speed)) amis.D$warning[amis.D$warning==1] <- "WARN" amis.D$warning[amis.D$warning==2] <- "NOWARN" p0 <- ggplot(data=amis.D, mapping=aes(warning, y=AveSpeed, fill=warning)) + geom_boxplot() p1 <- p0 + ylab("AveSpeed [mph]") + ggtitle("Car Speeding and Warning Signs") p1
標識を立てた側の方(この時点では標識立てる前と後のデータが混在してます)がわずかに速度が低くみえる結果が得られております。ここだけみると交通標識の効果てきめんであるように見えます。
ちょっと予想外のプロット
上記は、予想通りの結果だったので、上記のデータから標識を立てた前後の関係を取り出してみることにいたしました。処理手順が以下に。
amis.WARN <- amis.D[amis.D$warning=="WARN",] amis.WARN$period[amis.WARN$period==1] <- "Before" amis.WARN$period[amis.WARN$period==2] <- "Shortly After" amis.WARN$period[amis.WARN$period==3] <- "After" p2 <- ggplot(data=amis.WARN, mapping=aes(period, y=AveSpeed, fill=period)) + geom_boxplot() p3 <- p2 + ylab("AveSpeed [mph]") + ggtitle("Car Speeding and Warning Signs") p3
上記のプロット結果が以下に。
標識立てるまえ(緑)より、標識立てた直後(青)は速度が低下したように見えるのに、標識たてて十分時間がたった後(赤)になると立てる前より速度上がってないかい。。。どこか処理の仕方を間違えたのか?