def estimate_failures(samples, #samples from noisy labelers n_samples=10000, #number of samples to run MCMC for burn=None, #burn-in. Defaults to n_samples/2 thin=10, #thinning rate. Sample every k samples from markov chain alpha_p=1, beta_p=1, #beta parameters for true positive rate alpha_e=1, beta_e=10 #beta parameters for noise rates ): if burn is None: burn = n_samples / 2 S,N = samples.shape p = Beta('p', alpha=alpha_p, beta=beta_p) #prior on true label l = Bernoulli('l', p=p, size=S) e_pos = Beta('e_pos', alpha_e, beta_e, size=N) # error rate if label = 1 e_neg = Beta('e_neg', alpha_e, beta_e, size=N) # error rate if label = 0 @deterministic(plot=False) def noise_rate(l=l, e_pos=e_pos, e_neg=e_neg): #probability that a noisy labeler puts a label 1 return np.outer(l, 1-e_pos) + np.outer(1-l, e_neg) noisy_label = Bernoulli('noisy_label', p=noise_rate, size=samples.shape, value=samples, observed=True) variables = [l, e_pos, e_neg, p, noisy_label, noise_rate] model = MCMC(variables, verbose=3) model.sample(iter=n_samples, burn=burn, thin=thin) model.write_csv('out.csv', ['p', 'e_pos', 'e_neg']) p = np.median(model.trace('p')[:]) e_pos = np.median(model.trace('e_pos')[:],0) e_neg = np.median(model.trace('e_neg')[:],0) return p, e_pos, e_neg
def estimate_failures_from_counts(counts, #samples from noisy labelers n_samples=10000, #number of samples to run MCMC for burn=None, #burn-in. Defaults to n_samples/2 thin=10, #thinning rate. Sample every k samples from markov chain alpha_p=1, beta_p=1, #beta parameters for true positive rate alpha_e=1, beta_e=10 #beta parameters for noise rates ): if burn is None: burn = n_samples / 2 S = counts.sum() N = len(counts.shape) p_label = Beta('p_label', alpha=alpha_p, beta=beta_p) #prior on true label e_pos = Beta('e_pos', alpha_e, beta_e, size=N) # error rate if label = 1 e_neg = Beta('e_neg', alpha_e, beta_e, size=N) # error rate if label = 0 print counts @deterministic(plot=False) def patterns(p_label=p_label, e_pos=e_pos, e_neg=e_neg): #probability that the noisy labelers output pattern p P = np.zeros((2,)*N) for pat in itertools.product([0,1], repeat=N): P[pat] = p_label*np.product([1-e_pos[i] if pat[i]==1 else e_pos[i] for i in xrange(N)]) P[pat] += (1-p_label)*np.product([e_neg[i] if pat[i]==1 else 1-e_neg[i] for i in xrange(N)]) assert np.abs(P.sum() - 1) < 1e-6 return P.ravel() pattern_counts = Multinomial('pattern_counts',n=S, p=patterns, value=counts.ravel(), observed=True) variables = [p_label, e_pos, e_neg, patterns] model = MCMC(variables, verbose=3) model.sample(iter=n_samples, burn=burn, thin=thin) model.write_csv('out.csv', ['p_label', 'e_pos', 'e_neg']) p = np.median(model.trace('p_label')[:]) e_pos = np.median(model.trace('e_pos')[:],0) e_neg = np.median(model.trace('e_neg')[:],0) return p, e_pos, e_neg
import pmodel import pymc import networkx as nx import matplotlib.pyplot as plt from pymc import MCMC from pymc.Matplot import plot M = MCMC(pmodel) M.sample(iter=300000, burn=250, thin=10) #plot(M, path='./plots') M.write_csv('out.csv') #pathways = model.pathways #traces = {} #for p in pathways: # traces[p] = M.trace(p)[:] #plt.hist(traces[pathways[0]], bins='auto') #plt.show() #t = M.trace(pathways[0])[:] #g = pymc.graph.graph(pymc.Model(model), path='.') #g.write('model.dot') #G = nx.drawing.nx_agraph.read_dot('model.dot') #nx.draw(G) #plt.draw() #hist(M.trace('late_mean')[:]) #show()
# PyMC implementation of Panel 6.4 from Royle & Dorazio (2008) pp. 217 # MA MacNeil - 04.03.14 import Mbht import sys import os import pdb from pymc import MCMC, BinaryMetropolis, Metropolis, AdaptiveMetropolis from pymc import Matplot as mp import pdb M = MCMC(Mbht) #M = MCMC(models,db='sqlite',dbname='xx_dbase') xex = 6 M.isample(10**xex, 10**xex-10**(xex-1), thin=10**(xex-4), verbose=2) #M.isample(100000, 80000, thin=10, verbose=2) try: os.mkdir('Outputs') except OSError: pass os.chdir('Outputs') M.write_csv("zz_results.csv") mp.plot(M)
import model import pymc from pymc import MCMC M = MCMC(model) M.sample(iter=250, burn=50, thin=10) #plot(M, path='./plots') M.write_csv('quick.csv') #pathways = model.pathways #traces = {} #for p in pathways: # traces[p] = M.trace(p)[:] #plt.hist(traces[pathways[0]], bins='auto') #plt.show() #t = M.trace(pathways[0])[:] #g = pymc.graph.graph(pymc.Model(model), path='.') #g.write('model.dot') #G = nx.drawing.nx_agraph.read_dot('model.dot') #nx.draw(G) #plt.draw() #hist(M.trace('late_mean')[:]) #show()
# Run model # # PyMC implementation of Smith et al. (2012) Ecology: http://www.esajournals.org/doi/abs/10.1890/12-0460.1 # # Created by M. Aaron MacNeil on 20/07/12. # import snapper from pymc import MCMC, BinaryMetropolis, Metropolis, AdaptiveMetropolis from pymc import Matplot as mp M = MCMC(snapper) xex = 5 M.isample(10**xex, 10**xex-10**(xex-1), thin=100, verbose=2) M.write_csv("results.csv") mp.plot(M)
M = MCMC(model3) #MAP = pymc.MAP(model3) #MAP.fit() def get_coeffs(map_): return [{ str(v): v.value } for v in map_.variables if str(v).startswith('p') or str(v).startswith('b') or str(v).startswith('e')] #print get_coeffs(MAP) M.sample(iter=10000, burn=250, thin=10) #plot(M, path='./plots') M.write_csv('shortout.csv') #pathways = model.pathways #traces = {} #for p in pathways: # traces[p] = M.trace(p)[:] #plt.hist(traces[pathways[0]], bins='auto') #plt.show() #t = M.trace(pathways[0])[:] #import networkx as nx g = pymc.graph.graph(pymc.Model(model3), path='.') g.write_png('model.png') #G = nx.drawing.nx_agraph.read_dot('model.dot') #nx.draw(G) #plt.show()
import model import pymc from pymc import MCMC M = MCMC(model) for i in range(5): M.sample(iter=250, burn=50, thin=10) M.write_csv('quick/' + str(i) + '.csv')