ggplot2の(正確にはHmiscの)関数が返す区間を、自力で計算した出力と比較する

目的

ggplot2パッケージの関数で、95%信頼区間など、母数の区間推定の実現値を直接可視化できる。 この計算が、自力で計算した値と本当に(ほぼ)一致するか調べる。

参考資料

qiita.com

なお本記事は現時点で執筆中。

mean_cl_normal()

データが正規分布にi.i.d.に従うと仮定できる場合。以下の2通りのコードはどちらも同じ出力を返すはず。
なお以下のコードではmtcars$wtの母平均を推定する文脈で可視化しているが、このデータに関して上記の仮定が満たされるかどうかは今回は考慮していない(コードを示すことが目的なので)。

library(tidyverse)

# ggplotの関数で95%信頼区間を計算した場合 ---------

g1 = ggplot(data = mtcars,
            mapping = aes(x = factor(am), y = wt)) +
  stat_summary(fun.data = "mean_cl_normal") +
  coord_cartesian(ylim = c(2, 4.5)) +
  labs(x = "am", title = "g1")

g1


# 自力で95%信頼区間を計算した場合 ---------
g2 = mtcars %>% 
  dplyr::group_by(am) %>% 
  dplyr::summarise(mean = mean(wt),
                   upper_cl = mean(wt) +
                     qt(0.975, n() - 1) * (sd(wt) / sqrt(n())),
                   lower_cl = mean(wt) -
                     qt(0.975, n() - 1) * (sd(wt) / sqrt(n()))
  ) %>% 
  ggplot(mapping = aes(x = factor(am), y = mean)) +
  geom_pointrange(mapping = aes(ymax = upper_cl, ymin = lower_cl)) +
  coord_cartesian(ylim = c(2, 4.5)) +
  labs(x = "am", y = "wt", title = "g2")

g2

mean_cl_boot()

標本平均を点で、ノンパラメトリック・ブートストラップ法による、ブートストラップ信頼区間をエラーバーで表したグラフ。 ブートストラップ法なので、厳密に一致させることはそもそもできないが、ほぼ同じとみてよい?

library(tidyverse)

# ggplotの関数で95%信頼区間を計算した場合 ---------
g3 = ggplot(data = mtcars,
            mapping = aes(x = factor(am), y = wt)) +
  stat_summary(fun.data = "mean_cl_boot") +
  coord_cartesian(ylim = c(2, 4.5)) +
  labs(x = "am", title = "g3")

g3


# 自力で95%信頼区間を計算した場合 ---------
iter = 3000 # ブートストラップ標本数
m = data.frame(
  a_boot_mean = rep(0, iter),
  m_boot_mean = rep(0, iter)
)

set.seed(123)
for(j in 1:2){
  # ここはややこしいが、am == 0とam == 1があるので
  df = mtcars %>% dplyr::filter(am == (j - 1))
  for(i in 1:iter){
    # dfと同じサイズを復元抽出して、wtの平均を計算
    m[i, j] = dplyr::sample_frac(tbl = df, size = 1, replace = TRUE) %>% 
      dplyr::pull(wt) %>% 
      mean()
  }
}

g4 = mtcars %>% 
  dplyr::group_by(am) %>% 
  dplyr::summarise(mean = mean(wt)) %>% 
  dplyr::mutate(upper = c(quantile(m[,1], 0.975), quantile(m[,2], 0.975)),
                lower = c(quantile(m[,1], 0.025), quantile(m[,2], 0.025))
                ) %>% 
  ggplot(mapping = aes(x = factor(am), y = mean)) +
  geom_pointrange(mapping = aes(ymax = upper, ymin = lower)) +
  coord_cartesian(ylim = c(2, 4.5)) +
  labs(x = "am", y = "wt", title = "g4")

g4

{cowplot}で複数のグラフを結合する / {ggh4x}でX 軸・Y 軸のラベルをうまく扱う

第109回R勉強会@東京(#TokyoR)(データ可視化特集会)でトークしてきました

 

光栄なことに、応用セッションにご招待いただき、「複数のグラフを1枚のFigureにまとめるとき、cowplotのこと、時々でいいから、思い出してください」というタイトルでトークしてきました。

 

tokyor.connpass.com

 

タイトルにはcowplotしか書いていませんが、実際にはcowplotとggh4xという2つのパッケージの紹介を行いました。

 

 

とても勉強になる発表ばかりで、楽しかったです。また機会があれば参加・発表させていただきたいと思います。

 

Enjoy!

 

以下、個人的メモ

最後の方で、secondary Y axisの任意の位置に目盛を打ち、文字ラベルを表示させる方法を紹介しています。もし数値目盛を打つのでよければ以下の記事が参考になります(ユタニさんに教えていただきました)。

 

drsimonj.svbtle.com

【新刊案内】『数値シミュレーションで読み解く統計のしくみ 〜Rでためしてわかる心理統計』

書籍の紹介

2023年9月13日に、技術評論社より『数値シミュレーションで読み解く統計のしくみ 〜Rでためしてわかる心理統計』という書籍を上梓します。

 

gihyo.jp

 

本書は、確率分布や、確率分布が関係する様々な定理、帰無仮説検定や信頼区間、そしてサンプルサイズ設計(研究実施前に、取得すべきデータのサイズを見積もる研究実践)など様々な内容を、プログラミング言語Rを用いたシミュレーションにより理解することを目指した本です。

僕は3章(乱数生成シミュレーションの基礎)・4章(母数の推定のシミュレーション)の執筆を担当しました。

  • 「ベルヌーイ分布・二項分布・正規分布・多変量正規分布・χ2乗分布・t分布・F分布」といった確率分布同士がどのような関係にあるのか
  • 任意の確率分布に従う乱数を生成する方法
  • 母数(例:母平均)の推定に適した標本統計量(例:標本平均)はどのような性質を持つのか
  • 標本のデータが従う確率分布(母集団分布)と、標本統計量が従う確率分布(標本分布)の関係
  • 標本のサイズ(=サンプルサイズ)と標本分布の関係
  • 母平均や母相関係数の信頼区間

など、学部の統計学の講義で学習するような範疇をより深く理解し、母数に関する統計的推測は様々な仮定の上に立脚していることや、その仮定が満たされないことでどのようなバイアスが生じるかを、シミュレーションならではの方法で「実感」することを目指して執筆しました。

 

また、共著者が執筆した他の章も、かなり充実した内容になっています。

  • 2章:Rプログラミングの基礎
    • 単なるRの書き方だけでなく、オブジェクトの型や、より実行時間の短いコーディングなど、一段階深いところまで解説をしています。
  • 5章:帰無仮説検定の基礎
    • 帰無仮説検定において、各種の仮定が満たされないことにより、タイプⅠエラーがどのように変化するか
  • 6章:サンプルサイズ設計
    • この章が本当に目玉です。サンプルサイズ設計の重要性は理解していても、その実践方法はなかなか学習する機会がないものです。無料のソフトウェアで実践自体はできても、背後の理屈をしっかりと学ぶことが出来るのは、この本の特長だと思います。
  • 7章:回帰分析(階層線形モデルなども含む)を題材に、5~6章の内容をカバー
    • 回帰分析特有の、多重共線性などの問題も取り上げたシミュレーションを行っています。

 

後述するように、類書(執筆にあたり参考にさせていただきました)はいくつかありますが、R言語を用いて上記の内容を1冊でカバーした本は(現時点で)他にないと思います。

至らぬ点も多々あるかと思いますが、著者一同、自信をもっておすすめできる本です。

 

なお本書のサポートサイトがあり、こちらで正誤表や章末の演習問題の解答例を掲載していますので、併せてご覧ください。

ghmagazine.github.io

 

執筆の経緯

2022年5月(1年以上前...!)ごろにお声掛けいただいて、ジョインすることになりました。

僕がかつて、『改訂2版 Rユーザのための RStudio[実践]入門 〜tidyverseによるモダンな分析フローの世界』という書籍を技術評論社より上梓していたことから、当時の担当編集者の方にご相談して、本書もご担当いただくことになりました。

gihyo.jp

 

この編集者の方が本当に信頼できる方で、ご担当いただけたことをとても幸運だったと思っています。『改訂2版 Rユーザのための RStudio[実践]入門 〜tidyverseによるモダンな分析フローの世界』のときもそうでしたが、かなり専門的な内容になるので、「よく分からないけど、著者がこう書いているんだから信じていいだろう」となってしまってもおかしくないところを、「この箇所、よく分からなかったので、もう少し説明を補ってもらえますか」とか、「この記述の意味は、これで合っていますか?」とか、「コードを実際に実行したんですが」とか、一行一行丁寧にチェックしていただきました。

 

この編集者の方から執筆当初に言われて感銘を受けた言葉があります。

この本1冊で完結する必要はない。読者に、自分の人生の中で、色々な書籍でポートフォリオを作ってほしい。その中で、「〇〇の書籍といえば本書」という位置づけになれれば理想

X(旧Twitter)上で出版社アカウントを見ていると、出版社の方々は、互いの会社の書籍の告知にも協力されているんですが、それもこういうモチベーションなのかな、と思いました。

僕はこの本1冊であれもこれも学べるようにと、初校ではかなり情報を詰め込んだ原稿を執筆してしまいました。しかしこの言葉を聞いて肩の力がいい意味で抜けてたように思います。本書内では多くの類書を引用していますので、ぜひそれらもご参照いただき、「ポートフォリオ」を作っていただければ嬉しいです。

 

執筆の苦労

多分3人の中で僕が一番、改稿回数が多かったと思います。それは何故かというと、「あれもこれも書きたがってしまう」から。

執筆中に多くの文献にあたって、色々な証明を試みましたが、「せっかくこれだけ苦労して証明したのだから、備忘録がてら、本書にも掲載したい」というエゴを出して、初校は数式だらけになってしまいました。

でもそれを見た共著者は、「これじゃ届かないよ」と一言。

他の2人を見ていて凄いなと常々思うのは、想定読者にあわせて、自在に解像度を変更できることでした。お2人とも統計学に通じているので、厳密な解説方法も御存じです。

でも、「厳密性を最重要視して書くと、本書の想定読者には恐らく届かない。だから、間違いにはならないギリギリのラインを見定めて、理解しやすい表現をする」ということを、共著者の2人は実践されていました。

 

僕は『ワールドトリガー』という漫画が大好きなんですが、米屋というキャラクターが、緑川という優秀だが経験の浅いキャラクターを指して「あいつは覚えたての動きを見せびらかしたいだけ。それでは勝てない」と評するシーンがあります。

ああ、自分は緑川と同じだな、とその時思ったのを覚えています。

 

僕の座右の銘は、「マイクや録音機器に向かってではない、人の心に向けて音楽をやるのだ」です。これは音楽プロデューサー梶浦由記さんの言葉。

書籍もきっとそうで、パソコンやキーボードに向かってではない、読者に向けて書くのだということを、これからも肝に銘じたいと思います。

 

参考図書

本書の執筆にあたり、多くの統計学の書籍を参考にさせていただきました。詳しくは本書をご参照いただければと思いますが、なかでも、特に参考にさせていただいた4冊を紹介します。

 

まずは『Pythonで学ぶあたらしい統計学の教科書』。僕はこの本が大好きで、かねてから「この本のR版が欲しい」と思っていました。本書を執筆するにあたり、昔から抱いていたその思いを実現するチャンスだ、ということがモチベーションになっていました。

www.shoeisha.co.jp

 

そして、『Rで学ぶ統計的データ解析』。僕はこの一連の「データサイエンス入門シリーズ」が大好きです。

この本の帯に「まずは手を動かそう、数理はそれからだ」というパンチラインが書かれています。

www.kspub.co.jp

 

最後に、『心理統計学の基礎 -- 統合的理解のために』およびその続編である『続・心理統計学の基礎 -- 統合的理解を広げ深める』の2冊。

大事なことはこの本に全て書いてあります。我々がこのたび上梓した書籍の役割は、これらの南風原本に至る足元を舗装することなのだということを、執筆中に認識しました。

 

www.yuhikaku.co.jp

www.yuhikaku.co.jp

 

本書が、皆様のポートフォリオのなかで重要な一冊になれば嬉しいです。Enjoy!

【書評】Pythonではじめるベイズ機械学習入門

はじめに

講談社サイエンティフィク様より、2022/05/24 発売、森賀新/木田悠歩/須山敦志・著の、『Pythonではじめるベイズ機械学習入門』を御恵投いただきました。ありがとうございます!!

www.kspub.co.jp

 

非常に重厚な本なので、隅々まで精読できていないのですが、一通り目を通して、いくつかのコードを実行してみたので、感想を共有したいと思います。

タイトルから明らかなように、本書ではPythonにより、様々なベイズ統計モデリング機械学習(例えば線形回帰モデル、階層モデル、状態空間モデル、ニューラルネットワーク回帰)を行う事例を紹介しています。シンプルなものはPyMC3というパッケージで、必要に応じて各種分析に適したパッケージを使用しています。

一方僕はこれまで同様の分析では、R言語上でStanを使用してきました。これは僕自身が長らくRユーザであることと、松浦健太郎・著『StanとRでベイズ統計モデリング』で主にベイズ統計モデリングを学習したことによります。

www.kyoritsu-pub.co.jp

 

よって以下の書評では、時折これら2冊を比較しながら、本書『Pythonではじめるベイズ機械学習入門』の特長を紹介したいと思います。

 

本書の概要

上記のように、本書はPython上で確率的プログラミング言語を用いることで、ベイズ統計モデリング機械学習を行うための、解説書です。

ベイズ統計モデリングの例として、

  • 線形単/重回帰モデル
  • 一般化線形モデル
  • 階層ベイズモデル

などから導入し、数式・グラフィカルモデルとともにPyMC3のコード例を丁寧に解説しています。ここまでは『StanとRでベイズ統計モデリング』とも共通していますが、この直後に

の紹介が続くところが、面白いと思いました。ここで数学的には難易度が跳ね上がるので、「ええ、ここに書くんだ?!」と驚きました。『StanとRでベイズ統計モデリング』でもガウス過程について言及はありますが、恐らく難易度やコードの長さなどを考慮してか、コード例などは載っていません。

一方本書では、目的に応じて様々な確率的プログラミング言語を使い分ける方針を採用しているので、ガウス過程に特化したGPyTorchというパッケージを用いることで実装を試みています。

このあたりが、類書との違いだと思われます。

 

また別の章には、

ひいては深層学習モデルとして

などもたっぷり紙面が割かれています。これらまで盛り込んだ本は、そうそうないのではないでしょうか。

個人的には、時系列情報を扱う「状態空間モデル」の説明における、

ある時点tにおいて、GPSで車両位置を観測する。ただしこの観測値は真の車両位置から誤差がある

という例がとても分かりやすかったです。

 

類書との相違点

ベイズ統計モデリングを扱った書籍は色々とありますが、本書はいわゆる教科書のように初学者をゆっくりとスキルアップさせていくことを目的にしているというよりは、ある程度の知識・技術は習得済みであることを前提として、社会的問題にアプローチする際に必要となる可能性がある知識・技術を提供する、という位置づけなのだろうと思います。

実際、Pythonの基本的な書き方は習得済みであることを前提に、本書内では解説がありません。また書籍内で記載されている数式も、読者が線形代数に慣れていることを前提とした書き方で、『StanとRでベイズ統計モデリング』内での表記に比べるとだいぶ「難しそうに見える」と思います。

 

教育のことを考えると、あれやこれやと道具を使い分けるのは混乱を招きかねないので、例えばStan一本(松浦健太郎・著『StanとRでベイズ統計モデリング』)や、Rのbrmsパッケージ一本(馬場真哉・著『実践Data Scienceシリーズ  RとStanではじめる ベイズ統計モデリング』)で解説を貫徹させることは意義が大きいと思います。実際にこれらの本では、非常に簡単な例からはじめ、ベイズ統計モデリングとは、データ生成メカニズムに想像を巡らせることであるということを、言葉を尽くして丁寧に説明しています。

 

一方で現実的なデータ分析業務を想定すると、効率的に目的を達成させられるツールを活用することも必要となるし、時には数学的にかなり難解な手法を採用するべき状況もあるでしょう。なので本書では、目的に応じてパッケージを使い分けるという立場を採用しているのだと思います。

これは著者らが全員、企業所属の研究者であることも関係しているのだろうと思います。まさに少し前に、著者らが主催する、以下のセミナーに参加したことがありました。

techplay.jp

ここで、著者の一人である須山さんがおっしゃっていた

皆さんの中には、「企業は金を稼ぐもの」と思っている人がいるかもしれないが、その考えは古い。今の企業は、「社会的課題を解決しようとするもの」。我々はデータ分析の力を使ってそれに挑む。

という言葉が印象的でした(多少表現が違うかもしれません)。本書を読みながら、この言葉が何度も思い出されました。

 

なお誤解のないように言葉を補っておきますが、本書では初学者を置き去りにしているというわけではありません。むしろ、MCMCアルゴリズムや種々の確率分布について、数式や乱数発生シミュレーションによって丁寧に解説を行っており、教育的な利用にも適していると思いました。

 

おわりに

僕自身、勉強中の身であるし、普段はR言語を用いることが多いため、まだまだ本書を時間をかけて精読しなければなりません。特に後半の内容は初めて学ぶことも多く、読了後に改めてブログに追記するかもしれませんが、現時点で僕が読み進めた限りにおいて、上記のように非常に素晴らしい書籍だと思いました。

もちろん上記で引用した、類書である

などもおすすめです。

Enjoy!

 

【書評】PsychoPy/Pavloviaによるオンライン実験

本記事について

著者の十河宏行先生、出版社の朝倉書店様より、『PsychoPy/Pavloviaによるオンライン実験』をご恵投いただきました、ありがとうございます!!

www.asakura.co.jp

本書は、心理実験作成用ソフトウェアPsychoPyの、Builderという機能を用いて実験を作成し、ひいてはサーバにアップロードすることによりオンライン実験を実現する方法を解説した本です。

一方、PsychoPyはCoderと呼ばれる機能を用いて、Pythonコードを書くことでも実験を作り上げることが出来ます(が、こちらは主に非オンライン実験を想定した作成方法)。Coderを用いたPythonプログラミングは、2017年発売の『PsychoPy心理学実験プログラミング』に詳しいので、これら2冊はセットで所持しておくと良いと思います。

asakura.jp-pay.jp

 

また以前に、2020年発売の『PsychoPyでつくる心理学実験』もご恵投いただき、その際にも書評を書きましたので、こちらもご参照ください。

www.asakura.co.jp

 

das-kino.hatenablog.com

以下では、新刊である『PsychoPy/Pavloviaによるオンライン実験』について紹介します。

 

そもそもPsychoPy Builderとは?

心理学実験では、PCを用いてディスプレイ上に呈示する刺激の物理的特徴や呈示時間などを厳密に制御し、実験参加者の反応を精密に記録することが求められます。そのためにはプログラミングが重要になるのですが、当然ながら一朝一夕で習得できるものではありません。

 

そこで、GUIで実験を作成できるソフトウェアがあれば非常に嬉しいのですが、問題はそういったソフトウェアは有償で、簡単に入手できるものではないということです。筆者(私)自身、卒論でC言語を用いて心理実験を作成しようとしたものの挫折し、たまたま指導教員が持っていたSuperLabという有償ソフトウェアを用いて実験を行ったという過去があります。

 

一方、PsychoPyはオープンソースなので無料で使用できます。しかも、安かろう悪かろうではありません。実験を厳密に制御するための様々な設定が可能であるばかりか、今なお開発が進み、様々な刺激の呈示・反応の取得がどんどんやりやすくなっています。

 

また本書の著者である十河先生のご尽力により、インタフェースの日本語化も行われており、学習も容易です。実際、筆者(私)は実験実習でPsychoPy Builderを用いた心理実験の作成を指導していましたが、学生はすぐに習得し、その後ラボに配属された場合には速やかに卒研実験を作成していました。

 

本書の特長

さて、前置きが長くなりましたが、ここからは本書の特長を紹介します。そもそもPsychoPyの解説書自体が少ないので(特に日本語では)、それだけでもありがたいのですが、主に以下の3点が重要かと思います。

  1. PsychoPy Builderの基本的機能の解説

  2. Pavloviaサーバへアップロードすることによるオンライン実験の実現
  3. 様々な職人技の紹介

以下では特に、2点目・3点目について紹介します。

 

オンライン実験の実現

「よく統制された実験室に参加者を招き、一人ずつ実験を行う」という従来の心理学実験は今なお重要ですが、それと同時に、「多くの人にインターネットブラウザ上で実験を体験していただく」というオンライン実験が近年注目されています。

オンライン実験を実現するためのプラットフォームは様々あり、例えばlab.jsというアプリケーションでも無料で・GUIでオンライン実験を作成・実施可能です。

lab.js.org

 

一方、GUIによる「実験の作りこみ」においては、圧倒的にPsychoPy Builderに軍配が上がります。本書では、PsychoPy Builderで作成したプログラム(JavaScriptファイルが生成されます)を、Pavloviaと呼ばれる専用サーバにアップロードすることで、実験プログラムのオンライン実施やデータ保存を行う方法が丁寧に解説されています。

pavlovia.org

GUIで実験を作ることはできる、でもサーバとかよくわからない...」という人は多いのではないでしょうか。本書では画像付きでPavloviaサーバの利用方法を解説しているため、心配無用です。

 

また、実はPsychoPy Builderでプログラムを作成したら、あとはアップロードするだけ...というわけにはいかず、いくつか工夫しなければならないことがあります。これは「3.5節 実験セッション開始前の工夫」などで取り上げられているのですが、様々なTipsが随所で紹介されているのも嬉しいです。

 

様々な職人技の紹介

上で「PsychoPy Builderは学習が容易」と書きましたが、実はここには「よほど複雑な実験を志向しなければ」という条件がつきます。これはGUI全般の宿命で、複雑な実験に対応するメニューを増やすとゴチャゴチャして分かりにくくなるので、仕方のないところです。複雑なことがしたければPsychoPy CoderでPythonコードを書き、作りこむのが良いかもしれません。

 

ただし、PsychoPy Builderでも工夫すればある程度柔軟に実験を作りこむことができます。例えば「5.4節 チュートリアル4:系列位置効果」では、複数の単語を記憶してもらう実験が紹介されています。単語記憶実験では、呈示するための単語リストを事前に用意することがありますが、

  • 条件1では単語リストA
  • 条件2では単語リストB

という割り当てを行うと、条件間で記憶成績が異なっても、それは条件の影響なのか単語リストの影響なのかが区別しづらいという問題があります。そこで条件と単語リストをうまくシャッフルすることが重要なのですが、それをGUIで実装するためには一手間がいります。そのような、実験実施上必須のテクニックを実例とともに解説されているのが、「実験心理学者が書いた本」の特長です。

 

おわりに

これは本書『PsychoPy/Pavloviaによるオンライン実験』、姉妹書『PsychoPyでつくる心理学実験』『PsychoPy心理学実験プログラミング』に共通することですが、「色々なことができる、だからこそ、網羅的に紹介できない」という事情は理解しておく必要があると思います。

つまり、「自分が作りたい実験とピンポイントに対応する記述がない、どうすればいいんだ」という悩みは必ず発生します。

十河先生のWebサイトに、膨大な解説があるので、まずはこちらから必要な情報を探すのがよいでしょう。

www.s12600.net

 

Enjoy!

【新刊案内】『改訂2版 RユーザのためのRStudio実践入門〜tidyverseによるモダンな分析フローの世界』

本記事について

2018年6月29日に、技術評論社様より、『 RユーザのためのRStudio実践入門〜tidyverseによるモダンな分析フローの世界』第1版を発売させていただきました。

gihyo.jp

 ありがたいことにご好評をいただき、2021年5月11日現在、第1版は4刷まで発売されています。

そして3年の時を経て、2021年6月3日、いよいよ第2版となる、『改訂2版 RユーザのためのRStudio実践入門〜tidyverseによるモダンな分析フローの世界』が販売予定です(予約受付中)。

gihyo.jp

 第1版は、「#宇宙本」の愛称でご案内させていただきましたが、第2版はデザインを一新し、それに伴い愛称も「#宇宙船本」と改めました。宇宙へいざ旅立とうというメッセージがあるとかないとか。

 

第1版と第2版の違い

1. 最新のRStudioや各種パッケージの機能を反映

これまで、第1版を重版する際にも、最新の内容をある程度は反映して加筆修正を行ってきました。しかし、重版ではページ構成を変えられないという制約があったため、原則として脚注でこっそり最新の内容に言及することしかできませんでした。

第2版では、まるっと書き換えても構わないということだったので、各章、多かれ少なかれ、内容が更新されています。

例えば

  • RStudio 1.2から追加された、Jobsペイン(任意のスクリプトを、現在のプロセスの裏で実行できる機能)
  • サポートが終了したパッケージの削除と、代替パッケージの紹介(特に第2章)
  • パッケージのメジャーアップデートに伴う、新たな関数や記法の紹介(特に、第3章のdplyr/tidyrパッケージ)

などです。

 

僕は第4章(ggplot2を用いたデータ可視化)を担当しているのですが、実は第4章の修正点は少ないです。というのも、ggplot2パッケ―ジはちょこちょこバージョンアップしているとはいえ、根本的な部分はほとんど変化がないからです。そのぶん、第1版では紹介しきれなかった関数を新たに盛り込んだり、最近注目されている(そしてすぐにサポートが終了することはなさそうな)パッケージを新たに紹介したりしています。

主要な変更点を上げると、以下です。

position_dodge()とposition_dodge2()の細かい挙動や違いについて、説明を追加

棒グラフや箱ひげ図など、X軸に離散変数をマッピングした可視化を行う際に、position = position_dodge()という引数が明示的/暗黙的に利用されることがあります。

実はggplot2でX軸に離散変数をマッピングするのは色々と面倒なことが多くて、引数を追加して細かな設定を行わなければいけないことがあります。今回の改訂では、position_dodge()や類似したposition_dodge2()という関数の挙動について、説明を追加しました。

複数のグラフを並べて表示するためのパッケージ

第1版でも3つのパッケージを紹介していましたが、近年ではpatchworkパッケージに注目が集まっています。実は第1版の時点でも(発売直後だったかも)patchworkパッケージはリリースされており、個人的には推したいと思っていたのですが、当時はまだCRANに登録されていなかったので、紹介を見送ったという経緯がありました。

現在ではCRANから容易にインストールが可能になったので、初心者にも安心して薦められます。patchworkの優れているところは、ggplotオブジェクトを+などの演算子で繋ぐだけで容易に図を結合できる点と、レイアウトの自由度が高い点です。

日本語の解説記事もWeb上にはいくつか存在するので、ぜひ使ってみてください。

patchwork.data-imaginist.com

説明しなかったこと:地理空間システム(GIS)のデータの可視化

簡単に言えば、ggplot2で地図を描く方法です。近年のアップデートによって、これが容易に実現できるようになりました。

ggplot2の目玉の1つでもあるので、紹介しようか悩んだのですが、別途必要な知識が増えるので、あくまで本書は入門書であることを考慮し、触れないこととしました。

ただし、この機能について詳しく紹介している書籍(以下)を参考文献に追加しましたので、興味がある方はそちらもご参照ください。

www.kspub.co.jp

 

2. 約50ページ、付録を追加

第1版を出版した当初から、「文字列処理には触れていないのかー」という声をいただいていました。そこで第2版では、

  • stringrパッケージによる文字列データの処理
  • lubridateパッケージによる日付・時刻データの処理

について、計50ページ近く内容を追加しました。僕はこのうち、stringrパッケージによる文字列データの処理を担当しました。自己満足かもしれませんが、かなりお気に入りの内容です。

本書の3章や4章では、一貫してmpgデータセットを用いて説明したように、1つの章の中で同じデータセットを使い続けるということは、読者の認知的な負担を減らすうえで重要だと考えています。

そのため、多様な文字列処理用の関数を適用可能な、文字列データを見つけてくる必要がありました。あーでもないこーでもない、と悩んだ結果たどり着いた答えは...ぜひ本書をお手に取って確かめてください!

またこのパートでは、正規表現についても簡単に紹介しています。正規表現は、Rに限らず様々なプログラミング言語で活用できる技術なので、今後R以外の言語の習得も目指している方にとって、有用だと思います。

ただしstringrパッケージ内で正規表現を用いる際には、少しだけ独特の書き方が必要になる場合があるので、注意してください。

 

最後に

第1版を持っているが、第2版も購入しようか迷っている方へ

これについては、他の著者がブログで言及してくださっているので、ご参照ください。notchained.hatenablog.com

 

y-mattu.hatenablog.com

 

僕個人の意見を言うとすれば...第3章のためだけでも、購入するメリットはあると思っています(僕が書いた章ではないんですが)。これは他の章が相対的に価値が低いということではなく、次の理由によります。

最近のバージョンアップによって、3章で紹介しているdplyrパッケージを用いてデータ整形する際の記法が、大きく変わりました。大きくと言っても、全くの別物という意味ではないのですが、across()where()などの関数を駆使した、新たな書き方を覚える必要がでてきました。正直に言えば、僕自身はけっこう難しくなったという印象を持っています。これから初めて学ぶ人にとっても難しいだろうし、すでに昔の書き方が染みついている人が新たに覚えなおすうえでも難しいだろうと思っています。

※もちろん容易に移行できる人はたくさんいると思いますが

また3章では、第1版でほとんど紹介していなかったtidyrパッケージの関数についても、説明が大幅に増えています。

いずれのパッケージに関しても、図を用いながら挙動を丁寧に説明しているので、イメージが沸きやすいと思います。

 

 

「いや、そりゃ著者にとっては買ってほしいでしょうよ」と思われるかもしれませんが、そういう下心がなく上記のように言っているというのは、信じていただくしかありません。

改訂にあたっての、個人的な思い

発売から3年経っても、未だに購入してくださる方がいること、そして第2版を出版できたこと、本当に嬉しく思います。ありがとうございます。

僕以外の著者3名はいずれもR界隈では有名で、よくご存じの方も多いと思いますが、そんな中にcontributorでも勉強会主催者でも何でもない僕が参加させていただけたことは、この上ない幸運だったと思います。

著者がこんなことをいうのはどうかという気もしますが、執筆しながらも学ぶことが多く、僕自身は著者でありながら読者でもありました。第2版の表紙絵は、宇宙から宇宙船に変わりましたが、この宇宙船は、「皆さんを」乗せる船ではなく、僕自身がその乗客の一人であると思っています。

 

本書が「皆さんと」tidyverseを旅するきっかけになれば幸いです。

Enjoy!!

【Tokyo.R #91】Road to ggplot2再入門

ちょっと前のことになりますが、第91回Tokyo.Rで発表してきました。

tokyor.connpass.com

 

今回は初心者セッションが充実した回だったので、ggplot2パッケージを用いた可視化について解説しました。資料は以下です。

 

Enjoy!