ThinkStats (19)

P(E|H0) と P(E|Ha) の差について。
PValue という手続きに渡している model1 と model2 という引数が異なる点。
以下な形になっているのですが

    # P(E|H0)
    peh0 = Test(root + '_deltas_cdf',
                actual1, actual2, pool, pool,
                iters, plot=True)

    # P(E|Ha)
    peha = Test(root + '_deltas_ha_cdf',
               actual1, actual2, model1, model2,
               iters)

pool は actual1 と actual2 をそのまま合わせたもの、と言えば良いのかどうか。
根拠は cumulative.MakeTables で以下。

    pool = descriptive.PoolRecords(firsts, others)

pool は survey.Pregnancies.ExtendRecords に first と others を渡したものになっています。

        self.records.extend(records)

リストの連結、なのか。対して model1 と model2 は actual1 と actual2 と同値、がデフォルトになっています。

と、いうことは

最初の peh0 なソレは対象なデータ全てから 1000 件リサンプルしてて、次の peha は first および others なソレから 1000 件リサンプル、ということになるのかどうか。
これがテキストの 99p にある

それぞれの分布から標本を取り出して、両者の組を 1000 組作ります。

ThinkStats より引用
この peha の値が先日実行した結果では 0.516 になってました。

(Mean, Var) of resampled deltas (0.08077549196467845, 0.003143562170784472)
Tails (left, right, total): 0.001 0.515 0.516

そして Ha の事後確率を計算してるのが hypothesis.RunTest 手続きの以下の部分なのかどうか。

    prior = 0.5
    pe = prior*peha + (1-prior)*peh0
    posterior = prior*peha / pe

先日実行した結果としては以下な出力。

Posterior 0.759941089838

どうなるのかな。まず

(+ (* 0.5 0.516) (* 0.5 0.163))
0.3395

で、

(/ (* 0.5 0.516) 0.3395)
0.759941089837997

む、pe は P(E) になるんですね。テキストに出てる方法で P(E) を算出して Ha の事後確率を、事前確率 P(Ha) と効果が本当にあったときに E を観測する確率 P(Ha|E) をかけあわせて、E を観測する確率の P(E) で割ることで算出してるのかどうか。

別途

7 章にある他のソースも確認してみる方向にて。