投稿を終えての振り返るGitHub & Two-way ANOVA

本格的な研究活動に復帰する前から暖めていたネタをやっとこさ国際会議論文にまとめた。WI2研究会の発表を経て、ゼロから実験計画を練り直し、再実験を重ねていたため、一時は〆切に間に合わないかもと思っていた。なんとか滑り込みで間に合った。とはいっても実験が練り切れなかったこともあり、採択されるかは怪しい。採否通知が来るまでは10月から始まる研究室運営に集中しようと思う。

さて、今回の論文では(提案内容とは別に)新しいことに2つ取り組んだ。一つはGitHubによる論文バージョン管理、もう1つはノンパラメトリックな2要因分散分析、である。多くの研究者にとっては今更な話題なのかもしれないが、個人的に新しい学びだったので、忘れないよう記録に残す。


GitHubによる論文バージョン管理

これまでGitHubを使ってはいたものの、一人で使用していたこともあり、ひたすらmasterブランチに修正したコードをpushするということしかしたことがなかった。当然「ブランチを切る」なんてことはしたことがなかった。前のバージョンとの比較を適宜行うなど、本当の意味でバージョンを管理する必要性を感じていなかったこともあり、プログラミングコードに関してはDropboxで作業をするというありがちなスタイルで作業をしていた。

それが今回は気が変わった。10月から立ち上がる研究室でこれからどうやって研究資産を管理していこうかと考え出したことがきっかけであった。

にも書かれているが、研究室での研究リソース管理にはGitが適してそうだ。ブランチを切り、修正・追加作業を行い、一通りの作業が終えたらプルリクエストを出し、確認次第masterブランチにマージ作業をする — この種の作業は、研究室における論文やコードの共有作成と相性が良さそうだ。問題はGitのうま味を理解しなければ、Gitの仕組みやコマンドなどを学ぶ気が起きないことである。今回の論文執筆では、気分転換がてらGitHubでバージョン管理してみることにした。

結果的には非常に良かった。なにより良かったのが、原稿を版という概念できちんと分けられること。これによって例えば共同研究者のコメントが入る前後でどんな変更があったか、英文校閲適用前後で何が変わったのか、などが明確に比較できるようになった。論文の修正・加筆点をIssueという形式で管理できるのも良かった。ブランチを切ったりマージしたりという作業も、仕組み理解すればそれほど抵抗のある作業でもなかった。共同作業、版の管理、研究データの蓄積をこんなにきっちりできるのに、なんで今まで使わなかったのか反省しました。第5期科学技術基本計画にも記されているように、近年研究データの管理・オープン化について盛んに議論されている。これからはgitを使ってもっと積極的に研究データやコードのアーカイブ、共有、公開していこうと思う。

ノンパラメトリックな2要因分散分析

今まで付け焼き刃でしか勉強してこなかったこと、ヒューマンファクター系の研究の経験が不足していることもあって、データ分析・論文執筆過程で大変な目にあったのが、このテーマ。1要因のノンパラメトリックな分散分析ならKruskal-Wallis検定やFriedman検定を使ったことがあったので、2要因になっても大丈夫、交互作用を考えるのが重要なんだよね!くらいの感覚でいたのが大間違いだった。

まず2要因分散分析のノンパラメトリック版というのは、Google検索でパッと調べても出てこない。英語で探してみると同じように悩んでいる人がいて、ResearchGateの議論(参考:Is there a non-parametric equivalent of a 2-way ANOVA?)を眺めていると”Aligned Rank Transform”なるテクニックがあることを発見。CHI2011で論文と発表されているテクニックなので、割と信頼できそう(参考:The Aligned Rank Transform for nonparametric factorial analyses using only ANOVA procedures)。これを使うと、正規分布に従わないデータをランク変換した後、通常のANOVAを適用できるそうだ。Rのパッケージも公開されているので、これをデータ分析に採用することにした。

次に困ったのが下位検定。2要因以上の分散分析を行った結果、交互作用が確認された場合、下位検定によって詳細に調べることが求められる。このあたりの知識も不足していたので、「心理統計学の基礎―統合的理解のために | 南風原 朝和(著)」を参考に勉強した。この書籍によると、交互作用の下位検定は、ある要因の各水準における別の要因の効果「単純効果(simple effect)」を調べることとされている。2要因分散分析後の単純効果の分析は、基本的にはある要因の水準を固定して1要因分散分析を行えばよい。しかし、一点だけ気をつけなければならないことある。それはF値の計算時に「2要因分散分析で用いた残差の平均平方(誤差項)を用いる」ことである。

さて、勉強しているときは気にしていなかったのだが、いざ計算するときにはたと気づいたことがあった。上記の話は、分散分析の各群に割り当てられたデータの個数がすべて等しいバランスデザインの場合に適応できる話だそう。データの割当数がバラバラなアンバランスデザインで行われた実験では、主効果どうし、あるいは主効果と交互作用効果が無相関ではなくなる。それゆえ、平方和の計算に工夫が必要となる(いわゆるタイプIやタイプIIIなどの計算)。調べてみると他にも工夫が必要だそうで、それについて様々な論争があるそうだ(参考:分散分析のノートの「プールされた誤差項」と「水準別誤差項」の節)。

2要因分散分析もAligned Rank Toolも付け焼き刃な勉強しかしていなかったため、ここから先どうやって交互作用の分析を進めるべきか戸惑った。単純主効果分析以外の別方法で下位検定ができないかと調べてみたもの、単純な多重比較で乗り切る方法も含め、いろいろな説が出てくる。しかも、どれが信頼できる分析方法なのかがわからない(参考:要因計画の分散分析において単純主効果検定に使用する誤差項の選択について)。〆切に追われていたこともあり、今回は「水準別誤差項」を使用した単純主効果分析で乗り切ることにした。

おわりに

毎度のことながら、学生の時にもっときちんと勉強しておくべきだったと反省した。一方でこういう時にしか勉強しないというのも真であるので、結果的には勉強できてよかった。誰か一緒に勉強してくれる人、募集します。

数学記号の表記法に混乱する

論文や発表資料を作成しているときに数学記号の表記方法に迷うことが時々ある.数学記号の使い方に関する授業なんて無かった気がする.個人的にもちゃんと学ぼうとしてこなかったので今更ながらちょっと調べてみた.以下個人的なまとめ.

数学記号の使い方

「集合は大文字で斜体 or 直立体?」「関数は斜体 or 直立体?」なんかがはっきり分かって良かった(僕の理解は間違っていなかった!).微分のdは斜体ではなく直立体で表記するのは知らなかった.