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))