ThinkStats (15)
連続分布の章、面白いですね。練習問題も確認してみます。
練習問題 4-1
ええと、平均が 32.6 の指数分布ということは λ は (/ 1 32.6) という理解で良いのかな。ええと、
[random.expovariate(1/32.6) for i in range(44)]
で CDF を作って云々、なのかな。あとは myplot を使うのであれば以下、とありますね。
myplot.Cdf(cdf, complement=True, xscale='linear', yscale='log')
と、思ったら 4 章なのか。
ぬぬ
諸々なファイルをコピィして試してみたんですが
>>> import random >>> import Cdf >>> import myplot >>> cdf = Cdf.MakeCdfFromList([random.expovariate(1/32.6) for i in range(44)]) >>> myplot.Cdf(cdf, complement=True, xscale='linear', yscale='log') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "myplot.py", line 184, in Cdf line = pyplot.plot(xs, ps, label=cdf.name, **options) File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2467, in plot ret = ax.plot(*args, **kwargs) File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3893, in plot for line in self._get_lines(*args, **kwargs): File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 322, in _grab_next_args for seg in self._plot_args(remaining, kwargs): File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 310, in _plot_args seg = func(x[:,j%ncx], y[:,j%ncy], kw, kwargs) File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 260, in _makeline self.set_lineprops(seg, **kwargs) File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 201, in set_lineprops raise TypeError, 'There is no line property "%s"'%key TypeError: There is no line property "xscale"
あら、何これ。ちなみに引数略すると以下な戻りな件。
>>> myplot.Cdf(cdf, complement=True) {'xscale': 'linear', 'yscale': 'linear'}
ソース見てみるに以下で良いのかな。つうかこのまま Show すれば良かったらしい。
>>> myplot.Cdf(cdf, transform='exponential') {'xscale': 'linear', 'yscale': 'log'} >>> myplot.Show()
標本を約 10 倍に増やしてみる
これ、直線にならんな。引数が微妙なのかどうか。ええと、普通に描画すると指数分布なグラフが出力されますね。
>>> myplot.Cdf(cdf) {'xscale': 'linear', 'yscale': 'linear'} >>> myplot.Show()
ちなみに手続き定義を見るに transform='exponential' な場合は以下がアレなのか。
xs, ps = cdf.Render() scale = dict(xscale='linear', yscale='linear') if transform == 'exponential': complement = True scale['yscale'] = 'log' if complement: ps = [1.0-p for p in ps] line = pyplot.plot(xs, ps, label=cdf.name, **options) return scale
んーと、complement な分岐を見るに -λ な直線にはならない記述ですね。あら、でも y 軸を対数に云々、って記述があるなぁ。むむむ。