Beispiel #1
0
    def sample_emcee(self, nIterations):
        ndim = self.nNodes*36
        self.nwalkers = 2 * ndim
        self.theta0 = np.zeros(ndim)
        
        p0 = [self.theta0 + 1e-4*np.random.randn(ndim) for i in range(self.nwalkers)]
        self.sampler = emcee.EnsembleSampler(self.nwalkers, ndim, self.logLikelihood)

        loop = 0

        self.chain = np.zeros((nIterations,self.nwalkers,ndim))
    
        for result in self.sampler.sample(p0, iterations=nIterations, storechain=False):
            out, _ = tr.lrBoundedForward(result[0], self.low, self.up)
            self.chain[loop,:,:] = out
            ps.util.progressbar(loop, nIterations, text='sampling')
            loop += 1
Beispiel #2
0
    def logLikelihood(self, thetaIn):

        theta, lnJactheta = tr.lrBoundedForward(thetaIn, self.low, self.up)
        
        matrix = theta.reshape((self.nNodes,self.nParties,self.nParties))

        self.matrix = np.zeros((self.nTimes,self.nParties,self.nParties))
        for i in range(self.nParties):
            for j in range(self.nParties):
                tmp = interp.UnivariateSpline(self.timeNodes, matrix[:,i,j])
                self.matrix[:,i,j] = tmp(self.obsTime)

        out = np.zeros((self.nTimes,self.nParties))
        out[0,:] = self.initialCondition
        for i in range(self.nTimes-1):
            out[i+1,:] = out[i,:] + ( self.obsTime[i+1] - self.obsTime[i] ) * self.matrix[i,:,:].dot(out[i,:])

        logL = np.sum( (out[1:,:] - self.party[1:,:])**2 / 0.1**2 )

        #print(logL)
        

        return logL + np.sum(lnJactheta)