def hmm(): states = [] states.append(stocPy.stocPrim("categorical", (sProbs,), obs=True, part=pind)) for i in range(1,17): #print states states.append(stocPy.stocPrim("categorical", (tProbs[states[i-1]],), obs=True, part=pind)) stocPy.normal(eMeans[states[i]], 1, cond=obs[i-1])
def marsaglia(mean, var): x = stocPy.stocPrim("uniform", (-1, 2), part=pind) #ss params are start and length of interval y = stocPy.stocPrim("uniform", (-1, 2), part=pind) s = x*x + y*y #print sampleInd, depth, x, y, s if s < 1: return mean + (math.sqrt(var) * (x * math.sqrt(-2 * (math.log(s) / s)))) else: return marsaglia(mean, var)
def dpmLazy(): crp = stocPy.crp(1.72) sds = {} ms = {} for i in range(len(obs)): c = crp(i) if c not in ms: sds[c] = math.sqrt(10 * stocPy.stocPrim("invgamma", (1, 0, 10), part=4)) ms[c] = stocPy.stocPrim("normal", (0, sds[c]), part=4) stocPy.normal(ms[c], sds[c], obs[i]) obsLens.append(len(ms))
def dpmEager(): crp = stocPy.crp(1.72, 10) sds = {} ms = {} cs = {} for ps in range(len(crp)): sds[ps] = math.sqrt(10 * stocPy.stocPrim("invgamma", (1, 0, 10), part=2)) ms[ps] = stocPy.stocPrim("normal", (0, sds[ps]), part=2) for p in crp[ps]: cs[p] = ps for i in range(len(obs)): stocPy.normal(ms[cs[i]], sds[cs[i]], obs[i]) obsLens.append(len(ms))
def categorical(ps): #scipy.stats has no categorical. Should implement this in StocPy eventually. assert(abs(sum(ps) - 1) < 0.0001) c = stocPy.stocPrim("uniform", (0,1), part=pind) s = 0 for i in range(len(ps)): s += ps[i] if s > c: return i assert(False) #shouldn't ever get here
def normal8DecU20(): n = stocPy.stocPrim("randint", (0, 21)) var = 1.0 ms = [] for i in range(n): ms.append(stocPy.normal(0, math.sqrt(var/(2**(i+1))), obs=True)) ms.append(stocPy.normal(0, math.sqrt(var/(2**n)), obs=True)) m = 10000 * ss.norm.cdf(sum(ms), loc = 0, scale = 1) for datum in normalData: stocPy.normal(m, 1, datum)
def lettersPerDayPart10(): # generative model expectedLetters = stocPy.stocPrim("uniform",(0, 20), obs=True, part=10) # prior on the number of letters for datum in noLetters: stocPy.poisson(expectedLetters, cond=datum) # conditioning on the data we have
def normal8Part2(): m = stocPy.stocPrim("uniform", (0, 10000), obs=True, part=10) for datum in normalData: stocPy.normal(m, 1, datum)
def normal8Part(): m = stocPy.stocPrim("uniform", (0, 10000), obs=True, part=stocPy.stocPrim("randint", (0, 21))) for datum in normalData: stocPy.normal(m, 1, datum)
def normal8(): m = stocPy.stocPrim("uniform", (0, 10000), obs=True) for datum in normalData: stocPy.normal(m, 1, datum)