如何在非二进制设置中编写硬币翻转实验?

时间:2019-07-14 21:30:48

标签: python-3.x bayesian

在我正在研究的模型中,恋爱关系中的一个人对这种关系的价值有信任感,即$ \ hat {theta} $。他的先验是统一的,但是每个时期他都观察到一个从真实值$ theta $的正态分布中采样的值。

我对python非常陌生,因此我需要一些帮助。我已经看到了许多掷硬币的例子(我在Jupyter中运行的“针对黑客的贝叶斯统计”中报告了以下一个例子),但未能使其适应我的需求。当我寻找更高级的东西时,它们倾向于直接进行回归和更高级的分析。

%matplotlib inline
from IPython.core.pylabtools import figsize
import numpy as np
from matplotlib import pyplot as plt
figsize(11, 9)

import scipy.stats as stats

dist = stats.beta
n_trials = [0, 1, 2, 3, 4, 5, 8, 15, 50, 500]
data = stats.bernoulli.rvs(0.5, size=n_trials[-1])
x = np.linspace(0, 1, 100)

# For the already prepared, I'm using Binomial's conj. prior.
for k, N in enumerate(n_trials):
    sx = plt.subplot(len(n_trials)/2, 2, k+1)
    plt.xlabel("$p$, probability of heads") \
        if k in [0, len(n_trials)-1] else None
    plt.setp(sx.get_yticklabels(), visible=False)
    heads = data[:N].sum()
    y = dist.pdf(x, 1 + heads, 1 + N - heads)
    plt.plot(x, y, label="observe %d tosses,\n %d heads" % (N, heads))
    plt.fill_between(x, 0, y, color="#348ABD", alpha=0.4)
    plt.vlines(0.5, 0, 4, color="k", linestyles="--", lw=1)

    leg = plt.legend()
    leg.get_frame().set_alpha(0.4)
    plt.autoscale(tight=True)


plt.suptitle("Bayesian updating of posterior probabilities",
             y=1.02,
             fontsize=14)

plt.tight_layout()

如何将其应用于我的设置?我的目的是估计和存储均值/中位数和标准差。对于每个更新的先验。任何帮助都会很棒。

Fabio

0 个答案:

没有答案