Inner composition alignment (IOTA) is a permutation-based association
measure to detect regulatory links from very short time series.
One time series is reodered with regards to the rank order of a
second one and it monotonicity is evaluated.

Installation and Usage

To install, copy the zip-file into your path and extract all *.R and
*.c files.

IOTA.R can be used without any further compilation.
It allows to calculate pairwise IOTA with different weighting
functions, time reversal or as a signed version (cf. example below).

To have a significance test and the estimation of partial IOTA
being included, compile the *.c files calling R CMD SHLIB *.c
instead of the standard C compiler. The dynamic libraries called by
iota_subroutines.R will be generated in that way.

Note: (1) This has been tested only on a Linux machine.
(2) The program iota_subroutines.R is not running stable
for large input at the moment.

Example

# load or simulate time series as an array of size m*n, with m number of variables
# and n number of time points
TS0 <- matrix(runif(70,0,1),7,10)
# normalize time series
# to estimate the weighted IOTA the time series must have values between zero and one
# depending on the time series different normalization must be used
TimeSeries <- (TS0-apply(TS0,1,min,na.rm=TRUE))/apply((TS0-apply(TS0,1,min,na.rm=TRUE)),1,max,na.rm=TRUE)
###################################################################
###################################################################
# load subroutines
source('IOTA.R')
# calculates pairwise IOTA as described in Hempel et al., PRL (2011) [1]
# possible options for method (weighting functions)
# 'both' (default): uniform and squared sloped
# 'slope': slope
# 'sqrt': squared slope
# 'am': arithmetric mean
# 'gm': geometric mean
# 'hm': harmonic mean
I <- IOTA(TimeSeries,method='sqrt')
# calculates pairwise IOTA based on reversed ordering as described in
# Hempel et al., EPJB (2013) [2]
# options are the same as for IOTA
Ir <- IOTA_reverse(TimeSeries,method='sqrt')
# calculates signed version of pairwise IOTA to indicate up-/downregulation as described
# in Hempel et al., EPJB (2013) [2]
# option 'both' does not work in this case
Is <- IOTAsigned(TimeSeries,method='sqrt')
###################################################################
###################################################################
# to run C subroutines files must be compiled to get a dynamic library using "R CMD SHLIB *.c"
source('iota_subroutines.R')
# number of realizations for significance test
rmax <- 1000
# significance level
alpha <- 0.99
# weighting: uniform (1) or squared slope (2)
w <- 2
# calculated pairwise and partial IOTA and performs a simple permutation-based significance
# test, only most likely connections are selected while the remaining matix entries are set
# to zero
I <- IOTA(TimeSeries,rmax,alpha,w)

References

Hempel, S., Koseska, A., Kurths, J., Nikoloski, Z.:
Inner Composition Alignment for Inferring Directed Networks
from Short Time Series, Phys. Rev. Lett., 107(5), 054101, 2011,
doi:10.1103/PhysRevLett.107.054101

Hempel, S., Koseska, A., Nikoloski, Z.:
Data-driven reconstruction of directed networks,
Europ. Phys. J. B, 86, 250, 2013,
doi:10.1140/epjb/e2013-31111-8