#Julia言語 以下の特徴があるので、Juliaがベスト。
* 気楽にアルゴリズムを実装できる。
* 速い。
* Jupyter notebook化すれば数式を含む解説文とコードとプロットを1つのファイルにまとめられる。
* パッケージ化が容易。
* 他言語との連携によって例えばPythonやRでも使えるようにできる。
#Julia言語 二項検定のP値と信頼区間のコード
using Distributions, Roots
⪅(x, y) = x < y || x ≈ y
pval(n, k, p) = let bin = Binomial(n, p); sum(pdf(bin, j) for j in 0:n if pdf(bin, j) ⪅ pdf(bin, k)) end
ci(n, k, α) = find_zeros(p -> pval(n, k, p) - α, 0, 1)
たったの4行!
#統計 #Julia言語 P値を計算する函数が実装済みなら、信頼区間函数の実装は
ci(n, k, α) = find_zeros(p -> pval(n, k, p) - α, 0, 1)
の1行で終わることは注目に値する。この事実は統計学入門の教科書を見ても出て来ない。
一般に統計学入門の教科書における信頼区間の説明はひどい。
目標がプログラミング自体ではなく、アルゴリズムの理解やシミュレーションによる統計数理の理解であるならば、気楽にかつシンプルにコードを書けて、線形代数に強く、計算が速くて、グラフのプロットが易しい環境でプログラムを書くべきだと思う。
この条件だと、#Julia言語 ほぼ一択。
最近のプログラミング言語ではユニコードを変数名や函数名に使えるようになっているが、 #Julia言語 のように任意の言語圏のコンピュータ環境でも入力できるようにしてくれているものは珍しい。(Julia以外にある?)
そのおかげで #Julia言語 では変数名に μ, σ², φ, x₀, X̅, θ̂, …などを使用した「まるでアルゴリズム説明用の疑似コード」に見えるプログラムを書いて、そのまま実用的に動かすことができる。
自分で書いたコードを教育でも利用したい人にとっては大きなメリットだと思われる。
#Julia言語 Jupyter notebookでの使用例
添付画像
1. ギリシャ文字αを使用。doc stringも書いてある。
2. ヘルプでdoc string中の数式がきれいに整形されて表示される。きれいな数式は後で見直したときの最理解を円滑にしてくれる。
3, 4. 理解の助けになるプロット。
nbviewer.jupyter.org/gist/genkuroki…
#Julia言語 環境の作り方↓
グラフの多彩な形式の歴史は統計学の歴史そのものだと言っても言い過ぎにならないほど、統計学全般においてグラフは重要だと思う。
統計がらみのコードを書く場合には、グラフのプロットまで一挙に書いてしまった方が理解が進む。
しかし、グラフのプロットの仕方を学ぶコストは高いので要注意。
あと、統計がらみの計算は複雑な場合が多いので、プログラムのコードだけから、何をやっているかを理解するのは難しい場合が多い。
教科書にあるような数式を使ったアルゴリズムの説明がないと後でコードを読み直したときに非常につらい思いをすることになる。
統計の数理を気楽に理解するコツは、統計分析用のコードのテストをモンテカルロシミュレーションで確認すること。
疑似データをランダムに大量に生成して、疑似データからの推定結果の分布をプロットしてみることが典型的な作業。
これ、計算量が増えるので、高速なプログラム言語が必須です。
あと、統計学的概念のスッキリした記述には線形代数が必須。
理解を深めるためには線形代数が自然に使えるようになっている環境でプログラムを書いた方がよい。
例えばGauss過程回帰も #Julia言語 ならばせいぜい十数行あれば書ける。
結論:満足できそうな合理的選択は #Julia言語 ほぼ一択。
計算が重くならないなら、統計がらみのシミュレーションでは #R言語 も非常に良い選択肢だと思うし、言うまでもなく、#Python もよい選択肢だと思います。
理解のためのモンテカルロシミュレーションを実際にやってみることの方が「道具の選択」よりも重要であることは言うまでもないことです。
Share this Scrolly Tale with your friends.
A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.
