def create_node_a(name, parents, ainum, ailb, aiub, aiedges, node_repair=None, asmp0=None): if node_repair is None: node_ai = Node(name, parents=parents, rvname='continuous') else: node_ai = Node(name, parents=parents + [node_repair], rvname='continuous') # dynamic discretization of nodes a and M node_ap = parents[0] knum = parents[1].nstates() mnum = parents[2].nstates() ainames = node_ai.discretize(ailb, aiub, ainum, infinity='+', bins=aiedges) aibins = node_ai.bins if node_repair is None: labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum), np.arange(mnum)) else: labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum), np.arange(mnum), np.arange(2)) labels = [label for label in labels] for i, label in enumerate(labels): if len(label) == 4 and label[-1] == 1: binnum, dummy = np.histogram(asmp0, aibins) probs = binnum / np.sum(binnum, dtype=float) node_ai.assign_cpt(probs, label=np.asarray(label), statenames=node_ai.statenames) else: truncrvs = [] for j, pstate in enumerate(label): truncrvs.append(node_ai.parents[j].truncate_rv(pstate, lmd=trunclmd)) rvnames = ['Ap', 'K', 'M'] rvs = truncrvs[:3] probs, smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp) # clean Ai states given Ai-1 apstate = label[0] aplb = node_ap.bins[apstate] aiubs = node_ai.bins[1:] probs[aiubs <= aplb] = 0. probs = probs / np.sum(probs) node_ai.assign_cpt(probs, label=np.asarray(label), statenames=node_ai.statenames) # print 'labels: {}, progress: {}%, prob: {}'.format(label, # float(i)/len(labels)*100, np.array_str(probs,precision=3)) return node_ai
def create_node_a(name, parents, ainum, ailb, aiub, aiedges, node_repair=None, asmp0=None): if node_repair is None: node_ai = Node(name, parents=parents, rvname='continuous') else: node_ai = Node(name, parents=parents+[node_repair], rvname='continuous') # dynamic discretization of nodes a and M node_ap = parents[0] knum = parents[1].nstates() mnum = parents[2].nstates() ainames = node_ai.discretize(ailb, aiub, ainum, infinity='+', bins=aiedges) aibins = node_ai.bins if node_repair is None: labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum),np.arange(mnum)) else: labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum), np.arange(mnum), np.arange(2)) labels = [label for label in labels] for i,label in enumerate(labels): if len(label)==4 and label[-1] == 1: binnum,dummy = np.histogram(asmp0, aibins) probs = binnum/np.sum(binnum, dtype=float) node_ai.assign_cpt(probs,label=np.asarray(label),statenames=node_ai.statenames) else: truncrvs=[] for j,pstate in enumerate(label): truncrvs.append(node_ai.parents[j].truncate_rv(pstate,lmd=trunclmd)) rvnames = ['Ap', 'K', 'M'] rvs = truncrvs[:3] probs,smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp) # clean Ai states given Ai-1 apstate = label[0] aplb = node_ap.bins[apstate] aiubs = node_ai.bins[1:] probs[aiubs<=aplb] = 0. probs = probs/np.sum(probs) node_ai.assign_cpt(probs,label=np.asarray(label),statenames=node_ai.statenames) # print 'labels: {}, progress: {}%, prob: {}'.format(label, # float(i)/len(labels)*100, np.array_str(probs,precision=3)) return node_ai
aiub, minum, infinity='+-', bins=aiedges) nstate = ainum labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum), np.arange(mnum)) labels = [label for label in labels] for i, label in enumerate(labels): truncrvs = [] for j, pstate in enumerate(label): truncrvs.append(node_ai.parents[j].truncate_rv(pstate, lmd=trunclmd)) rvnames = ['Ap', 'K', 'M'] rvs = truncrvs probs, smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp) # clean Ai states given Ai-1 apstate = label[0] aplb = node_ap.bins[apstate] aiubs = node_ai.bins[1:] probs[aiubs <= aplb] = 0. probs = probs / np.sum(probs) print 'labels: {}, progress: {}%, prob: {}'.format( label, float(i) / len(labels) * 100, np.array_str(probs, precision=3)) node_ai.assign_cpt(probs, label=np.asarray(label), statenames=node_ai.statenames) # node mi nstate = minum labels = itertools.product(np.arange(ainum))
else: aibins = np.linspace(0., aiub, ainum-1) aibins = np.hstack((aibins,acrit+1e-3)) ainames = node_ai.discretize(ailb, aiub, ainum, infinity='+', bins=aibins) minames = node_mi.discretize(ailb, aiub, minum, infinity='+-', bins=aibins) nstate = ainum # ai = Node("A"+str(i+1), parents=[aarray[-1], node_k, node_m], rvname='continuous') labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum),np.arange(mnum)) labels = [label for label in labels] for i,label in enumerate(labels): truncrvs=[] for j,pstate in enumerate(label): truncrvs.append(node_ai.parents[j].truncate_rv(pstate,lmd=trunclmd)) rvnames = ['Ap', 'K', 'M'] rvs = truncrvs probs,smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp) # clean Ai states given Ai-1 apstate = label[0] aplb = node_ap.bins[apstate] aiubs = node_ai.bins[1:] probs[aiubs<=aplb] = 0. probs = probs/np.sum(probs) print 'labels: {}, progress: {}%, prob: {}'.format(label, float(i)/len(labels)*100, np.array_str(probs,precision=3)) node_ai.assign_cpt(probs,label=np.asarray(label),statenames=node_ai.statenames) # node mi nstate = minum labels = itertools.product(np.arange(ainum)) labels = [label for label in labels] for i,label in enumerate(labels): truncrvs=[]