チラシの裏の落書き日記

統計とか,研究とか,日常についての備忘録的なもの。

雑記

応用の人が説明する統計は数学的側面がすくなく直感的で分かりやすいかもしれない。コアの概念をそれっぽく伝えるのは良いかもしれない。だが、往々にして正しくない。正しくない説明が雰囲気による説明でさらに正しくなくなる。誤解が広がることも少なからずある気がする。その弊害はなかなか大きいかもしれない。

ベイズ統計学を推進していることに関する違和感と所感

例によってダラダラと気になることをなんの脈絡もなく書き留めておく。

昨今のベイズ統計学を推進しようとしている人たちがやっていることは,ベイズ統計学というより,実際にはパラメタ推定方法として,事後分布を使うということに過ぎない。
実際には予測分布の話は殆ど出てこず,StanやBUGS,JAGSといったソフトの使い方を習熟することを指して”ベイズ統計学を教える”と言っているように感じられる。
ベイズ統計学をどう教えるか”,ということに腐心している人たちもいるようだが,彼らがやっていることは尤度と事前分布からMCMCを使って事後分布からのサンプリングをしているということだけのように見える。それを,特定のソフトでどのように書くか,ということだけが問題になっている。
ベイズ統計学といってもカバーする範囲は非常に広い。ノンパラメトリックベイズベイジアンネットワークもある。
結局,彼らが批判している頻度論的な手法の”暗記”と対して変わらない気がする。(これを検証したいときにはこんな感じモデルをもとに,もにょっとパラメタを追加すればいい,的な。)
ソフトを使えるようになっている人の何割が,完全条件付き分布を書き下す事ができるだろうか。あるいは,そこから自分でMCMCを導けるだろうか。結局のところやんわりとした,ソフトの使い方の習得がベイズ統計学の習得と同地ではない。
もちろん,ソフトが使えて,ほぼ既存のモデルに対して,事後分布からのサンプリングができれば十分ということも多分にしてあるだろう。
また,ベイズ統計学の方が誤用が少ないという主張もあるが,この根拠はいまいちわからない。誤用とは何を指しているのだろうか?pハッキング?率直に考えて,手作業で指定しなければならないことが増える分だけ誤用が入る余地が多くなるのではないか。生成モデルは彼らのいうところのベイズ統計学の枠組みでなければ考えられないのだろうか。これまで普通に行われてきたモデルは生成モデルではないのか?ベイズ統計学と頻度論的統計学を分けて考える必要性はもはやないはずなのに。数学的背景がない以上は,諸々のことを覚えるなりなんなりしないとなにもできないと思われる。彼らのいうところのベイズ統計学は数学的背景がなくても使えるものなのだろうか?あまりわからない。

ベイズ統計学について最近思うこと

最近,ベイズ統計学が流行っていることに関して,個人的に思ったことをとくに引用などもせずにただつらつらと書いておく。学問的な正しさは一切保証しない。また,私はベイズ統計学や頻度論的統計学の区別なく,統計学を愛しているし,不当な争いや煽りあいが生じるのは不本意と感じる。

ベイズ統計学ベイズ推測をするための枠組みだと理解しているが,数多く紹介される応用に近いベイズ統計学の勉強会のスライドは,ベイズ推測を志向していないと思われる。ベイズ推測は「事前分布とモデルの組み合わせから予測分布を導出し,予測分布がおよそ真の分布に近いだろう」と推論する様式だと認識している。最尤推測は,パラメタの最尤推定値をモデルにプラグインして,予測分布とみなし,その予測分布が真の分布に近いだろうと考える推測方法である。事後確率最大化法や期待事後推定法は,最尤推測に近く,何かの点推定値をプラグインして利用しているという意味で,ベイズ推測よりも最尤推測に近いもののように感じられる。
さて,巷で紹介されている「ベイズ推定法」とは一体何なのだろうか。多くは「パラメタの点推定値を得る方法として,パラメタの事後分布を用いる推定方法」として捉えられている。あるいは,マルコフ連鎖モンテカルロ法(MCMC法)を簡単に用いることができるソフトを使ったパラメタ推定法というくらいの意味で使われているようにも思われる。ただ単に,パラメタの推定値を得るための方法として,MCMCを使っているのであればそれは必ずしもベイズ統計学といっていいものなのか,私にはわからない。単にパラメタ推定の一方法として,MCMC法を用いた,という以上の意味があるようには思えない。ある種のOptimizerとしてのMCMCソフトであるという以上の意味はない。

未だにベイズ統計学と頻度論的統計学が対比されて紹介されることが多いが,個人的にはこの点についても疑問が残る点が多い。「頻度論はパラメタの真値は定数,ベイズ統計学では真値は分布と考える」は正しいだろうか。これは正しくない。頻度論にせよベイズ統計学にせよ,真の分布は固定された一つのものと考えている。たしかに,真の分布を推測するための道具として用いているモデルの上では,ベイズ統計学では事後分布という分布を考える。しかし,これはあくまで手元の道具について,便宜的なものであって,真の値のことを述べているわけではない。ベイズ統計学においても真値が定数と考えても矛盾はない。もちろん頻度論的な考え方でも同様である。「頻度論はパラメタを点推定し,ベイズは分布を推定する」は正しいのだろうか。この言及はあまり意味がわからないように思う。最尤推定量も確率変数であり,平均値などと同様に確率的に分布する。確率的に分布するのであればその分布を近似的にでも求めることができる。実際漸近論を用いて,最尤推定量の分布が導出されてきたし,精密標本論での成果も枚挙にいとまがない。実際こうした最尤推定量の標準誤差の導出がなければ仮説検定もできない場合が多いだろう。仮説検定を普段用いているのにもかかわらず,こうしたこうした点を考慮していないのは,気が明かりだ。最尤推定量だろうがベイズ定量だろうが,推定量は分布する。さらに、ベルシュタイン-フォンミーゼスの定理は事後分布と最尤推定量の分布が漸近的に等しくなることを保証している。ただし,予測分布を導出する際には推定値をプラグインするのか,積分を行うかはだいぶ大きな違いだ。

ベイズ統計学では帰無仮説検定(頻度論)を超えることができる。」というのは本当だろうか。しばしば,頻度論=帰無仮説ベイズモデリング,という対比がなされているようにも感じられるが,頻度論的統計であったとしても,モデルを考えることはいくらでも行われてきた。例えば,状態空間モデルなどもベイズでなければ解くことができない問題というわけではない。因果構造を探索する問題もベイズではない。また,帰無仮説検定を否定しているにもかかわらず,事後分布の95%信用区間が0を含むかどうかを議論するのには違和感がある。そのロジックでは帰無仮説検定と全く同じことを行っているにすぎない。また,「ベイズ統計学ではパラメタの事後分布を使ってパラメタが取りうる確率を表現できる。頻度論での信頼区間ではそれができない。」といわれることがある。パラメタの事後分布は確かにある種の確率を表しているが,それは「真のパラメタがその区間に含まれる確率」を意味しない。あくまでも,特定のモデルや事後分布を用いた状況でのパラメタの事後分布に過ぎないのである。これは,帰無仮説を固定したもとでの検定統計量の分布,と似たいようにあくまで特定の状況に依拠した推定量に過ぎない。信頼区間は「帰無仮説が整合的な区間」という解釈も可能であり,確かに「真値がその区間に入る確率」と解釈は明確な誤りであるが,それはベイズ統計学の事後分布であっても同様のように思われる。

ベイズ統計学は主観的,頻度論は客観的」と言われる。どちらもモデルを設定している時点で主観的である。にもかかわらず,ベイズ統計学は事前分布を主観的に設定しており恣意的だといわれる。これはおかしい。なぜモデルが正しいと常に考えることができるのだろうか。なぜ事前分布にだけ注意を払い,そもそものモデルの方は正しいと思うことができるのだろうか。

ベイズ統計学は仮説が正しい確率を評価できる」はどうか。実質的にはベイズファクターが有用であるというような話なのだろう。しかし,ベイズファクターも何と何を比較するのかによって値は操作できるだろう。また,頻度論的枠組みであっても,尤度比や尤度比検定を用いることも考えられる。

ベイズ統計学は2値的な判断をしない」というは利点なのだろうか。帰無仮説検定で,p値が0.051と0.049の間には大差がないが,有意か有意でないかで結論が変わる,というような点へのアンチテーゼなのかもしれない。しかし,この状況は検定を誤用しているに過ぎないように思う。連続的にパラメタが1~2の確率は90%といわれても,それを解釈するためには,少なくとも0ではない,などの観点が必要になると考えられる。結局,「結局どうなのか」という判断をすることが研究の意味なのであれば,「どちらかわからない」という結論にはどういう意味があるのだろうか。2値的な判断を避けたとしても,それが新しい情報につながるわけではないように思われる。(というかそれなら信頼区間を使えばいい。)

たしかに,複雑なモデルや階層モデルにおいてはベイズ統計学の方法論が有用になってくる。そういうものがあるのは事実だし,ベイズ統計学を用いることで進む学問があるのは確かだ。しかし,それは頻度論的統計学が不要になったわけではない。厳密なサンプルサイズ設計や実験計画を踏まえて,慎重に結論を出すというのは非常に科学的な姿勢のようにも思われる。適材適所であって,すべてをベイズ統計学にすればよいは思えない。結局,これまで検定の種類を覚えていたのと対して変わらない現状が待っているように感じられる。それを使って研究ができるのだろうか?統計的な手法は大事である場が,データをどのように収集するか,実験をどのように計画するか,という点が統計の応用研究者の腕の見せどころのように思う。たしかに,従来の分散分析の枠組みは窮屈かもしれないが,それに合わせて厳密な研究ができるようにもなる。分析が自由になることで,データのとり方が自由になり新しい可能性が開けるのであれば,それでもよいが,適当にデータが収集されて,そうした適当なデータであっても分析がなんとかしてくれる,というような現状になるような気もしている。

統計学の講義をすべてベイズ統計学にして,推定はすべてStanなどのソフトに頼ればさまざまな問題は解決するのだろうか?ベイズ統計学のほうが誤用が少ない,という根拠はなんだろうか。pハッキングの問題と同様に,ベイズ統計学でもいくらでも恣意的に結論を操作することができるだろう。むしろ,操作できる変数が増えた分,だれも問題をチェックできなくなっていくのではないかという気もする。(コードなどオープンにすれば解決するのかもしれないが,厳密な検証は誰がやるのだろう?)

素朴な疑問として,モデルのパーツである確率分布は現実の何に対応しているのか,その妥当性はだれがどのように保証するのだろうか。

学問は一足飛びには進まないのである。いずれの方法を使っても,研究結果の誇大広告を避けて,着実に一歩ずつ進むほかないのである。

自分のためのRcpp使い方リンク集(随時更新)

みんなのRcpp
teuder.github.io


Rcpp 使い方 - Rcpp 入門

アルマジロの使い方
aaaazzzz036.hatenablog.com

aaaazzzz036.hatenablog.com

aaaazzzz036.hatenablog.com

aaaazzzz036.hatenablog.com

自分用Julia言語勉強のためのリンク集(随時更新)

全般的な入門
rishida.hatenablog.com

https://nbviewer.jupyter.org/github/bicycle1885/Julia-Tutorial/blob/master/Julia高速チュートリアル.ipynb

The Fast Track to Julia

www.geocities.jp

Linear algebra · The Julia Language


行列の使い方
行列 |


Juliaでの確率分布の使い方
分布 |

文字列の処理(桁の0つめ)とか,地味に便利
bicycle1885.hatenablog.com

Rも使えるっぽいので,併用する。
JuliaからRを使う - りんごがでている


Rの関数っぽいものをJuliaでいろいろ
expand.grid
Function like expand.grid in R - Usage - JuliaLang

Rの中でJuliaの関数を書く
Writing Julia functions in R with examplesinsightr.wordpress.com



IJulia notebookを起動するために
using IJulia
notebook(detached =true)

Wordの数式番号について(めも)

以下のページがすばらしい。
今までの表を作る形式とは何だったんだろうか。

https://std-experimental-optional.blogspot.jp/2017/10/word-word-2016.html

問題を解決するために何を考えるのか

 問題を解く前に考えるべきこと。第1に何を目的にしているのかを明確にしなければならない。大きな目標からしたら,現在目の前にある”問題のようなもの”は本当の問題ではないかもしれない。実際には取り組んだり解決する必要がないものの可能性がある。もっとも大きい目標に照らして何が解決されれば,目標が達成できるのか逆算的に考える。そのなかでベストな道筋を探し,そこで出会う問題を一つ一つ解決していけばよい。

 問題の定義は目標との関係で変わりうることを念頭において,今何の問題に回答しようとしているのか,正確に見定める。目標達成のために解決する必要がない問題であれば,さっそうと無視する。取り組まなければならない問題に当たった場合には,その問題を5W1Hを明確にして述べる。文章にして書いてみるのがよい。固定された言葉は物理的なものと同様に取り扱うことができる。話し言葉で宣言するだけではふわふわしたまま変化してしまう。一度紙などに書いて現状を固定する事が必要となる。書いてみた問題は,抽象的すぎないか具体的すぎないかをチェックする。抽象的すぎると実際の行動に移すことができないし解決できない。具体的すぎると解決する意味がない問題になってしまう可能性もある。このあたりは非常に感覚的なものなので,人に相談するのもよいかもしれない。目指すべきは具体的な対象がイメージ出来ながらできるだけ一般性が高い状況を設定すること。個人的には自分の考え方の癖として抽象的すぎることが多いので具体性を高めに考えるように注意をしている。

 解を出すべき問題が見定められたら,それをさらに分解する。具体的に何が達成されれば,その問題が解決されたことになるのか,より細かい問題に分割していく。このサブ問題は大きな問題よりもより具体性が高いので,実感が持ちやすい。ポイントなのは,ストーリーとしてなぜそれらのサブ問題が必要になるのか,ということ。大きな目標を設定したときに解くべき問題がどのように定められるのかもストーリーに依存するが,細かいサブの問題にも同様にストーリーが必要となる。
なんとなくそれぞれのサブ問題が大事だから,というような思考ではいけない。それぞれを解くことが何を意味しているのか,位置付けと関係を述べることが必要になる。

 さらに,このサブ問題を解決できる具体的な作業に落とし込んでいく。理想的にはほとんど何も考えずにできるような形にできるのがよい。コンピュータにでもなったつもりで,考えないでもできる作業まで落とし込めたら,非常によい。あとは,ひたすら作業をしていくだけ。
このあたりは自分の得意な型に引き込めるとより速く,確実な解が得られる。どうしても必要であれば,新しい知識をみにつけることもいとわない姿勢は必要。目的がしっかりしていれば,学びは非常に早いものだ。

 もちろん途中で予期せぬ自体に直面することはあるが,全体のストーリやサブ問題の位置付けがしっかりしていれば,修正は容易になる。

 こうした目標の設定,問題の定式化,ストーリーの設定,問題の分解,作業の実行,という一連の営みを何度も繰り返してプロセス全体の作業に習熟するで,何が良い問題なのかなのかがわかってくるのだと思う。自分の頭で考えるということはこうしたことの積み重ねと繰り返しなのだと感じる今日このごろ。