Skip to content

cross_signal

cross_signal ¤

CrossSignalAnalytics ¤

CrossSignalAnalytics(
    dataframe: DataFrame, time_column: str = "systime"
)

Cross-Signal Analytics for multi-signal timeseries.

Computes analytical metrics across pairs or groups of signals. Expects wide-format DataFrames (one column per signal, datetime index).

Methods: - granger_causality: Test if one signal Granger-causes another. - transfer_entropy: Estimate information transfer between signals. - pairwise_transfer_entropy: Transfer entropy for all directed pairs. - synchronization_index: Phase or amplitude synchronization between signals. - pairwise_synchronization: Synchronization for all pairs. - lead_lag: Detect lead-lag relationships via cross-correlation. - lead_lag_matrix: Lead-lag for all pairs.

granger_causality ¤

granger_causality(
    cause: str,
    effect: str,
    max_lag: int = 10,
    significance: float = 0.05,
) -> dict

Test whether cause Granger-causes effect using F-test.

Parameters:

Name Type Description Default
cause str

Column name of the potential cause signal.

required
effect str

Column name of the potential effect signal.

required
max_lag int

Maximum number of lags to test.

10
significance float

P-value threshold for declaring causality.

0.05

Returns:

Type Description
dict

Dict with optimal_lag, f_statistic, p_value, is_causal, results_by_lag.

transfer_entropy ¤

transfer_entropy(
    source: str, target: str, lag: int = 1, bins: int = 10
) -> float

Estimate transfer entropy from source to target.

TE(X->Y) = H(Y_future | Y_past) - H(Y_future | Y_past, X_past)

Parameters:

Name Type Description Default
source str

Column name of source signal.

required
target str

Column name of target signal.

required
lag int

Time lag for past values.

1
bins int

Number of bins for discretization.

10

Returns:

Type Description
float

Transfer entropy in bits.

pairwise_transfer_entropy ¤

pairwise_transfer_entropy(
    lag: int = 1, bins: int = 10
) -> pd.DataFrame

Compute transfer entropy for all directed signal pairs.

Returns:

Type Description
DataFrame

Square DataFrame where result.loc[A, B] is TE(A -> B).

synchronization_index ¤

synchronization_index(
    signal_a: str, signal_b: str, method: str = "phase"
) -> float

Measure synchronization between two signals.

Parameters:

Name Type Description Default
signal_a str

First signal column name.

required
signal_b str

Second signal column name.

required
method str

'phase' for phase-locking value, 'amplitude' for envelope correlation.

'phase'

Returns:

Type Description
float

Float between 0 (no sync) and 1 (perfect sync).

pairwise_synchronization ¤

pairwise_synchronization(
    method: str = "phase",
) -> pd.DataFrame

Compute synchronization index for all signal pairs.

Returns:

Type Description
DataFrame

Symmetric DataFrame (like a correlation matrix).

lead_lag ¤

lead_lag(
    signal_a: str,
    signal_b: str,
    max_lag: int = 50,
    significance: float = 0.05,
) -> dict

Detect lead-lag relationship via cross-correlation.

Parameters:

Name Type Description Default
signal_a str

First signal column name.

required
signal_b str

Second signal column name.

required
max_lag int

Maximum lag to test.

50
significance float

P-value threshold.

0.05

Returns:

Type Description
dict

Dict with optimal_lag, correlation_at_lag, leader, follower, p_value, is_significant.

lead_lag_matrix ¤

lead_lag_matrix(max_lag: int = 50) -> pd.DataFrame

Compute lead-lag for all signal pairs.

Returns:

Type Description
DataFrame

DataFrame where result.loc[A, B] is the optimal lag (positive = A leads B).