pymc3: иерархическая модель с множеством наблюдаемых переменных

У меня есть простая иерархическая модель с множеством людей, для которых у меня есть небольшие выборки из нормального распределения. Средние значения этих распределений также подчиняются нормальному распределению.

import numpy as np

n_individuals = 200
points_per_individual = 10
means = np.random.normal(30, 12, n_individuals)
y = np.random.normal(means, 1, (points_per_individual, n_individuals))

Я хочу использовать PyMC3 для вычисления параметров модели из образца.

import pymc3 as pm
import matplotlib.pyplot as plt

model = pm.Model()
with model:
    model_means = pm.Normal('model_means', mu=35, sd=15)

    y_obs = pm.Normal('y_obs', mu=model_means, sd=1, shape=n_individuals, observed=y)

    trace = pm.sample(1000)

pm.traceplot(trace[100:], vars=['model_means'])
plt.show()

образцы mcmc

Я ожидал, что апостериорная часть model_means будет похожа на мое первоначальное распределение средств. Но похоже, что она сводится к 30 среднему значению. Как мне восстановить исходное стандартное отклонение средних (12 в моем примере) из модели pymc3?


person DanT    schedule 11.11.2015    source источник


Ответы (1)


Этот вопрос заставил меня бороться с концепциями PyMC3.

Мне нужны n_individuals наблюдаемые случайные величины для моделирования y и n_individual стохастических случайных величин для моделирования means. Им также нужны приоритеты hyper_mean и hyper_sigma для их параметров. sigmas - это априор для стандартного отклонения y.

import matplotlib.pyplot as plt

model = pm.Model()
with model:
    hyper_mean = pm.Normal('hyper_mean', mu=0, sd=100)
    hyper_sigma = pm.HalfNormal('hyper_sigma', sd=3)

    means = pm.Normal('means', mu=hyper_mean, sd=hyper_sigma, shape=n_individuals)
    sigmas = pm.HalfNormal('sigmas', sd=100)

    y = pm.Normal('y', mu=means, sd=sigmas, observed=y)

    trace = pm.sample(10000)

pm.traceplot(trace[100:], vars=['hyper_mean', 'hyper_sigma', 'means', 'sigmas'])
plt.show()

posteriors

person DanT    schedule 13.11.2015