Essential Statistics for Corpus Linguistics with R
バーミンガム大学で行われた四日間に亘る表題のワークショップに出席しました。講師はこのトピックなら最適(かそれに近い)と思われるStefan Th. Gries。ワークショップと名付けられているものの、実際は基本的には講義で、受講者は与えられたコードを走らせるだけというスタイルでした。近年Griesが毎年行なっているBootcampの統計部分(五日間半)がベースになっており、そこからクラスタリングの手法とPCAなどの探索的な手法をカットしたものが今回のワークショップの内容に当たるようです。更にその元となっているのはGriesの著書であるStatistics for Linguistics With R、及び現在執筆中のその第二版だそうです。受講者は計17名で、英国のほかドイツやエストニア、スロバキアからの出席者もいました。ほぼ全員がPhDの学生で、学習者コーパスや英語教育関連でコーパスを用いて研究しているという人が多かった印象です。またその17名に加え更に40名ほどがキャンセル待ちとなっていたそうです。
休憩を抜いた正味の時間は6時間(午前3時間+午後3時間)×4日間だったのですが、講義に近いスタイルでの24時間なので相当な情報量でした。統計的には仮説検定の基本的な考え方から、Rではデータの型や変数への代入から始まり、t検定やANOVAを経てロジスティック回帰モデルまでが範囲です。私は前掲書に目を通していますし、本ワークショップを受講するために特に統計やRの前提知識は問われなかったことから大半は既知の内容だろうと思いながら受講しました。確かに既知の部分も多かったのですが、さすがはGriesで各統計手法についての知識が深く、データやモデルの視覚化の手法を中心によりエレガントな方法を学べたり、私のデータ分析に直接役立ちそうなコードを知れたりと、想像していたよりも遥かに面白い内容でした。欲を言えば三日目あたりがスタート地点であれば個人的には更に良かったのですが、周囲を見渡した感じでは私は中心的なターゲット・受講者ではなかったようですしやむを得ません。
以下、面白いと思った内容の一部です。自分用のメモからの抜粋に少し手を加えた程度のものなので読みづらいと思います。また私の理解・解釈が誤っている可能性もありますのでその点はご了承ください。
- 仮説の「反証可能性」の定義として「can be falsified」は厳密には問題がある。「重力が存在する」は決して反証されない(常に真である)が、反証可能な仮説である。「仮説を反証するシナリオを考えられるか」の方が正確な定義。「重力〜」の場合だと「物が宙に浮く」というのがそのシナリオに当たる。
- 名義尺度変数のdispersionの指標としてrelative entropyがある。変数Xのrelative entropyは以下で求められる。結果は0から1の値を取り、「不確からしさの度合い」を表す。0に近いと分布に偏りがあり、1に近いとその逆。c(33, 33, 33)だとどのカテゴリーも全体を表しておらず、無作為抽出したデータポイントがどのカテゴリーに属するかは予測できないので、relative entropyは1になる。
- percentage = table(X)/length(X)
- -sum(percentage*log(percentage))/log(length(percentage))
- ftable関数でピボットテーブルのような表が作成できる
- barplot関数の戻り値は棒グラフの中心のx軸の値
- Rは基本的に座標の中心にプロットするが、pos引数を指定することにより、指定した座標の下(1)、左(2)、上(3)、右(4)にプロットすることができる
- カイ二乗検定について
- セルの値が5以上でなければならないのは期待値であって観測値ではない
- 残差の二乗を合計したのがカイ二乗値
- カイ二乗検定でもOccam's razorに従い、カテゴリーを合成(conflate)する。概念的・統計的に支持される場合のみ。
- 合成すべきかどうかはMarascuilo procedureでそれをチェックできる。2 × ◯のテーブルにのみ適用可能。
- λを用いたPRE measureでもチェックできる。0.25だと、knowing the category of one variable increases the probability that you can predict the other one by 25%ということ
- Fisher's Exact Testで残差の代わりになるようなものはあるか?→ない。カイ二乗での残差をヒューリスティックスとして用いるのはどうか
- あるいはconfigural frequency analysis(cf. Griesの前掲書)を用いる
- shapiro.testは長さが5000までのベクトルしか扱えない
- コルモゴロフ・スミルノフ検定のD値 = largest difference between the two points (two curves) in the empirical accumulative distribution functions
- タイの値を解消するためにjitterを行った場合、その旨を論文に記すか?→自分なら記さない
- Fligner test (fligner.test(y~x)): 正規分布していない場合に分散が同一かどうかを検定する。F検定のノンパラメトリック相当。
- 欠損値について
- imputationを行うならall case-wise comparisonから欠損値があるデータポイントに似ているデータポイントを5つほど選び、その平均でimputeする、というのが良いのではないか
- しかしmissing dataが5%くらいが上限
- 言語データは医療データのようにadditional dataを得るのに大金と多大な時間がかかるというわけではないことが多いので、imputationはやりすぎなのではないか
- scale(ベクトル)でz得点にできる。scale(ベクトル, scale=F)でセンタリング。
- 回帰モデルで名義尺度変数を従属変数にした場合のコントラストについて
- 一昔前の(?)社会言語学でのVERBULのように、混合効果モデルを用いないと論文が受理されづらいということが起きている。dogmaticで良くない。
- 回帰モデルのモデル選択の手順: 高次の交互作用から有意ではないものを順に消して行く。最後に名義尺度変数の水準の合成
- AICとp値のどちらに基づいて最適モデルを求めるか?→回帰モデルではない全く別の方法でやってみて、それと一致する方を選ぶというのも一つの方法(triangulation)
- gvlma関数(gvlmaパッケージ内):lmモデルの前提をチェックする
- 決定木の弱点の一つは変数間の交互作用を見れないこと。ランダムフォレストであれば見れる。
- ロジスティック回帰を用いる際、オッズ比やロジットは直感的に理解しづらいので、ロジットを報告はするがグラフは確率を用いて描くのが良いのではないか
- plot上にtext関数で文字を入れる際にイタリックと関数で計算した値を入れたいが、例えばexpression(paste(italic("A"), mean(1:10)))とするとmean関数が評価されずに関数名のまま出力されてしまう。どうすれば良いか?→expression関数の代わりにbquote関数を使うとピリオド+カッコのカッコ内は評価されるのでそれを用いる。この場合だとbquote(paste(italic("A"), .(mean(1:10))))