/
demo_bivariate_pid.py
54 lines (49 loc) · 1.78 KB
/
demo_bivariate_pid.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Import classes
import numpy as np
from idtxl.bivariate_pid import BivariatePID
from idtxl.data import Data
# a) Generate test data
n = 100
alph = 2
x = np.random.randint(0, alph, n)
y = np.random.randint(0, alph, n)
z = np.logical_xor(x, y).astype(int)
data = Data(np.vstack((x, y, z)), 'ps', normalise=False)
# b) Initialise analysis object and define settings for both PID estimators
pid = BivariatePID()
settings_tartu = {'pid_estimator': 'TartuPID', 'lags_pid': [0, 0]}
settings_sydney = {
'alph_s1': alph,
'alph_s2': alph,
'alph_t': alph,
'max_unsuc_swaps_row_parm': 60,
'num_reps': 63,
'max_iters': 1000,
'pid_estimator': 'SydneyPID',
'lags_pid': [0, 0]}
# c) Run Tartu estimator
results_tartu = pid.analyse_single_target(
settings=settings_tartu, data=data, target=2, sources=[0, 1])
# d) Run Sydney estimator
pid = BivariatePID()
results_sydney = pid.analyse_single_target(
settings=settings_sydney, data=data, target=2, sources=[0, 1])
# e) Print results to console
print('\nLogical XOR')
print('Estimator Sydney\t\tTartu\t\tExpected\n')
print('Uni s1 {0:.4f}\t\t{1:.4f}\t\t{2:.2f}'.format(
results_sydney.get_single_target(2)['unq_s1'],
results_tartu.get_single_target(2)['unq_s1'],
0))
print('Uni s2 {0:.4f}\t\t{1:.4f}\t\t{2:.2f}'.format(
results_sydney.get_single_target(2)['unq_s2'],
results_tartu.get_single_target(2)['unq_s2'],
0))
print('Shared s1_s2 {0:.4f}\t\t{1:.4f}\t\t{2:.2f}'.format(
results_sydney.get_single_target(2)['shd_s1_s2'],
results_tartu.get_single_target(2)['shd_s1_s2'],
0))
print('Synergy s1_s2 {0:.4f}\t\t{1:.4f}\t\t{2:.2f}'.format(
results_sydney.get_single_target(2)['syn_s1_s2'],
results_tartu.get_single_target(2)['syn_s1_s2'],
1))