Skip to content

Instantly share code, notes, and snippets.

View ckrapu's full-sized avatar

Christopher Krapu ckrapu

View GitHub Profile
@ckrapu
ckrapu / matrix-normal-failing-because-cov-matrix.py
Created March 26, 2021 02:54
matrix-normal-failing-because-cov-matrix
import numpy as np
import aesara.tensor as at
import pymc3 as pm
np.random.seed(20090425)
n = 1
p = 10
k = 5
t = 200
@ckrapu
ckrapu / gp-radon-model-broken.py
Created March 24, 2021 13:58
gp-radon-model-broken
from pymc3 import (
NUTS,
Deterministic,
HalfCauchy,
Model,
MvNormal,
find_MAP,
sample,
summary,
traceplot,
@ckrapu
ckrapu / streaming-example-pymc3.py
Created March 23, 2021 16:13
streaming-example-pymc3
import pymc3 as pm
with pm.Model() as model:
x = pm.Normal('x', shape=2)
step = pm.NUTS(x)
gen = pm.iter_sample(5, step, tune=5, streaming=True)
for trace in gen:
print(trace)
@ckrapu
ckrapu / pm_means.py
Created March 10, 2021 19:34
estimate-means-missing-gaussian
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import pymc3 as pm
# Define number of entities
p = 4
# Define number of obs. per entity
n = 6
@ckrapu
ckrapu / vec_gibbs.py
Last active February 22, 2021 16:50
vectorized-gibbs-sampler
def vector_randint(p, axis=1):
u = np.random.uniform(size=p.shape)
v = u*p
return np.argmax(v, axis=axis)
def batch_gibbs_sample(parents, children, point, parent_factors, is_observed, extra_factors=None):
for var in parents.keys():
should_update = is_observed[:, var]
@ckrapu
ckrapu / spacetimekron.py
Created February 21, 2021 18:06
Short example of a space/time Kronecker Gaussian process in PyMC3
import numpy as np
import pymc3 as pm
N, T = 20, 10
min_lat, max_lat = 35, 40
min_long, max_long = 30, 35
lat_interval = max_lat - min_lat
long_interval = max_long - min_long
@ckrapu
ckrapu / gist:1807577fcb79f0522c87552bfb0ebf76
Last active December 17, 2020 18:09
Use OSM API to download buildings and turn them into GeoPandas geodataframes
import geopandas as gpd
import numpy as np
import pandas as pd
import requests
save_directory = '../data/'
osm_api_url_base = 'http://overpass.openstreetmap.ru/cgi/xapi_meta?'
regions = {
@ckrapu
ckrapu / gist:9fb7337ff13005b596317021a40d98d1
Created November 15, 2020 02:26
replace-dirichlet-gamma
import numpy as np
import pymc3 as pm
from pymc3.distributions.transforms import StickBreaking
genus_counts = np.random.multinomial(10, np.ones(5)/5, 20)
with pm.Model() as model:
k = 3
n, p = genus_counts.shape
profile_gamma = pm.Gamma('profile_gamma', alpha=np.ones((k, p)), beta=np.ones((k, p)), shape=(k,p))
@ckrapu
ckrapu / gist:8be4da91a70763ee62f889c6cd98f700
Created October 28, 2020 14:43
conjugate-sampling-custom-step
from pymc3.step_methods.arraystep import BlockedStep
from pymc3.distributions.transforms import stick_breaking
from pymc3.model import modelcontext
import pymc3 as pm
import numpy as np
def sample_dirichlet(c):
gamma = np.random.gamma(c)
p = gamma/gamma.sum(axis=-1, keepdims=True)
import pymc3 as pm
from time import time
traces = []
t1 = time()
with pm.Model() as model:
RVS = []
for i in range(20):
RVS.append(pm.Normal('var_{0}'.format(i)))