Given a model, I’d like to change the observed data to infer model parameters for a different dataset.
Usually I specify the observed data as part of the model definition, such as
import numpy as np
import pymc3 as pm
mean1 = 3
N = 1000
data1 = np.random.normal(loc=mean1, size=N)
with pm.Model() as model:
    mean = pm.Flat('mean')
    obs = pm.Normal('obs', mu=mean, sd=1, observed=data1)
with model:
    map_s = pm.find_MAP()
This will correctly give something close to 3 for mean
But now I want to infer on a different dataset
mean2 = 10
data2 = np.random.normal(loc=mean2, size=N)
How do I specify this as the new observed dataset? I want to keep the model as it is otherwise.
I tried something like
obs.observations = data2
obs.tag.test_value = data2
but find_map() still returns 3 for the mean.
             
            
              
              
              
            
            
           
          
            
            
              You can use theano.shared when defining the observation:
import numpy as np
import pymc3 as pm
import theano
mean1 = 3
N = 1000
data1 = np.random.normal(loc=mean1, size=N)
data = theano.shared(data1)
with pm.Model() as model:
    mean = pm.Flat('mean')
    obs = pm.Normal('obs', mu=mean, sd=1, observed=data)
with model:
    map_s1 = pm.find_MAP()
# change data
mean2 = 10
data2 = np.random.normal(loc=mean2, size=N)
data.set_value(data2)
with model:
    map_s2 = pm.find_MAP()
More information could be found on the PyMC3 doc
             
            
              
              
              2 Likes
            
            
           
          
            
            
              Hi there! my code is like:
import pandas as pd
import pymc3 as pm
import theano
import numpy as np
df = pd.read_csv("../input/attemptclasstime.csv", index_col = None, na_values = ['NA'])
df = df[df.studentclass == 5]
df = df.sort_values('question', ascending=[1])
unique_qid = df["question"].unique()
for j in unique_qid:
    nndf = df[df.question == j]
    data1 = nndf["status"].tolist()
    data = theano.shared(data1)
And is generating the following error, please help!
    AttributeError                            Traceback (most recent call last)
/opt/conda/lib/python3.6/site-packages/pymc3/theanof.py in floatX(X)
     64     try:
---> 65         return X.astype(theano.config.floatX)
     66     except AttributeError:
AttributeError: 'SharedVariable' object has no attribute 'astype'