Skip to content

Commit 446b9a2

Browse files
authored
Merge pull request #108 from MarkDana/fix-a-numerical-issue-in-fisherz
Fix a numerical issue in fisherz
2 parents 43d6567 + ee09591 commit 446b9a2

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

causallearn/utils/cit.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ def __call__(self, X, Y, condition_set=None):
163163
except np.linalg.LinAlgError:
164164
raise ValueError('Data correlation matrix is singular. Cannot run fisherz test. Please check your data.')
165165
r = -inv[0, 1] / sqrt(inv[0, 0] * inv[1, 1])
166+
if abs(r) >= 1: r = (1. - np.finfo(float).eps) * np.sign(r) # may happen when samplesize is very small or relation is deterministic
166167
Z = 0.5 * log((1 + r) / (1 - r))
167168
X = sqrt(self.sample_size - len(condition_set) - 3) * abs(Z)
168169
p = 2 * (1 - norm.cdf(abs(X)))
@@ -382,6 +383,7 @@ def __call__(self, X, Y, condition_set=None):
382383
except np.linalg.LinAlgError:
383384
raise ValueError('Data correlation matrix is singular. Cannot run fisherz test. Please check your data.')
384385
r = -inv[0, 1] / sqrt(inv[0, 0] * inv[1, 1])
386+
if abs(r) >= 1: r = (1. - np.finfo(float).eps) * np.sign(r) # may happen when samplesize is very small or relation is deterministic
385387
Z = 0.5 * log((1 + r) / (1 - r))
386388
X = sqrt(len(test_wise_deletion_XYcond_rows_index) - len(condition_set) - 3) * abs(Z)
387389
p = 2 * (1 - norm.cdf(abs(X)))

0 commit comments

Comments
 (0)