Information Theory Module

Information theory functions for DRIADA.

This module provides various information-theoretic measures including mutual information, entropy, and conditional information measures.

Information-theoretic measures for analyzing neural data, including entropy estimation, mutual information computation, and advanced corrections for finite data.

Module Components

Usage Example

from driada.information import TimeSeries, get_mi
import numpy as np

# Create time series with matching lengths
n_samples = 1000

# Generate example data
spike_counts = np.random.poisson(3, n_samples)  # Discrete spike counts
position = np.cumsum(np.random.randn(n_samples) * 0.1)  # Continuous position

# Ensure data has no extreme outliers for GCMI
position = np.clip(position, np.percentile(position, 1), np.percentile(position, 99))

neural_data = TimeSeries(spike_counts, discrete=True)
behavior = TimeSeries(position, discrete=False)

# Compute mutual information
mi_value = get_mi(neural_data, behavior, estimator='gcmi')

# Conditional MI (X must be continuous)
from driada.information import conditional_mi
speed = np.abs(np.diff(position, prepend=position[0]))  # Speed from position
speed_ts = TimeSeries(speed[:n_samples], discrete=False)
cmi = conditional_mi(behavior, neural_data, speed_ts)  # I(position; spikes | speed)