8
8
import Utils
9
9
10
10
11
-
12
11
def Causal_Discovery_LHM (data , alpha = 0.01 ):
13
- '''
12
+ """
14
13
Function: Causal Discovery in Linear Latent Hierarchical Structure
15
14
Parameter
16
15
data: DataFrame (pandas)
@@ -23,82 +22,72 @@ def Causal_Discovery_LHM(data, alpha=0.01):
23
22
Graph (selected)
24
23
the Causal graph of hierarchical structure
25
24
26
- '''
27
- #Initize Variable
28
- Current_Clusters = []
29
- PureClusters = []
30
- GeneralPureClusters = []
31
- ImpureClusters = []
25
+ """
26
+ # Initize Variable
27
+ Current_Clusters = []
28
+ PureClusters = []
29
+ GeneralPureClusters = []
30
+ ImpureClusters = []
32
31
33
- AllCausalCluster = []
32
+ AllCausalCluster = []
34
33
35
- LatentIndex = {}
34
+ LatentIndex = {}
36
35
LatentNum = 1
37
36
Ora_data = data .copy ()
38
37
39
-
40
38
while True :
41
39
42
40
'''Begin recursive procedure'''
43
41
44
- #Phase I: Finding causal cluster and judge the purity or impurity
45
- Current_Clusters , PureClusters , ImpureClusters , PClusters = FindCausalCluster .FindCausalCluster (data , PureClusters , ImpureClusters , alpha )
42
+ # Phase I: Finding causal cluster and judge the purity or impurity
43
+ Current_Clusters , PureClusters , ImpureClusters , PClusters = FindCausalCluster .FindCausalCluster (data ,
44
+ PureClusters ,
45
+ ImpureClusters ,
46
+ alpha )
46
47
AllCausalCluster = Utils .ExtendList (AllCausalCluster , PClusters )
47
48
AllCausalCluster = Utils .ExtendList (AllCausalCluster , Current_Clusters )
48
49
49
- #debug
50
+ # debug
50
51
print ('Finished Finding Causal Cluster: ' , Current_Clusters , PureClusters , ImpureClusters , PClusters )
51
52
53
+ # Phase II: Check merge rule for the learned clusters and update record variables
52
54
53
- #Phase II: Check merge rule for the learned clusters and update record variables
54
-
55
- Merge_Results , PureClusters , ImpureClusters , AllCausalCluster , GeneralPureClusters , LatentIndex = MC . MergeCausalCluster ( Current_Clusters , PureClusters , ImpureClusters , AllCausalCluster , GeneralPureClusters , LatentIndex , data , Ora_data , alpha )
55
+ Merge_Results , PureClusters , ImpureClusters , AllCausalCluster , GeneralPureClusters , LatentIndex = MC . MergeCausalCluster (
56
+ Current_Clusters , PureClusters , ImpureClusters , AllCausalCluster , GeneralPureClusters , LatentIndex , data ,
57
+ Ora_data , alpha )
56
58
57
59
MergeCluster = Merge_Results [0 ]
58
60
EarlyLearningImpureClusters = Merge_Results [1 ]
59
61
EarlyLearningRemoveClusters = Merge_Results [2 ]
60
62
IntroduceLatent_PureClusters = Merge_Results [3 ]
61
63
RemainingVariables = Merge_Results [4 ]
62
64
63
- print ('Merge_Results: ' ,Merge_Results )
65
+ print ('Merge_Results: ' , Merge_Results )
64
66
print (LatentIndex )
65
67
66
-
67
-
68
68
if len (MergeCluster ) == 0 and len (IntroduceLatent_PureClusters ) == 0 :
69
69
print ('This is nothing be learned !' )
70
- if len (RemainingVariables ) == 0 and len (EarlyLearningImpureClusters ) != 0 :
70
+ if len (RemainingVariables ) == 0 and len (EarlyLearningImpureClusters ) != 0 :
71
71
print ('There are something wrong! In the merger Results !!' , EarlyLearningImpureClusters )
72
72
exit (- 1 )
73
73
elif len (RemainingVariables ) <= 3 :
74
74
print ('Recursive Procedure Finished ! The structure is identified up to a Markov equivalent class.' )
75
75
print (LatentIndex , ImpureClusters )
76
76
break
77
77
78
-
79
-
80
- #Phase III: Introduce latent variable into the graph and update the actived data set
78
+ # Phase III: Introduce latent variable into the graph and update the actived data set
81
79
data , LatentNum , LatentIndex = UpdataData .UpdataData (Merge_Results , LatentNum , LatentIndex , data )
82
80
83
- if len (data ) <= 1 :
81
+ if len (data ) <= 1 :
84
82
print (LatentIndex , ImpureClusters )
85
83
break
86
84
87
85
print (data , LatentNum , LatentIndex , ImpureClusters )
88
86
89
87
'''End recursive procedure'''
90
88
91
- MakeGraph .Make_graph_Impure (LatentIndex ,ImpureClusters )
89
+ MakeGraph .Make_graph_Impure (LatentIndex , ImpureClusters )
92
90
93
- #Phase IV: orientation causal direction among latent variable, including latent measured
91
+ # Phase IV: orientation causal direction among latent variable, including latent measured
94
92
Orientation .Orientation_Cluster (Ora_data , LatentIndex , PureClusters , AllCausalCluster )
95
- #ImpureOrder = Orientation.Orientation_ImpureCluster(Ora_data, LatentIndex, PureClusters, AllCausalCluster, ImpureClusters)
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
93
+ # ImpureOrder = Orientation.Orientation_ImpureCluster(Ora_data, LatentIndex, PureClusters, AllCausalCluster, ImpureClusters)
0 commit comments