def orient_edges_gs2(edge_dict, Mb, data, alpha):
"""
Similar algorithm as above, but slightly modified for speed?
Need to test.
"""
d_edge_dict = dict([(rv,[]) for rv in edge_dict])
for X in edge_dict.keys():
for Y in edge_dict[X]:
nxy = set(edge_dict[X]) - set(edge_dict[Y]) - {Y}
for Z in nxy:
if Y not in d_edge_dict[X]:
d_edge_dict[X].append(Y) # SET Y -> X
B = min(set(Mb[Y]) - {X} - {Z},set(Mb[Z]) - {X} - {Y})
for i in range(len(B)):
for S in itertools.combinations(B,i):
cols = (Y,Z,X) + tuple(S)
pval = mi_test(data[:,cols])
if pval < alpha and X in d_edge_dict[Y]: # Y IS independent of Z given S+X
d_edge_dict[Y].remove(X)
if X in d_edge_dict[Y]:
break
return d_edge_dict
评论列表
文章目录