def _sample_variance_components(self): ## Sample sigma2_u first = self.p for i in range(0, self.c): prior = self.priors_sigma2u[i] qi = self.qi[i] # size of random vector ui df = prior["df"] + qi # print 'num_fixed: '+str(self.num_fixed)+' num_locations: '+ str(self.num_locations) # print 'theta:'+str(np.shape(self.theta)) ui = self.theta[first : first + qi, 0] first += qi # print np.shape(u) # print np.shape(self.invG) try: scale1 = (ui.T * self.Ginvs[i] * ui)[0, 0] # print 'u.T * invG * u = ' + str(scale0) scale = (scale1 + prior["df"] * prior["scale"]) / df # print 'scale = ' + str(scale) + ' scalebig = ' + str(scalebig) self.sigma2_u[i, 0] = gt.rchisquare_inv_scaled(df, scale) # print 'sigma_b: '+str(x)+ ' df='+str(df)+' scale='+str(scale) except Exception, e: print "Error while sampling sigma2_u" print "df=" + str(df) + " scale=" + str(scale) print e raise e
def _sample_variance_components(self): ## Sample sigma2_b df = self.prior_b['df'] + self.num_random #print 'num_fixed: '+str(self.num_fixed)+' num_locations: '+ str(self.num_locations) #print 'theta:'+str(np.shape(self.theta)) u = self.theta[self.num_fixed:self.num_locations,0] #print np.shape(u) #print np.shape(self.invG) try: scale1 = (u.T * self.invG * u)[0,0] #print 'u.T * invG * u = ' + str(scale0) scale = (scale1 + self.prior_b['df']*self.prior_b['scale']) / df #print 'scale = ' + str(scale) + ' scalebig = ' + str(scalebig) self.utinvu = scale1 self.u_df = df self.u_scale = scale self.theta[self.sigma2_b_idx,0] = gt.rchisquare_inv_scaled(df,scale) #print 'sigma_b: '+str(x)+ ' df='+str(df)+' scale='+str(scale) except Exception, e: print "Error while sampling sigma2_b" print "df="+str(df)+" scale="+str(scale) print e raise e
print "Error while sampling sigma2_b" print "df="+str(df)+" scale="+str(scale) print e raise e ## Sample sigma2_e #print 'sigma_e index: '+ str(self.sigma2_e_idx) try: df = self.prior_e['df'] + self.num_y e = self.X*self.theta[0:self.num_fixed,0] + self.Z*self.theta[self.num_fixed:self.num_locations] e = self.y - e scale = ((e.T * e)[0,0] + self.prior_e['df']*self.prior_e['scale']) / df self.eeT = (e.T * e)[0,0] self.e_df = df self.e_scale = scale #print 'df '+ str(df) + ' scale ' + str(scale) self.theta[self.sigma2_e_idx] = gt.rchisquare_inv_scaled(df,scale) #print 'sigma_e: '+str(x)+ ' sample_e'+str(self.sample) except Exception, e: print "Error while sampling sigma2_e" print "df="+str(df)+" scale="+scale print e raise e # Mixed Model Equations def _compute_mm_equations(self): # C beta_hat = r # C dimension = (self.num_fixed+self.num_random)^2 # we trust in C p = self.num_fixed pq = self.num_locations self.mmeq_C = np.asmatrix(np.zeros(pq*pq).reshape(pq,pq))
# print 'sigma_b: '+str(x)+ ' df='+str(df)+' scale='+str(scale) except Exception, e: print "Error while sampling sigma2_u" print "df=" + str(df) + " scale=" + str(scale) print e raise e ## Sample sigma2_e # print 'sigma_e index: '+ str(self.sigma2_e_idx) prior = self.priors_sigma2e[0] try: df = prior["df"] + self.n e = self.X * self.theta[0 : self.p, 0] + self.Z * self.theta[self.p :] e = self.y - e scale = ((e.T * e)[0, 0] + prior["df"] * prior["scale"]) / df # print 'df '+ str(df) + ' scale ' + str(scale) self.sigma2_e[0, 0] = gt.rchisquare_inv_scaled(df, scale) # print 'sigma_e: '+str(x)+ ' sample_e'+str(self.sample) except Exception, e: print "Error while sampling sigma2_e" print "df=" + str(df) + " scale=" + str(scale) print e raise e def plot(self): # n = len(params) num_samples = self.num_samples plt.figure(1) # print "NUM SAMPLES="+str(num_samples) x = range(0, num_samples)