def test_fit(self):
        p = self._build_parent()
        s = MyStochastic(self.STOCHASTIC_NAME, p)

        mcmc = MCMC({p, s})

        mcmc.sample(100, burn=10, thin=2)
    def test_simple(self):

        # Priors
        mu = Normal('mu', mu=0, tau=0.0001)
        s = Uniform('s', lower=0, upper=100, value=10)
        tau = s ** -2

        # Likelihood with missing data
        x = Normal('x', mu=mu, tau=tau, value=m, observed=True)

        # Instantiate sampler
        M = MCMC([mu, s, tau, x])

        # Run sampler
        M.sample(10000, 5000, progress_bar=0)

        # Check length of value
        assert_equal(len(x.value), 100)
        # Check size of trace
        tr = M.trace('x')()
        assert_equal(shape(tr), (5000, 2))

        sd2 = [-2 < i < 2 for i in ravel(tr)]

        # Check for standard normal output
        assert_almost_equal(sum(sd2) / 10000., 0.95, decimal=1)
Exemple #3
0
 def test_nd(self):
     M = MCMC([self.NDstoch()], db=self.name, dbname=os.path.join(testdir, 'ND.'+self.name), dbmode='w')
     M.sample(10, progress_bar=0)
     a = M.trace('nd')[:]
     assert_equal(a.shape, (10,2,2))
     db = getattr(pymc.database, self.name).load(os.path.join(testdir, 'ND.'+self.name))
     assert_equal(db.trace('nd')[:], a)
Exemple #4
0
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 test_pymc_model(self):
        """ Tests sampler """

        sampler = MCMC(model_omm.pymc_parameters)
        self.assert_(isinstance(model_omm, TorsionFitModelOMM))
        self.assert_(isinstance(sampler, pymc.MCMC))

        sampler.sample(iter=1)
    def test_fit_with_sibling(self):
        p = self._build_parent()
        s = MyStochastic(self.STOCHASTIC_NAME, p)
        sib = MyStochastic(self.SIBLING_NAME, p)

        mcmc = MCMC({p, s, sib})

        mcmc.sample(100, burn=10, thin=2)
Exemple #7
0
def mcmc(prob, nsample=100, modulename = 'model' ):
    try:
        mystr = "from " + modulename + " import model"
        exec(mystr)
    except:
        print 'cannot import', modulename
    M = MCMC( model(prob) )
    M.sample(nsample)
    return M
Exemple #8
0
 def test_zcompression(self):
     db = pymc.database.hdf5.Database(dbname=os.path.join(testdir, 'DisasterModelCompressed.hdf5'),
                                      dbmode='w',
                                      dbcomplevel=5)
     S = MCMC(DisasterModel, db=db)
     S.sample(45,10,1)
     assert_array_equal(S.e.trace().shape, (35,))
     S.db.close()
     db.close()
     del S
Exemple #9
0
 def test_zcompression(self):
     with warnings.catch_warnings():
         warnings.simplefilter('ignore')
         db = pymc.database.hdf5.Database(dbname=os.path.join(testdir, 'disaster_modelCompressed.hdf5'),
                                          dbmode='w',
                                          dbcomplevel=5)                                 
         S = MCMC(disaster_model, db=db)
         S.sample(45,10,1, progress_bar=0)
         assert_array_equal(S.trace('early_mean')[:].shape, (35,))
         S.db.close()
         db.close()
         del S
Exemple #10
0
    def MCMC( self, nruns=10000, burn=1000, init_error_std=1., max_error_std=100., verbose=1 ):
        ''' Perform Markov Chain Monte Carlo sampling using pymc package

            :param nruns: Number of MCMC iterations (samples)
            :type nruns: int
            :param burn: Number of initial samples to burn (discard)
            :type burn: int
            :param verbose: verbosity of output
            :type verbose: int
            :param init_error_std: Initial standard deviation of residuals
            :type init_error_std: fl64
            :param max_error_std: Maximum standard deviation of residuals that will be considered
            :type max_error_std: fl64
            :returns: pymc MCMC object
        '''
        if max_error_std < init_error_std:
            print "Error: max_error_std must be greater than or equal to init_error_std"
            return
        try:
            from pymc import Uniform, deterministic, Normal, MCMC, Matplot
        except ImportError as exc:
            sys.stderr.write("Warning: failed to import pymc module. ({})\n".format(exc))
            sys.stderr.write("If pymc is not installed, try installing:\n")
            sys.stderr.write("e.g. try using easy_install: easy_install pymc\n")
        def __mcmc_model( self, init_error_std=1., max_error_std=100. ):
            #priors
            variables = []
            sig = Uniform('error_std', 0.0, max_error_std, value=init_error_std)
            variables.append( sig )
            for nm,mn,mx in zip(self.parnames,self.parmins,self.parmaxs):
                evalstr = "Uniform( '" + str(nm) + "', " +  str(mn) + ", " +  str(mx) + ")"
                variables.append( eval(evalstr) )
            #model
            @deterministic()
            def residuals( pars = variables, p=self ):
                values = []
                for i in range(1,len(pars)):
                    values.append(float(pars[i]))
                pardict = dict(zip(p.parnames,values))
                p.forward(pardict=pardict, reuse_dirs=True)
                return numpy.array(p.residuals)*numpy.array(p.obsweights)
            #likelihood
            y = Normal('y', mu=residuals, tau=1.0/sig**2, observed=True, value=numpy.zeros(len(self.obs)))
            variables.append(y)
            return variables

        M = MCMC( __mcmc_model(self, init_error_std=init_error_std, max_error_std=max_error_std) )
        M.sample(iter=nruns,burn=burn,verbose=verbose)
        return M
Exemple #11
0
def analizeMwm():
	masked_values = np.ma.masked_equal(x, value=None)
	print("m v: ", masked_values)

	print("dmwm da: ", dmwm.disasters_array)

	Mwm = MCMC(dmwm)
	Mwm.sample(iter=10000, burn=1000, thin=10)

	print("Mwm t: ", Mwm.trace('switchpoint')[:])

	hist(Mwm.trace('late_mean')[:])
	# show()

	plot(Mwm)
Exemple #12
0
    def test_zcompression(self):

        original_filters = warnings.filters[:]
        warnings.simplefilter("ignore")
        try:
            db = pymc.database.hdf5.Database(dbname=os.path.join(testdir, 'disaster_modelCompressed.hdf5'),
                                             dbmode='w',
                                             dbcomplevel=5)
            S = MCMC(disaster_model, db=db)
            S.sample(45,10,1, progress_bar=0)
            assert_array_equal(S.trace('early_mean')[:].shape, (35,))
            S.db.close()
            db.close()
            del S
        finally:
            warnings.filters = original_filters
Exemple #13
0
def bimodal_gauss(data,pm,dmin=0.3):
    '''run MCMC to get regression on bimodal normal distribution'''
    size = len(data[pm])

    

    ### set up model
    p = Uniform( "p", 0.2 , 0.8) #this is the fraction that come from mean1 vs mean2
    # p = distributions.truncated_normal_like('p', mu=0.5, tau=0.001, a=0., b=1.)
    # p = Normal( 'p', mu=(1.*sum(comp0==1))/size, tau=1./0.1**2 ) # attention: wings!, tau = 1/sig^2
    # p = Normal( 'p', mu=0.5, tau=1./0.1**2 ) # attention: wings!, tau = 1/sig^2
    
    ber = Bernoulli( "ber", p = p, size = size) # produces 1 with proportion p
    precision = Gamma('precision', alpha=0.01, beta=0.01)
    
    mean1 = Uniform( "mean1", -0.5, 1.0) # if not truncated
    sig1  = Uniform( 'sig1',  0.01, 1.)
    mean2 = Uniform( "mean2", mean1 + dmin, 1.5)
    sig2  = Uniform( 'sig2',  0.01, 1.)

    pop1  = Normal( 'pop1', mean1, 1./sig1**2) # tau is 1/sig^2
    pop2  = Normal( 'pop2', mean2, 1./sig2**2)


    @deterministic
    def bimod(ber = ber, pop1 = pop1, pop2 = pop2): # value determined from parents completely
        return ber*pop1 + (1-ber)*pop2

    obs = Normal( "obs", bimod, precision, value = data[pm], observed = True)
    model = Model( {"p":p, "precision": precision, "mean1": mean1, 'sig1': sig1, "mean2":mean2, 'sig2':sig2, "obs":obs} )
    
    from pymc import MCMC, Matplot


    M = MCMC(locals(), db='pickle', dbname='metals.pickle')
    iter = 10000; burn = 9000; thin = 10
    M.sample(iter=iter, burn=burn, thin=thin)
    M.db.commit()

    mu1 = np.mean(M.trace('mean1')[:])
    sig1= np.mean(M.trace('sig1')[:])
    mu2 = np.mean(M.trace('mean2')[:])
    sig2= np.mean(M.trace('sig2')[:])
    p   = np.mean(M.trace('p')[:])
    return p, mu1, sig1, mu2, sig2, M
Exemple #14
0
def analizeM():
	M = MCMC(dm)
	print("M: ", M)

	M.sample(iter=10000, burn=1000, thin=10)
	print("M t: ", M.trace('switchpoint')[:])

	hist(M.trace('late_mean')[:])
	# show()

	plot(M)
	# show()

	print("M smd dm sp: ", M.step_method_dict[dm.switchpoint])
	print("M smd dm em: ", M.step_method_dict[dm.early_mean])
	print("M smd dm lm: ", M.step_method_dict[dm.late_mean])

	M.use_step_method(Metropolis, dm.late_mean, proposal_sd=2.)
Exemple #15
0
def bimodal_gauss(data,pm):
    '''run MCMC to get regression on bimodal normal distribution'''
    m1 = np.mean(data[pm])/2.
    m2 = np.mean(data[pm])*2.
    dm = m2 - m1
    size = len(data[pm])

    ### set up model
    p = Uniform( "p", 0.2 , 0.8) #this is the fraction that come from mean1 vs mean2
    # p = distributions.truncated_normal_like('p', mu=0.5, tau=0.001, a=0., b=1.)
    # p = Normal( 'p', mu=(1.*sum(comp0==1))/size, tau=1./0.1**2 ) # attention: wings!, tau = 1/sig^2
    # p = Normal( 'p', mu=0.5, tau=1./0.1**2 ) # attention: wings!, tau = 1/sig^2
    
    ber = Bernoulli( "ber", p = p, size = size) # produces 1 with proportion p
    precision = Gamma('precision', alpha=0.01, beta=0.01)
    
    dmu = Normal( 'dmu', dm, tau=1./0.05**2 ) # [PS] give difference between means, finite
    # dmu = Lognormal( 'dmu', 0.3, tau=1./0.1**2)
    
    mean1 = Normal( "mean1", mu = m1,          tau = 1./0.1**2 ) # better to use Normals versus Uniforms,
                                                                 # if not truncated
    mean2 = Normal( "mean2", mu = mean1 + dmu, tau = 1./0.1**2 ) # tau is 1/sig^2
    
    @deterministic
    def mean( ber = ber, mean1 = mean1, mean2 = mean2):
        return ber*mean1 + (1-ber)*mean2

    
    obs = Normal( "obs", mean, precision, value = data[pm], observed = True)
    model = Model( {"p":p, "precision": precision, "mean1": mean1, "mean2":mean2, "obs":obs} )
    
    from pymc import MCMC, Matplot



    M = MCMC(locals(), db='pickle', dbname='metals.pickle')
    iter = 3000; burn = 2000; thin = 10
    M.sample(iter=iter, burn=burn, thin=thin)
    M.db.commit()

    mu1 = np.mean(M.trace('mean1')[:])
    mu2 = np.mean(M.trace('mean2')[:])
    p   = np.mean(M.trace('p')[:])
    return p, mu1, 0.1, mu2, 0.1, M
Exemple #16
0
class LeagueModel(object):
    """MCMC model of a football league."""
    def __init__(self, fname):
        super(LeagueModel, self).__init__()
        league = fuba.League(fname)

        N = len(league.teams)
        #dummy future games
        future_games = [[league.teams["Werder Bremen"],league.teams["Dortmund"]]]

        self.goal_rate = np.empty(N,dtype=object)
        self.match_rate = np.empty(len(league.games)*2,dtype=object)
        self.match_goals_future = np.empty(len(future_games)*2,dtype=object)
        self.home_adv = Normal(name = 'home_adv',mu=0,tau=10.)

        for t in league.teams.values():
            print t.name,t.team_id
            self.goal_rate[t.team_id] = Exponential('goal_rate_%i'%t.team_id,beta=1)

        for game in range(len(league.games)):
            self.match_rate[2*game] = Poisson('match_rate_%i'%(2*game),
                    mu=self.goal_rate[league.games[game].hometeam.team_id] + self.home_adv,
                    value=league.games[game].homescore, observed=True)
            self.match_rate[2*game+1] = Poisson('match_rate_%i'%(2*game+1),
                    mu=self.goal_rate[league.games[game].hometeam.team_id],
                    value=league.games[game].homescore, observed=True)

        for game in range(len(future_games)):
            self.match_goals_future[2*game] = Poisson('match_goals_future_%i'%(2*game),
                    mu=self.goal_rate[future_games[game][0].team_id] + self.home_adv)
            self.match_goals_future[2*game+1] = Poisson('match_goals_future_%i'%(2*game+1),
                    mu=self.goal_rate[future_games[game][1].team_id])

    def run_mc(self,nsample = 10000,interactive=False):
        """run the model using mcmc"""
        from pymc.Matplot import plot
        from pymc import MCMC
        self.M = MCMC(self)
        if interactive:
            self.M.isample(iter=nsample, burn=1000, thin=10)
        else:
            self.M.sample(iter=nsample, burn=1000, thin=10)
        plot(self.M)
Exemple #17
0
    def bayesian_regression(self, Methodology):
        
        fit_dict                = OrderedDict()
        
        fit_dict['methodology'] = r'Inference $\chi^{2}$ model'
        
        #Initial guess for the fitting:
        Np_lsf                  = polyfit(self.x_array, self.y_array, 1)
        m_0, n_0                = Np_lsf[0], Np_lsf[1]
                
        MCMC_dict               = self.lr_ChiSq(self.x_array, self.y_array, m_0, n_0)
        
        myMCMC                  = MCMC(MCMC_dict)
        
        myMCMC.sample(iter=10000, burn=1000)

        fit_dict['m'], fit_dict['n'], fit_dict['m_error'], fit_dict['n_error'] = myMCMC.stats()['m']['mean'], myMCMC.stats()['n']['mean'], myMCMC.stats()['m']['standard deviation'], myMCMC.stats()['n']['standard deviation']
        
        return fit_dict
Exemple #18
0
def fit_std_curve_by_pymc(i_vals, i_sds, dpx_concs):
    import pymc
    from pymc import Uniform, stochastic, deterministic, MCMC
    from pymc import Matplot
    # Define prior distributions for both Ka and Kd
    ka = Uniform('ka', lower=0, upper=1000)
    kd = Uniform('kd', lower=0, upper=1000)

    @stochastic(plot=True, observed=True)
    def quenching_model(ka=ka, kd=kd, value=i_vals):
        pred_i = quenching_func(ka, kd, dpx_concs)
        # The first concentration in dpx_concs should always be zero
        # (that is, the first point in the titration should be the
        # unquenched fluorescence), so we assert that here:
        assert dpx_concs[0] == 0
        # The reason this is necessary is that in the likelihood calculation
        # we skip the error for the first point, since (when the std. err
        # is calculated by well) the error is 0 (the I / I_0 ratio is
        # always 1 for each well, the the variance/SD across the wells is 0).
        # If we don't skip this first point, we get nan for the likelihood.
        # In addition, the model always predicts 1 for the I / I_0 ratio
        # when the DPX concentration is 0, so it contributes nothing to
        # the overall fit.
        return -np.sum((value[1:] - pred_i[1:])**2 / (2 * i_sds[1:]**2))

    pymc_model = pymc.Model([ka, kd, quenching_model])
    mcmc = MCMC(pymc_model)
    mcmc.sample(iter=155000, burn=5000, thin=150)
    Matplot.plot(mcmc)

    plt.figure()
    num_to_plot = 1000
    ka_vals = mcmc.trace('ka')[:]
    kd_vals = mcmc.trace('kd')[:]
    if num_to_plot > len(ka_vals):
        num_to_plot = len(ka_vals)
    for i in range(num_to_plot):
        plt.plot(dpx_concs, quenching_func(ka_vals[i], kd_vals[i], dpx_concs),
                 alpha=0.01, color='r')
    plt.errorbar(dpx_concs, i_vals, yerr=i_sds, linestyle='', marker='o',
            color='k', linewidth=2)

    return (ka_vals, kd_vals)
Exemple #19
0
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
Exemple #20
0
    def test_non_missing(self):
        """
        Test to ensure that masks without any missing values are not imputed.
        """

        fake_data = rnormal(0, 1, size=10)
        m = ma.masked_array(fake_data, fake_data == -999)

        # Priors
        mu = Normal('mu', mu=0, tau=0.0001)
        s = Uniform('s', lower=0, upper=100, value=10)
        tau = s ** -2

        # Likelihood with missing data
        x = Normal('x', mu=mu, tau=tau, value=m, observed=True)

        # Instantiate sampler
        M = MCMC([mu, s, tau, x])

        # Run sampler
        M.sample(20000, 19000, progress_bar=0)

        # Ensure likelihood does not have a trace
        assert_raises(AttributeError, x.__getattribute__, 'trace')
Exemple #21
0
 def Outliers_Krough(self):
     
     fit_dict                = OrderedDict()
     
     fit_dict['methodology'] = r'Outliers Krough'
     
     #Initial Guess for fitting
     Bces_guess              = self.bces_regression()
     m_0, n_0                = Bces_guess['m'][0], Bces_guess['n'][0]
             
     Spread_vector           = ones(len(self.x_array))
     
     #Model for outliers detection
     Outliers_dect_dict      = self.inference_outliers(self.x_array, self.y_array, m_0, n_0, Spread_vector)
     
     mcmc = MCMC(Outliers_dect_dict)
     mcmc.sample(100000, 20000)
     
     #Extract the data with the outliers coordinates
     probability_of_points           = mcmc.trace('inlier')[:].astype(float).mean(0)
     fit_dict['x_coords_outliers']   = self.x_array[probability_of_points < self.prob_threshold]
     fit_dict['y_coords_outliers']   = self.y_array[probability_of_points < self.prob_threshold]
             
     return fit_dict
        coefs[tName] = Normal(tName,0,0.001,value=sp.rand()-0.5)
        termList.append(d*coefs[tName])

    # get individual edge probabilities
    @deterministic(trace=False,plot=False)
    def probs(termList=termList):
        probs = 1./(1+sp.exp(-1*sum(termList)))
        probs[sp.diag_indices_from(probs)]= 0
        return(probs)

    # define the outcome as 
    outcome = Bernoulli('outcome',probs,value=adjMat,observed=True)

    return(locals())


if __name__ == '__main__':
    # load the prison data
    with open('prison.dat','r') as f:
        rowList = list()
        for l in f:
            rowList.append([int(x) for x in l.strip().split(' ')])
        adjMat = sp.array(rowList)
    
    # make the model as an MCMC object
    m = makeModel(adjMat)
    mc = MCMC(m)

    # estimate
    mc.sample(30000,1000,50)
Exemple #23
0

@observed(dtype=int, plot=False)
def zip(value=data, mu=mu, psi=psi):
    """ Zero-inflated Poisson likelihood """

    # Initialize likeihood
    like = 0.0

    # Loop over data
    for x in value:

        if not x:
            # Zero values
            like += np.log((1. - psi) + psi * np.exp(-mu))

        else:
            # Non-zero values
            like += np.log(psi) + poisson_like(x, mu)

    return like

if __name__ == "__main__":

    from pymc import MCMC, Matplot

    # Run model and plot posteriors
    M = MCMC(locals())
    M.sample(100000, 50000)
    Matplot.plot(M)
Exemple #24
0
def runMCMCmodel(args):
  """
  Simulate the survey data and run the MCMC luminosity calibration model.

  Parameters
  ----------

  args - Command line arguments
  """
  mcmcParams=args['mcmcString']
  surveyParams=args['surveyString']
  priorParams=args['priorsString']

  maxIter=int(mcmcParams[0])
  burnIter=int(mcmcParams[1])
  thinFactor=int(mcmcParams[2])

  if surveyParams[5] == 'Inf':
    magLim = np.Inf
  else:
    magLim = float(surveyParams[5])
  S=U.UniformDistributionSingleLuminosity(int(surveyParams[0]), float(surveyParams[1]),
      float(surveyParams[2]), float(surveyParams[3]), float(surveyParams[4]),
      surveyLimit=magLim)
  #S.setRandomNumberSeed(53949896)
  S.generateObservations()
  lumCalModel=L.UniformSpaceDensityGaussianLFBook(S,float(surveyParams[1]), float(surveyParams[2]),
      float(priorParams[0]), float(priorParams[1]), float(priorParams[2]), float(priorParams[3]))

  class SurveyData(IsDescription):
    """
    Class that holds the data model for the data from the simulated parallax survey. Intended for use
    with the HDF5 files through the pytables package.
    """
    trueParallaxes = Float64Col(S.numberOfStarsInSurvey)
    absoluteMagnitudes = Float64Col(S.numberOfStarsInSurvey)
    apparentMagnitudes = Float64Col(S.numberOfStarsInSurvey)
    parallaxErrors = Float64Col(S.numberOfStarsInSurvey)
    magnitudeErrors = Float64Col(S.numberOfStarsInSurvey)
    observedParallaxes = Float64Col(S.numberOfStarsInSurvey)
    observedMagnitudes = Float64Col(S.numberOfStarsInSurvey)

  baseName="LumCalSimSurvey-{0}".format(S.numberOfStars)+"-{0}".format(S.minParallax)
  baseName=baseName+"-{0}".format(S.maxParallax)+"-{0}".format(S.meanAbsoluteMagnitude)
  baseName=baseName+"-{0}".format(S.varianceAbsoluteMagnitude)

  h5file = openFile(baseName+".h5", mode = "w", title = "Simulated Survey")
  group = h5file.createGroup("/", 'survey', 'Survey parameters, data, and MCMC parameters')
  parameterTable = h5file.createTable(group, 'parameters', SurveyParameters, "Survey parameters")
  dataTable = h5file.createTable(group, 'data', SurveyData, "Survey data")
  mcmcTable = h5file.createTable(group, 'mcmc', McmcParameters, "MCMC parameters")

  surveyParams = parameterTable.row
  surveyParams['kind']=S.__class__.__name__
  surveyParams['numberOfStars']=S.numberOfStars
  surveyParams['minParallax']=S.minParallax
  surveyParams['maxParallax']=S.maxParallax
  surveyParams['meanAbsoluteMagnitude']=S.meanAbsoluteMagnitude
  surveyParams['varianceAbsoluteMagnitude']=S.varianceAbsoluteMagnitude
  surveyParams['parallaxErrorNormalizationMagnitude']=S.parallaxErrorNormalizationMagnitude
  surveyParams['parallaxErrorSlope']=S.parallaxErrorSlope
  surveyParams['parallaxErrorCalibrationFloor']=S.parallaxErrorCalibrationFloor
  surveyParams['magnitudeErrorNormalizationMagnitude']=S.magnitudeErrorNormalizationMagnitude
  surveyParams['magnitudeErrorSlope']=S.magnitudeErrorSlope
  surveyParams['magnitudeErrorCalibrationFloor']=S.magnitudeErrorCalibrationFloor
  surveyParams['apparentMagnitudeLimit']=S.apparentMagnitudeLimit
  surveyParams['numberOfStarsInSurvey']=S.numberOfStarsInSurvey
  surveyParams.append()
  parameterTable.flush()

  surveyData = dataTable.row
  surveyData['trueParallaxes']=S.trueParallaxes
  surveyData['absoluteMagnitudes']=S.absoluteMagnitudes
  surveyData['apparentMagnitudes']=S.apparentMagnitudes
  surveyData['parallaxErrors']=S.parallaxErrors
  surveyData['magnitudeErrors']=S.magnitudeErrors
  surveyData['observedParallaxes']=S.observedParallaxes
  surveyData['observedMagnitudes']=S.observedMagnitudes
  surveyData.append()
  dataTable.flush()

  mcmcParameters = mcmcTable.row
  mcmcParameters['iterations']=maxIter
  mcmcParameters['burnIn']=burnIter
  mcmcParameters['thin']=thinFactor
  mcmcParameters['minMeanAbsoluteMagnitude']=float(priorParams[0])
  mcmcParameters['maxMeanAbsoluteMagnitude']=float(priorParams[1])
  mcmcParameters['priorTau']="OneOverX"
  mcmcParameters['tauLow']=float(priorParams[2])
  mcmcParameters['tauHigh']=float(priorParams[3])
  mcmcParameters.append()
  dataTable.flush()

  h5file.close()

  # Run MCMC and store in HDF5 database
  baseName="LumCalResults-{0}".format(S.numberOfStars)+"-{0}".format(S.minParallax)
  baseName=baseName+"-{0}".format(S.maxParallax)+"-{0}".format(S.meanAbsoluteMagnitude)
  baseName=baseName+"-{0}".format(S.varianceAbsoluteMagnitude)

  M=MCMC(lumCalModel.pyMCModel, db='hdf5', dbname=baseName+".h5", dbmode='w', dbcomplevel=9,
      dbcomplib='bzip2')
  M.use_step_method(Metropolis, M.priorParallaxes)
  M.use_step_method(Metropolis, M.priorAbsoluteMagnitudes)
  start=now()
  M.sample(iter=maxIter, burn=burnIter, thin=thinFactor)
  finish=now()
  print "Elapsed time in seconds: %f" % (finish-start)
  M.db.close()
# coding: utf-8
"""
pyMCによるモンテカルロサンプリングの練習
"""
import numpy as np
import matplotlib.pyplot as plt
from pymc import Normal, Beta, Bernoulli, deterministic, MCMC, Matplot


real_sigma = 0.1 ** 2          # 分散の真の分布
real_mu = 1.0                  # 平均の真の分布

x_sample = np.random.normal(real_mu, real_sigma, 5)

mu = Normal('mu', 0, 1.0/real_sigma)
x = Normal('x', mu=mu, tau=1.0 /real_sigma, value=x_sample, observed=True)

M = MCMC(input=[mu, x])
M.sample(iter=10000)

Matplot.plot(M)
Exemple #26
0
def test_regression_155():
    """thin > iter"""
    M = MCMC(disaster_model, db='ram')
    M.sample(10,0,100, progress_bar=0)
        db = pymc.database.pickle.load(fname)
        A = MCMC(model, db=db)
        if args.type != 'TOYSAVE':
            with open(fmetaname,'r') as f:
                logp, errors_b, errors_x = pickle.load(f)
        print "Loaded previous model from %s" % fname
    except (IOError, TypeError) as e:
        # run new simulation
        if fname:
            A = MCMC(model, db='pickle', dbname=fname)
        else:
            A = MCMC(model)
        logp = []
        errors_b = []
        errors_x = []
        print "Created new model at %s" % fname
        A.sample(iter=100)

    if args.type == 'GRID':
        A, logp, errors_b, errors_x = sample(model,A,fmetaname,iters=iters, \
                logp=logp,errors_b=errors_b,errors_x=errors_x)
        plot(logp, errors_b, errors_x)
    elif args.type == 'TOY':
        A, logp, errors_b, errors_x = sample_toy(model,A,fmetaname,iters=iters, \
                logp=logp,errors_b=errors_b,errors_x=errors_x)
        plot(logp, errors_b, errors_x)
    elif args.type == 'TOYSAVE':
        A, logp, errors_b, errors_x  = sample_toy_save(model,A,iters=iters)


Exemple #28
0
# The mu and tau are in log units; to get to log units,
# do the following
# (has mean around 1e2, with a variance of 9 logs in base 10)
mean_b10 = 2
var_b10 = 9

print "Setting mean (base 10) to %f, variance (base 10) to %f" % (mean_b10, var_b10)

# The lognormal variable
k = Lognormal('k', mu=np.log(10 ** mean_b10),
                   tau=1./(np.log(10) * np.log(10 ** var_b10)))

# Sample it
m = MCMC(Model([k]))
m.sample(iter=50000)

ion()

# Plot the distribution in base e
figure()
y = log(m.trace('k')[:])
y10 = log10(m.trace('k')[:])
hist(y, bins=100)
print
print "Mean, base e: %f; Variance, base e: %f" % (mean(y), var(y))

# Plot the distribution in base 10
figure()
hist(y10, bins=100)
print "Mean, base 10: %f; Variance, base 10: %f" % (mean(y10), var(y10))
Exemple #29
0
def test_regression_155():
    """thin > iter"""
    M = MCMC(DisasterModel, db='ram')
    M.sample(10,0,100)
Exemple #30
0
# Ph21 Set 5
# Aritra Biswas

# coin_mcmc.py
# Run MCMC on coin_model.py

import coin_model
from pymc import MCMC
from pymc.Matplot import plot

M = MCMC(coin_model)
M.sample(iter = 10000, burn = 0, thin = 1)
print
plot(M)
M.pheads.summary()
Exemple #31
0
def p_segment_mcmc(
    filtered_sig,
    annots,
    fs,
    step=2,
    iter_count=4000,
    burn_count=2000,
    max_hermit_level=4,
    savefig_path=None,
    figID=None,
):
    '''Detect and returns P wave detection results.
        Note:
            * Input is a segment contains only P wave.
            * This function returns None when detection fails.
    '''
    filtered_sig = np.array(filtered_sig)
    # Normalization
    max_val = np.max(filtered_sig)
    min_val = np.min(filtered_sig)
    if (max_val - min_val) > 1e-6:
        filtered_sig = (filtered_sig - min_val) / (max_val - min_val)

    raw_sig = filtered_sig
    sig_seg = raw_sig

    p_model = P_model_Gaussian.MakeModel(sig_seg,
                                         annots,
                                         max_hermit_level=max_hermit_level)
    M = MCMC(p_model)

    M.sample(iter=iter_count, burn=burn_count, thin=10)

    # retrieve parameters
    hermit_coefs = list()
    for h_ind in xrange(0, P_model_Gaussian.HermitFunction_max_level):
        hermit_value = np.mean(M.trace('hc%d' % h_ind)[:])
        hermit_coefs.append(hermit_value)

    fitting_curve = np.zeros(len(sig_seg), )
    for level, coef in zip(xrange(0, max_hermit_level), hermit_coefs):
        fitting_curve += P_model_Gaussian.HermitFunction(level,
                                                         len(sig_seg)) * coef

    # Gaussian

    pos_ponset = None
    pos_p = None
    pos_poffset = None
    for pos, label in annots:
        if label == 'Ponset':
            pos_ponset = pos
        elif label == 'P':
            pos_p = pos
        elif label == 'Poffset':
            pos_poffset = pos

    gaussian_curve = np.zeros(len(sig_seg), )
    common_length = len(sig_seg)
    g_amp = np.mean(M.trace('g_amp')[:])
    g_sigma = np.mean(M.trace('g_sigma')[:])
    g_dc = np.mean(M.trace('dc')[:])
    gaussian_curve = P_model_Gaussian.GetGaussianPwave(
        len(sig_seg) * 2, g_amp, g_sigma / 3, g_dc)

    gaussian_segment = gaussian_curve[common_length - pos_p:2 * common_length -
                                      pos_p]
    baseline_curve = fitting_curve + g_dc
    baseline_curve = baseline_curve.tolist()
    fitting_curve += gaussian_segment

    # Compute results
    results = dict(P=pos_p)
    meet_threshold = 0.07
    for ind in xrange(0, len(fitting_curve)):
        if ('Ponset' not in results
                and abs(fitting_curve[ind] - baseline_curve[ind]) >=
                meet_threshold):
            results['Ponset'] = ind
        elif ('Ponset' in results and
              abs(fitting_curve[ind] - baseline_curve[ind]) >= meet_threshold):
            results['Poffset'] = ind
    # If not found
    if 'Ponset' not in results:
        results['Ponset'] = pos_ponset
        results['Poffset'] = pos_poffset
    elif 'Poffset' not in results:
        results['Poffset'] = pos_poffset

    return results