#!/usr/bin/env python # coding: utf-8 # In[1]: get_ipython().run_line_magic('load_ext', 'autoreload') get_ipython().run_line_magic('autoreload', '2') # In[2]: get_ipython().run_line_magic('matplotlib', 'inline') import pymc3 as pm import arviz as az import numpy as np import seaborn as sns # In[3]: t_data = pm.StudentT.dist(nu=5).random(size=1000) sns.distplot(t_data, kde=False); # Using the Student-T directly # In[4]: with pm.Model() as m0: ν = pm.HalfNormal('ν', sigma=5) t = pm.StudentT('t', nu=ν, observed=t_data) trace0 = pm.sample(1000, tune=2000, cores=2) # In[5]: az.plot_trace(trace0); # In[6]: with pm.Model() as m1: ν = pm.HalfNormal('ν', sigma=5) σ2 = pm.InverseGamma('σ2', alpha=ν/2, beta=ν/2, shape=len(t_data)) t = pm.Normal('t', sigma=pm.math.sqrt(σ2), observed=t_data) trace1 = pm.sample(1000, tune=1000, cores=2) # In[7]: az.plot_trace(trace1, var_names=['ν']);