#統計 ものすごく基本的な話題

サンプルサイズNで割る標本分散とN-1で割る不偏分散を比較してみました。

#Julia言語
nbviewer.jupyter.org/gist/genkuroki…

①不偏分散の期待値は真の分散に一致し、標本分散の期待値のずれの大きさは1/Nに比例する。

②真の値との誤差の二乗の期待値は不偏分散の方が大きい。
#統計 サンプル達は標準正規分布で生成しています。

横軸はサンプルサイズNの逆数。右に行くほどサンプルサイズが小さくなる。

不偏分散は期待値は真の値に一致するのですが、二乗誤差は標本分散よりも大きくなります。

不偏分散が標本分散よりも一方的に優れているという思い込みは誤りです。
#統計 たとえば、あなたと私でランダムに生成されたサンプルから分散を推定するゲームをやったとします。

真の値との差の二乗が大きい方が小さい方に差に比例した罰金を支払うというルールなら、不偏分散を推定法として採用した人は負け組になってしまいます。
#統計 exactな公式もあるのですが、サンプルサイズN=10の場合に標準正規分布のサンプルの標本分散と不偏分散の分布をモンテカルロ法でプロットしてみました。続く
#統計 続き

1つ前のツイートの添付画像を見ればわかるように、不偏分散も標本分散も真の値よりも小さくなる確率の方が高い。

真の値よりもずっと大きな値になることもあるので期待値が真の値に近くなるという仕組み。

不偏分散ではその仕組みが強化されて、期待値が真の値に一致することになる。
#統計 続き

二乗誤差を小さくするという立場から見ると、不偏分散は真の値よりもずっと大きくなる確率を増やし過ぎているので、不偏分散の期待二乗誤差は標本分散よりも大きくなります。
#統計 同様のことは、ジャックナイフ法によってバイアスを削減した場合にも起こります。

#Julia言語
nbviewer.jupyter.org/gist/genkuroki…

添付画像は、補正していない正規分布の尖度3を

G = (標本の4乗平均)/(標本の2乗平均)²

で推定した場合と

J = そのジャックナイフ法による補正

で推定した場合の比較。
#統計 G=g(X)=(標本Xの「尖度」) の期待値は真の値よりも小さくなり、ジャックナイフ法による補正J=jackknife(g, X)の期待値は真の値によく一致。

しかし、ジャックナイフ法で補正した側の期待二乗誤差は非常に大きくなります。

この場合も、不偏性を優先すると期待二乗誤差が大きくなってしまった。
#統計 サンプルサイズはN=10

添付画像はGとJの分布のプロットです。

橙色のJの分布の右側のすそが太くなっていることに注目。そこが太くなっているおかげで、期待値が真の値に近付いているのですが、期待二乗誤差は大きくなってしまっています。
#統計 大体において、不偏性を優先すると、推定の誤差は大きくなってしう傾向があります。

"unbiased" という文字列を見たら、「誤差は大きくなってしまうかもしれない」と疑った方が安全なようです。

この辺は統計学入門でも強調されてしかるべきことだと思いました。
#統計 不偏性を犠牲にすることによって、誤差を小さくする話で有名なのは、Stein(-James)推定の話です。

その話はリッジ正則化の特別な場合になっています。

事前分布でパラメータの動きを適当に制限した方が過学習を抑制して予測精度が上がるかもしれない。今では常識的な技術の1つです。
#統計 私によるStein推定のself-containedな解説が以下の場所にあります。

nbviewer.jupyter.org/github/genkuro…
Ridge正則化とStein推定量

#Julia言語 によるシミュレーションのコード付き。
#統計 まとめ

* 不偏性を優先すると誤差が増えるかもしれない。

* 不偏分散は標本分散よりも期待二乗誤差が大きい。

* 尖度の推定においても、ジャックナイフ法によるバイアスの抑制は期待二乗誤差を悪化させる。

* 不偏性を犠牲にして予測精度を上げる方法が現代では常識になっている。
#統計 「不偏性」は座標依存。例えば分散の推定法として不偏であっても標準偏差の推定法としては不偏にならない。

不偏性は座標にも依存するものすごく強い条件。ほとんどすべての推定法は不偏ではない。

だから不偏という制限を付けて良い推定法を探すと大部分の推定法を無視することになる。
#統計 ところが(少なくとも私にとってはとても)不思議なことに、統計学の文献を見ると、不偏性の条件に強くこだわったり、良い推定法を探すときに必然性のない不偏性の条件をわざわざ課していたりする。あれは全く理解できない。

この点について統計学には何かひどい黒歴史があるのだろうか?

• • •

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

18 Mar
#超算数 【「1セットあたりの量」と「○セット」という概念の定着を目的にあえて縛りを設けていると考えれば納得.】とか言うお馬鹿さん達が継続して出て来ることが昔からよく知られています。

かけ算順序固定強制指導が実際に有害であることの間接的な証拠とみなせると思う。続く
#超算数 現実の子供に関しては、同じ数を含む集まりが何セットあるかの状況把握と掛け算順序マスターであることは、現場の教師の調査で関係ないことが分かっています。

そして、その教師は、関係ないことを認めた上で、掛け算順序強制指導を強化しなければいけないと主張しています。

これが現実。
#超算数 掛け算順序が逆なら誤りとみなしたり、掛け算順序が逆なら理解していないとみなす行為は、算数教育の世界では100年以上の伝統を持っています。

これだけの伝統があると、掛け算順序指導が社会的に否定されると困る人達が沢山いることもよく分かる。

しかし、被害者は次世代を担う子供達。
Read 10 tweets
18 Mar
#Julia言語 【one(x)は多くの場合にxと同じ型の1になる】

公式ドキュメント docs.julialang.org/en/v1/base/num… にもあるようにone(x)がxと違う型になる場合があります。

one(x)はxの型に関する乗法的な1になり、加法的な(次元を持つ)1が欲しければoneunit(x)を使う。

環上の加群を思い浮かべるとよいです。
#Julia言語 数学の習慣では、乗法の単位元を1と書き、加法の単位元を0と書くことが多い。

Juliaでは、xと同じ型もしくは型xに関する乗法的な単位元をone(x)と書き、加法的な単位元をzeto(x)と書く習慣。

単位としての加法的な1はoneunit(x)と書かれる。

数学を知っていれば納得し易い。
#Julia言語 例えば、Aが数を成分とする正方行列のとき、Juliaにおいてone(A)は単位行列になってくれます。

one(x)という書き方を知っていれば「どの型の乗法的1なのか」を型を明示せずに型の伝搬スタイルで記述できるわけですが。

数学でも「これはxが含まれる環の1です」などと言える。これと同じ。
Read 16 tweets
17 Mar
#Julia言語 Juliaの型について十分な理解がない段階でJuliaで型を明示的に書くと、大抵の場合ろくなことにならないし(バグの原因になる)、理解が進むと、型を明示的に書いた方が良いという考え方自体が技術的に劣っている考え方だと気付きます。

Juliaでは型を明示せずに、型の伝搬で考える。続く
#Julia言語 私自身がやらかした失敗の例

① function f(x::Vector{Float64}) ~ end

のように引数の型を明示した函数を定義し、その函数を使ったプログラムが正常に動作していた。

② @ viewマクロを使った最適化を行った。

③その途端に正常に動いていたプログラムが動かなくなった!😭

続く
#Julia言語 その原因は

function f(x::Vector{Float64}) ~ end

と函数の引数の型を Vector{Float64} に明示的に宣言してしまっていたことが原因です。その「@ viewによる最適化で動かなくなった」という問題は

function f(x) ~ end

に書き直せば解決しました。続く
Read 42 tweets
16 Mar
#Julia言語 Julia言語で10行

nbviewer.jupyter.org/gist/genkuroki…

(1/5) 二項分布モデル内の標本分布で測った95%信頼区間にモデルのパラメーター値が含まれる確率のプロット。95%以上になる。ほとんどのパラメーターで95%より真に大きい。
#Julia言語

nbviewer.jupyter.org/gist/genkuroki…

(2/5) 二項分布モデルの95%信頼区間 [CI_min, CI_max] を平面上の座標 (CI_min, CI_max) にプロット。丸の大きさはモデル内でその信頼区間が生じる確率の大きさに比例。赤の十字の左上側の領域ではパラメータの真の値が信頼区間に含まれている。
#Julia言語

nbviewer.jupyter.org/gist/genkuroki…

(3/5) 3次元のランダムウォーク
Read 54 tweets
16 Mar
#Julia言語

using Statistics, StatsBase
f(x) = (mean(x), geomean(x), median(x))
[∘(fill(f, n)...)((1, 1, 2, 3, 5)) for n in 30:35]

6-element Vector{~}:

(2.0890579497368598, 2.0890579497368598, 2.0890579497368598)


gist.github.com/genkuroki/e69a…

xkcd.com/2435/
#Julia言語

∘(fill(f, 4)...)((1, 1, 2, 3, 5))



f∘f∘f∘f(1, 1, 2, 3, 5)

と同じで、∘は函数の合成なので、

f(f(f(f(1, 1, 2, 3, 5))))

と同じ意味になる。

函数fのn個の合成は

∘(fill(f, n)...)

と書ける。Juliaを超高級電卓として使うときにはこれを知っているとちょっと便利。
#Julia言語 による解答例のスクショ

もとの問題文の数学的内容がほとんどそのままJuliaのコードに翻訳されていることがわかる。

難しいのはn個の函数fの合成が ∘(fill(f, n)...) と書けること。

φ(fill(f, 3)...)はφ(f, f, f) と同じ意味に、∘(f, g, h)(x,y)はf(g(h(x,y)))と同じ意味になる。
Read 6 tweets
16 Mar
NASAでは普通に #Julia言語 を使っているようですが、日本ではどうなっているんですかね?

Juliaの良い点をNASAがどのように活かしているか分かる動画


Modeling Spacecraft Separation Dynamics in Julia
Jonathan Diegelman
#Julia言語 あらためてNASA JuliaLangでググったら、こんな素敵な動画も見つかりました。


The Julia Language 1.0 Ephemeris and Physical Constants Reader for Solar System Bodies

github.com/JuliaAstro/JPL…
#Julia言語 NASA関連

Pluto.jl
DifferentialEquations.jl
Optim.jl
GlobalSensitivity.jl
MonteCarloMeaurements.jl
ComponentArrays.jl
Unitful.jl

などを使っているみたい。
Read 15 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!