import pymc as mc import pandas import numpy as np cpus = pandas.read_csv('cpus.csv') # from R's MASS package - available in gist c212194ecbd2ee050192 cpus.head() with mc.Model() as model: mc.glm.glm('perf ~ syct + mmin + mmax + cach + chmin + chmax', cpus) trace = mc.sample(200, mc.NUTS()) class Laplace(mc.glm.families.Family): sm_family = mc.glm.families.Gaussian # TODO: check into the correct sm_family link = mc.glm.families.Identity likelihood = mc.Laplace parent = 'mu' priors = {'b': ('sigma', mc.Uniform.dist(0, 100))} with mc.Model() as model_laplace: mc.glm.glm('perf ~ syct + mmin + mmax + cach + chmin + chmax', cpus, family=Laplace()) trace_laplace = mc.sample(200, mc.NUTS()) # note: quite slow, so only 200 samples for now for v in trace.varnames: print '{v}:\n\tNormal:\t{normal}\n\tLaplace:\t{laplace}'.format(v=v, normal=np.mean(trace.samples[v].vals), laplace=np.mean(trace_laplace.samples[v].vals))