#Julia言語 1万人に一人あたり100万円配って、その後ランダムに誰かから1万円を取り上げて(破産していたら取るのを諦める)、別の誰かに配ることを繰り返したときの、保有金額の分布の推移のアニメーション。

分布の収束先は不平等な指数分布。

これは「税額一定」の場合。

github.com/genkuroki/publ…
#Julia言語 不平等な指数分布になった後に、今度はランダムに誰かを選んで保有金額の5%の税金を徴収して別の誰かに配ることを繰り返すとこうなる。

分布の収束先はかなり平等的なガンマ分布。

証明は知らない。誰か教えて!(笑)

(((わざと真剣に考えていない)))

github.com/genkuroki/publ…
#Julia言語 ここからが真に面白い話になる。

さて、ついさっき税額ではなく、税率を一定にしたランダムな富の分配で平等に近付けることができることを紹介した。

税率は5%だった。

問題:税率を50%に上げるとさらに平等になるか?
#Julia言語 初期条件が「全員100万円ずつ」で「税率50%」の場合。収束先は不平等な指数分布になるっぽい。(証明は知らない。)

税率一定のランダム分配の繰り返しでは、各ステップでの税率が小さければ小さいほど収束先の分布は平等(デルタ分布)に近付く。
#Julia言語 nが大きなとき、条件

x_i ≥0 (i=1,2,...,n)
(x_1 + … + x_n)/n ≤ a

で定義されるn次元領域内で点(x_1,...,x_n)をランダムウォークさせると、x_1,...,x_n達の分布は平均aの指数分布に近付くことを、Sanovの定理を使って示せる。

続く
#Julia言語 さらに、福祉政策の条件(平均効用に下限を設ける)

(log x_1 + … + log x_n)/n ≥ c

を課して動ける範囲を制限すると、ランダムウォークで分布がガンマ分布に近付くことを示せる。

注意: これは「税率一定」の場合の話とは関係ない。
#数楽 で、現実の資産(ストック)の分布を見ると、指数分布のような形をしており、「各人が保有する資産はランダムに運で決まっている」という仮説と矛盾しない結果が得られる。

資産の分布に「福祉政策」の影響があるようには見えない。
#数楽 それに対して、賃金(フロー)の分布はガンマ分布のような形をしている。賃金の分布については諸説あるが、賃金の分布が指数分布ではなく、賃金の分布には何らかの福祉政策が効いているようにも見える。

以上の話題はツイッターでは数え切れないくらい繰り返している。
#Julia言語 このスレッドで使ったプログラムは以下の場所で公開されている。

ファイル名に誤植があるがそのままにしておく。

❌富もランダム分配
⭕️富のランダム分配

も=の
m=n

github.com/genkuroki/publ…
#Julia言語 この話では、以下の2つの問題を分けて考えた方がよいです。

①富のランダム再分配の過程
②その結果得られる富の分布

以下のリンク先の設定での、保有金額の分布②は

* 各人の保有金額は0以上
* 全体での保有金額に平均値は100万円

という条件を満たしています。実はこの2つが本質的。
#Julia言語 その条件を式で書くと

* x_i ≥ 0 (i=1,2,...,n)
* (x_1 + … + x_n)/n = a = 100万円

n=2のとき、このような (x_1, x_2) 全体の集合は点(2a,0)と点(0,2a)を結ぶ線分になります。

n=3の場合には点(3a,0,0),(0,3a,0),(0,0,3a)を頂点とする正三角形になる。

ここまでは中学高校レベル。
#数楽 条件

* x_i ≥ 0 (i=1,2,...,n)
* (x_1 + … + x_n)/n = a

を満たす点(x_1,...,x_n)全体で作られる図形を数学者達は「n-1次元単体(simplex)」と呼びます。

富のランダム再分配の過程は、このn-1次元単体上のランダムウォークになっています。
#数楽 単体上のランダムウォーク=富のランダム再分配を十分に長い時間行った後の保有金額の分布を見ることは、単体上の点をランダムに選ぶことと一致。

富のランダム再分配を「税額一定」で行った場合は、近似的に、単体上の一様分布にしたがって単体上の点をランダムに選ぶことに相当しています。
#数楽 以上の話によって、仮に、富のランダム再分配の過程①について分かったとするならば、残された問題は

②nが大きなときのn-1次元単体上の一様分布はどのような分布か?

だけになります。これもコンピュータで計算すると楽しいです。
#数楽 プログラミング好きの人達への問題:

* x_i ≥ 0 (i=1,...,n)
* (x_1+…+x_n)/n = a

を満たす (x_1,…,x_n) を単体上の一様分布に従ってランダムに生成する函数を書け。

#Julia言語 に慣れたユーザーならば事前に準備した配列に書き込むゼロアロケーションの函数を書け。
#数楽 数学的に与えられた確率分布に従って生成される乱数のコードを書くことは、現代における基本教養の1つだと言ってよいでしょう。

MCMC法は、確率分布に密度函数の未知の定数倍の対数が与えられたときに、その確率分布に従う乱数列を生成する方法です。(ベイズ統計とは独立に基本的!)
#数楽 私が書いた #Julia言語 で「単体上の一様分布乱数」を生成する函数は

github.com/genkuroki/publ…

にあります。その函数で生成した x_1,...,x_n のヒストグラムは添付画像のとおり。指数分布できれいに近似されています。
#数楽 この話は、「高次元の球体の体積のほとんどは表面付近の皮の部分の体積になっている」という話と関係しています。

高次元の単体(我々が扱っているケースでは正三角形や正四面体の高次元版)は境界(表面)が尖っているので、球体とは状況が違うのですが、考え方は共通しています。
#数楽 実際にやってみるべき計算は、

1. n-1次元単体上の一様分布を考える。

2. その分布を (x_1, x_2, ..., x_n) を x_1 に射影して得られる1次元の分布を求める。

3. x_1の分布のn→∞での収束先を計算する。

この手順で指数分布が得られます。

初めてやる人はそれなりに大変かもしれません。
#数楽

n-1次元単体上の一様分布を x_1 に射影して得られる1次元の分布を求めることは、n-1次元単体全体の 0 ≤ x_1 ≤ y を満たす部分の面積の全体での割合を求めることに等しいです。

n=2,3の線分と正三角形の易しい場合を図を描いてちょっとやってみて、それを高次元に一般化すればよいです。
#数楽 ちょっと考えてみればすぐに分かることですが、

 k次元の互いに相似な図形の面積や体積は
 長さのk乗に比例する

という普遍的事実にすべての計算が帰着されます。

0≤x_1≤y ではなく、尖っている側からの na-y≤x_1≤na を考えた方が楽かも。高次元での「三角錐」の体積の話でしかない。

• • •

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

14 Sep
#Julia言語 『数値計算の常識』という有名な本があって第5章のタイトルが「逆行列よさようなら」です。

Juliaでは計画行列Xによるバックスラッシュ演算

β̂ = X \ y

の一発で最小二乗法も計算できます。

github.com/genkuroki/publ…
#数楽 Xが縦長の行列で、β, y が縦ベクトルのときの、βの成分に関する連立一次方程式

Xβ = y

は一般に解を持たないのですが、Xβとyのユークリッド距離を最小にするようなβをβ̂と書いて、「解」とみなすのが最小二乗法の考え方です。その「解」を

β̂ = X \ y

と書くことは記号法的に自然です。
#Julia言語 Juliaがバックスラッシュ二項演算子で最小二乗法も可能にしていることの背景には以上のような数学が隠れています。
Read 13 tweets
13 Sep
#統計 #数楽 この短い動画も非常にためになるし楽しめる。

「変分ベイズ」「変分推論」のように呼ばれる方法は、計算が大変な真の分布φ(w)を特別な形の分布ψ(w)でφ(w)から最も出て来やすいもので近似する方法。続く
#統計 Kullback-Leibler情報量 D(ψ||φ) は、Sanovの定理より、「分布φのサンプルの分布として分布ψに近いものの出て来やすさ」を意味する。

もしも分布ψの台が分布φの台よりも真に大きいならば、そのはみ出した部分の値はφから出て来ないので、D(ψ||φ) = ∞ となる。

続く
#統計 D(ψ||φ) < ∞ ならばψの台はφの台に含まれる。

固定されたφに対して、特別な形のψを動かして、D(ψ||φ) を最小化すると(変分推論!)、分布ψは分布φよりも狭い部分に集中した感じの分布になり易い。

以下のリンク先の場合には実際に概ねそうなっているように見える。
Read 16 tweets
12 Sep
素晴らしいスレッドだったので大量にRTしました。

しかし、最後に「立式」という聴き慣れない有害で特殊な意味を持つ算数教育用語を使ってしまっている点は、人権問題に発展するかもしれないので注意が必要だと思いました。😝

「式  答え 」のスタイルそのものが子供を悪しき枠にはめている。
多くの人が誤解していることですが、「立式」という用語は国語辞典にも載っていない用語で、単に「式を作る」というようなニュートラルな意味を持つ無害な用語ではありません。

子供を害するちょー算数の中核部分と関係している極めて有害な用語なので取り扱い注意です。
「立式」という特殊な用語が歴史的にどのように使われていたかについては、以下のスレッドを参照。

「立式の意図」を以下のリンク先の意味で子供に問う行為は、人権問題に発展する恐れが十分にあります。😝
Read 6 tweets
12 Sep
東京大学出版会の『統計学入門』を運悪く「真面目」に読んでしまい、それに従って、「確率ではなく、割合だ」というスタイルで「信頼区間警察」をやっている側が狼藉之義也の「ヒャッハー」達だという問題。

へたをするとこれが高校数学にも伝搬する恐れがある。
最近の例では

tjo.hatenablog.com/entry/2021/07/…
渋谷駅前で働くデータサイエンティストのブログ
2021-07-16
95%信頼区間の「95%」の意味

がひどい。

教科書に書いてあるという事実は正しいことの証拠にはなりません。
#統計 正しい考え方

* 信頼区間の計算では通常パラメータを持つモデル(例えば正規分布モデルや二項分布モデルなど)が使われる。

* 95%信頼区間の95%はそのモデル内での標本分布で測った確率(の近似値)になる。

* 使用したモデルが現実において妥当でなければ、信頼区間は信頼できないものになる。
Read 22 tweets
12 Sep
一般に印象操作に一所懸命な変な人の意見は適当にスルーした方がよいと思いました。
一般に、難しいことを理解できない人たちで周囲を固めている人の観測範囲内でそれが受け入れられていないことと、それが実際に有用であるか否かは無関係。
大学で統計学が専門じゃないのに統計学の講義を受け持つことになった人にとって、カイヤンさんが説明してくれていることの多くが参考になると思います。

ついつい「流行っている」という理由でベイズ統計の話題に触れるときに、注意するべきことがあります。「主義」に関わる話題は本当に要注意。
Read 6 tweets
11 Sep
#Julia言語

色々よく分かっていないあいだは、内部コンストラクタを定義しない方が無難だという話。

添付画像は

github.com/genkuroki/publ…

より。これの1つ前のコードでは赤枠部分の外部コンストラクタしか定義されていなかった。青枠部分は後で追加された。

続く
#Julia言語

struct Foo{T}
a::T
b::T
Foo(a::T) where T = new{T}(a, T(2)a)
end

と内部コンストラクタFoo(a)を定義すると、これ以外にFoo型のオブジェクトを作る方法が失われ、フィールドbは常にaの2倍になることになります。

この仕様を変更するにはコードの変更が必要になる。
#Julia言語 一方、

struct Bar{T}
a::T
b::T
end
Bar(a::T) where T = Bar{T}(a, T(2)a)

と内部コンストラクタを定義せずに、外部コンストラクタBar(a)を定義しているなら、デフォルトで定義されているBar(a, b)を使ってbをaの2倍以外の値に設定できます。
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!

:(