Thanks! I think this worked.
I changed both functions:
from theano.compile.ops import as_op
import theano.tensor as tt
@as_op(itypes=[tt.dvector,tt.dscalar], otypes=[tt.dvector])
def adstock(x,rate=0.09):
return (recursive_filter(x,rate))
@as_op(itypes=[tt.dvector], otypes=[tt.dvector])
def normalize(x):
min_=0
max_=100
min_x=np.min(x)
max_x=np.max(x)
z=(max_-min_)/(max_x-min_x)*(x-max_x)+max_
return(z)
Created these as shared variables
sales=shared(pd_sales.sales.values)
advert=shared(pd_sales.advert.values)
with pm.Model() as mod_as:
a = pm.Normal('a', mu=1000, sd=500)
bA = pm.Normal('bA', mu=0, sd=2)
sigma = pm.Uniform('sigma', lower=0, upper=10)
ad_rate = pm.Uniform('ad_rate', lower=0, upper=1)
mu = a + bA * normalize(adstock(advert,ad_rate))
sales_hat = pm.Normal('sales', mu=mu, sd=sigma, observed=sales)
trace_5_3_S = pm.sample(1000, tune=1000)