ThinkStats (10)

演習問題 3-1 はズルします。多分今後もずっとズルするはず。
ええと中身なんですが、学部長が持ってるデータで PMF を作って

    # form the pmf
    pmf = Pmf.MakePmfFromDict(d, 'actual')
    print 'mean', pmf.Mean()
    print 'var', pmf.Var()

その後、以下な手続きを呼び出しています。

    # compute the biased pmf
    biased_pmf = BiasPmf(pmf, 'observed')

何が Bias なのか、というと以下。

    new_pmf = pmf.Copy()
    new_pmf.name = name

    for x, p in pmf.Items():
        if invert:
            new_pmf.Mult(x, 1.0/x)
        else:
            new_pmf.Mult(x, x)

ちなみに invert は以下な形で与えられててデフォは False

def BiasPmf(pmf, name, invert=False):

Pmf.Mult の定義の確認が必要なのか。
その前にそもそもな

    # form the pmf
    pmf = Pmf.MakePmfFromDict(d, 'actual')

を確認。手続きてきには以下。

    pmf = Pmf(d, name)
    pmf.Normalize()
    return pmf

そもそも PMF なオブジェクト (というかスーパークラスな _DictWrapper) は属性として辞書を持ってるのでこれで良いのか。

class _DictWrapper(object):
    """An object that contains a dictionary."""

    def __init__(self, d=None, name=''):
        # if d is provided, use it; otherwise make a new dict
        if d == None:
            d = {}
        self.d = d
        self.name = name

で、話を元に戻しますと、

            new_pmf.Mult(x, x)

Pmf#Mult 手続きは

    def Mult(self, x, factor):
        self.d[x] = self.d.get(x, 0) * factor

な定義になってて key, value な key の value に key を掛けてるんですね。確か key は学生数の_代表値 (?)_なんですが、これを_観測値_としているのかな。

つうか

この問題がどんな問題を指摘してどうそれを解決するかを提示してるかが分からんorz
そもそも的に統計な学問の理解が全然足りてない、という事なのかどうか。

オーバーサンプリング問題

クラスの数に人数掛けてそれをクラスの数にしてるのか。これが_観測値_となるのは何故なのか誰か教えてくださひorz
あ、クラス規模の分布を求めて云々、というあたりなのか。でも代替手段として示されている_学生の無作為な標本を選び、彼らのクラスの学生数を尋ねること_というのが (ry
もしかしてそれが BiasPmf の

            new_pmf.Mult(x, x)

なの。ははー。
なんとなくクイズ的なソレだな、という思いですね。そーゆー意味では次の問題もこのまんまニラんでみたいと思います。