#数楽 そうなんです!ベータ函数や超幾何函数達は非常に面白い!高校で微積分を習っていればめっちゃ楽しめる。

B(p,q)=∫_0^1 x^{p-1}(1-x)^{q-1}dx

がよく使われるが、

B(p,q)=∫_0^∞ t^{p-1}/(1+t)^{p+q} dy

およびさらにt=u^{1/p}やt=u^2とおいた場合も応用上重要な点は盲点になり易い。 Image
#数楽

B(p,q)=∫_0^∞ t^{p-1}/(1+t)^{p+q} dy

型のベータ函数の表示で t を t²/ν で置き換えて、p=1/2, q=ν/2 とおけば、本質的に自由度 ν のt分布が得られます。

t分布は非常に基本的な確率分布なのですが、ベータ分布の特別な場合(p=1/2)の変種と思えます。F分布はp=1/2の特殊化をやめた場合。 Image
#数楽

B(p,q)=∫_0^∞ t^{p-1}/(1+t)^{p+q} dy

型のベータ函数の表示を知っていれば

Γ(p)Γ(q)=Γ(p+q)B(p,q)

を y = tx (yを直線の傾きtに変数変換)の形の積分変数変換で示せます。その計算の過程も面白いので知っておいて損がないです。

大学新入生向けの計算練習の題材としてもよい。 Image
#数楽 ベータ函数を定積分から不定積分に一般化したものには「不完全ベータ函数」という名前が付けられてしまっているのですが、その部分積分を使って得られる公式の導出は高校3年~大学1年での計算練習として価値あるものになります。

ベータ分布と二項分布と負の二項分布の関係が得られます。 Image
#数楽 記号が θ,p,q→p,a,bと変わっていることに注意。

二項分布における確率=ベータ分布における確率

負の二項分布における確率=ベータ分布における確率

の形式に公式が得られています。

これは統計学的には

通常のP値 = ベイズ統計での事後分布での確率

を意味する公式になっています。 Image
#数楽 #統計 非常に困ったことに、「P値を使うことは有害であり、ベイズ統計における事後分布で測った確率を使おう!」と言っている人達がいます。

例えば豊田『瀕死本』は典型的。そこでの事後分布での確率とP値は数学的には同じものであり、P値を使ってP値を否定するデタラメな議論になっています。
#数楽 #統計 豊田『瀕死本』の著者は放送大学で心理統計の講義をしていたりするので本当に要注意。

大学新入生の段階で、部分積分のちょっと複雑な計算の練習をして、「P値=ベイズ統計での事後分布における確率」を意味する公式を得ておけば、おかしな議論の惑わされる可能性が減ると思います。
#数楽 大学1年生レベルの微積分の計算をきちんとしておくだけで、ノータイムで「これはデタラメ。相手にする価値がない」と判断できる場合が大幅に増えると思います。

現実の講義ではそこまでやる余裕はないのですが、基礎的な数学の教養+常識だけで相当なことをできることは常識になった方がよい。
#数楽 不完全ベータ函数も超幾何一族の一員です。

現時点ではコンピュータでの不完全ベータ函数の計算は2000行以上もあるコードで行われているようです↓

github.com/JuliaStats/Rma…

この辺を誰か整理して書き直して最適化すればよいのではないかと思います。
#数楽 多くの確率分布がベータ分布の変種になっているので、不完全ベータ函数=ベータ分布のCDFを効率よくコンピュータで計算できるようにしておくことは重要です。

これ、自分でやってみると分かるのですが、結構大変で、 #Julia言語 ではどうしているのか調べたら、2000行以上のCのコードが!(笑)
#数楽 特殊函数の教科書には漸近展開の公式が沢山書いてあり、コンピュータで計算するときにそれらが使われます。

引数の値ごとに効率的な公式が違うので、場合分けをして計算します。そのときに誤差をきちんと制御する必要がある。

こういう理由で特殊函数の実装は複雑になる場合がある。
#数楽 ベータ函数やガンマ函数について教える側にとって盲点になり易い応用上重要な事柄は沢山あって、このスレッドではそういう話をしているつもりなのですが、ガンマ函数の対数の導函数であるディガンマ函数もコンピュータで結構気楽に計算できることはもっと知られていてよいと思います。
#数楽 ディガンマ函数は

ψ(s)=(log Γ(s))'=(1/Γ(s))∫_0^∞ e⁻ˣ xˢ⁻¹ log x dx

はガンマ分布における log x の平均(期待値)です。これの導函数はトリガンマ函数で、高階の導函数はポリガンマ函数と呼ばれ、コンピュータで計算できる基本特殊函数達の一族の1つになっています。
#数楽 ガンマ函数とベータ函数は大学新入生向けの微積分の講義での定番の題材で、実際に知らないと困る場合が多い特殊函数なのですが、不完全ベータ函数、不完全ガンマ函数、ディガンマ函数などもよく出て来るし、コンピュータでの統計処理で必須なのですが、そこまで触れる時間的余裕はない感じ。
#数楽 対数ガンマ函数 log Γ(s) とその導函数達を扱うことは、そこからHurwitzのゼータ函数ζ(s,x)のs=0での偏微分係数が本質的に対数ガンマ函数になっているという結果

ζ_s(0, x) = log Γ(x) - log√(2π)

が得られるので、数論的にも重要です。

nbviewer.jupyter.org/github/genkuro… Image
#数楽 Stirlingの公式

log n! = n log n - n + (1/2)log n + log√(2π) + O(1/n)

の究極形の1つは

log Γ(x+1) = ζ_s(0, x+1) + log√(2π)

にHurwitzゼータζ(s,x+1)の積分表示を適用すれば即得らる。

Hurwitzのゼータ函数の積分表示はStirlingの公式を含んでいる!

nbviewer.jupyter.org/github/genkuro… Image
#数楽 大学1年生向けの題材にゼータ函数とガンマ函数の両方が入っているのですが、それらの関係に触れる余裕はない。

しかし、明らかに重要な関係があって、頻繁に応用される階乗のStirling近似の究極形の話も含まれている、というようなことは、数学を教えている側にもっと広まるべきだと思います。
#数楽 上で紹介した微積分のノートは

github.com/genkuroki/Calc…

に置いてあるファイルの一部分です。

教える側は知っているけど、講義では触れることが難しい価値ある題材をまとめたつもり。 #Julia言語 のコード付き。

単に理論的に扱うだけではなく、コンピュータでの計算の仕方もわかる。
#数楽 Hurwitzのゼータ函数と対数ガンマ函数の関係に興味を持った人は

nbviewer.jupyter.org/github/genkuro…
#Julia言語

が楽しめると思います。

「s=0での偏微分係数から対数ガンマが得られ、対数ガンマ2つで対数sinが得られること」を、s=0からs=1-r (rは正の整数)に一般化するとMilnorの多重sinが得られる。

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

13 Jan
#Julia言語

Juliaでの最適化では、函数の定義で

function f(x::Float64)::Float64

end

のように「型指定」しても全然__速くならない__ことを理解しておく必要があります。

function f(x)

end

のままで最適化できることを知らずに、一所懸命「型指定」するのは時間の無駄。
#Julia言語 函数の引数の「型指定」をするのは、multiple dispatchを使うためです。例えば

function f(x)
広く通用するアルゴリズムのコード
end

と定義しておいて、Float64専用の同名の函数を

function f(x::Float64)::Float64
Float64に最適化されたコード
end

と定義するとよい。
#Julia言語 しかし、

function f(x)
広く通用するアルゴリズムのコード
end

の段階で十分高速なコードを書ける場合も多いです。

それを可能にするのが、型の伝搬を促すコードの書き方です。

Juliaでは「型指定」ではなく、「引数の型の伝搬」で考える。
Read 23 tweets
11 Jan
#Julia言語

Juliaでは

foo(f::函数, X::配列など)

の形式で、配列Xなど(generatorやiteratorを含む)のすべての要素に函数fを施した結果に "foo" の操作を施せる場合が多数あります。

例えばXの要素の絶対値の最大値と和はそれぞれ

maximum(abs, X)
sum(abs, X)

二乗和は

sum(x->x^2, X)
#Julia言語 二乗和は

X = randn(10^6)
sum(Base.Fix2(^, 2), X)
sum(abs2, X)

のようにも書ける。Fix2(f, a)は本質的に x->f(x, a) です。読み易さは x->f(x,a) の方が上のことが多い。

1.96より大きい要素の割合は

count(>(1.96), X)/length(X)

using Statistics
mean(>(1.96), X)
#Julia言語

Xのすべての要素に手続き f を施すには

foreach(f, X)

返り値はforループと同じnothingになります。

Xの要素に函数 f を作用させた結果を集めたものは f.(X) だけではなく

map(f, X)

で作れる。

これら以外にもmaximum, minimum, count, sum, mean, …も似た使用法が可能。
Read 15 tweets
10 Jan
#統計

amazon.co.jp/dp/4130413007
竹内啓・竹村彰通編
数理統計学の理論と応用
1994
第5章 竹内啓 統計的推測理論の諸問題

に最尤法が漸近的に全然最良でないシンプルな例が載っていたので(添付画像)、#Julia言語 で数値的に確認してみた↓

nbviewer.jupyter.org/gist/genkuroki…

ベイズ統計に繋がる話題。続く ImageImage
#統計 その節のタイトルは「5 非正則な場合の漸近推定論」で、尤度函数が漸近的にフラットになる場合(一様事前分布の事後分布が漸近的に一様分布になる場合)のシンプルな例を作っているので、渡辺澄雄『ベイズ統計の理論と方法』の読者は特に興味を持つと思ったので、紹介することにしました。
#統計 データを生成する真の分布は添付画像の密度函数を持つtruncated normal distributionです。標準正規分布を |x|>1 なら確率密度が0になるように改変したもの。

モデルはこの分布を並行移動したものです。パラメータは平均μのみ。

分布の台がパラメータμごとに違うモデルになっている。 Image
Read 26 tweets
4 Jan
#統計 統計学の哲学者のMayoさんによれば

* Royallの3つの問いに、びっくりするほど多くの(しかも異なる信念を持つ)統計家達・哲学者達が賛同している。(大変なことになっている、とてもひどいことになっているというニュアンス)

続く

errorstatistics.com/2014/10/10/bre…
#統計 Mayoさん曰く

* Royallの3つの問いの「戒律」によれば

①何を信じるか→ベイジアンの事後分布

②どう行動するか→Neyman-Pearsonの方法による長期的なパフォーマンスの良さ

③証拠の比較→尤度比較法

となるが、あなたはこれら全部を拒否したいかもしれません。私が拒否しているように。
#統計 日本語圏でも同様にRoyallの3つの問いの「戒律」という合理的であろうとすれば到底受け入れることができない考え方を受け入れている人達を容易に発見できます。

ソーバー著『科学と証拠―統計の哲学入門―』とその翻訳者の松王政浩さんが大変な悪影響を与えているように見える。
Read 11 tweets
3 Jan
#Julia言語 個人的にJuliaはPythonにあまり似ていないと思うのですが、Pythonから来たっぽい人のJuliaのコードで気になるのは、

A = []
for ~

push!(A, a)

end

におけるA = []という書き方(Anyの配列になって効率悪化!)と、

sum([f(x) for x in X])

のような書き方。続く
#Julia言語

sum([f(x) for x in X]) だと、すべてのXの要素についてf(x)を計算した結果を配列として保存してから、その配列の要素の和を計算してしまいます。無駄にメモリを消費する。

sum(f(x) for x in X) # generatorを使う

もしくは

sum(f, X)

と書いた方が得だし、コードも短くなります。
#Julia言語

A = []
for i in 1N
push!(A, randn())
end

とするとAnyの配列Aができてしまう。

Anyの配列に格納されたサンプルによるモンテカルロ積分はFloat64の配列の場合と比較すると180倍くらい遅くなった!

A = [] → push!(A, ~) の繰り返しは要注意。

gist.github.com/genkuroki/7cd0…
Read 4 tweets
3 Jan
他にも似たような反応がありますが、小5の算数の教科書にある割合の3つの公式を覚えさせたり、「もとにする量」「比べられる量」という割合の概念を理解するために不要な用語を使うことを児童に強制していたら、教わっている子の将来が暗くなると思います。

教科書通りの教え方がまずい証拠がある。
お勧めしたいのは以下の2冊の本です。
実際に子供に算数を教えていたら楽しんで読めると思います。

amazon.co.jp/dp/4101370311
お母さんは勉強を教えないで
見尾 三保子

このタイトルはひどいし、内容とも一致していません。

内容の大部分は算数や数学の真っ当な教え方の話です。

2冊目紹介に続く
2冊目

amazon.co.jp/dp/4788508435
学力低下をどう克服するか―子どもの目線から考える
2003/3/25
吉田 甫

タイトルを見ても分からないことですが、教科書通りの教え方の対照群と実験的な教え方を、実際に授業をしてみて比較してみた研究結果が書いてあります。分数と割合の教え方を詳しく扱っています。
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!