Learn R Programming

⚠️There's a newer version (2.0.7) of this package.Take me there.

Unidimensional and Multidimensional Methods for Recurrence Quantification Analysis with crqa.

The crqa, R package, allows users to conduct a wide range of recurrence-based analyses on single (e.g., auto-recurrence) and multivariate time series (e.g., multidimensional cross-recurrence quantification), examine coupling properties underlying leader-follower relationships (i.e., diagonal-profile methods), as well as, track the evolution of recurrence rate over the time course (i.e., windowed methods).

Installation

# You can install the latest version of crqa on CRAN by running:
install.packages("crqa")

# Or for the development version from GitHub:
# install.packages("devtools")
devtools::install_github("morenococo/crqa")

Usage

crqa comes with some data that can be used to test and study the different functions therein.

data(crqa) # load the data 

RQA on a categorical time-series (auto-recurrence)

First, specify the arguments that will be used in the crqa, core function.

## parameter setting 
delay = 1; embed = 1; rescale = 0; radius = 0.0001;
normalize = 0; mindiagline = 2; minvertline = 2;
tw = 1; whiteline = FALSE; recpt = FALSE; 
side = "both"; method = 'rqa'; metric = 'euclidean';  
datatype = "categorical"

Then, run crqa on a nursery rhyme “The wheels on the bus” by Verna Hills: a vector of 120 strings (i.e., the words of the song),

ans = crqa(text, text, delay, embed, rescale, radius, normalize, 
           mindiagline, minvertline, tw, whiteline, recpt, side, method, metric, 
           datatype)

Have a look at the output, which contains different measures extracted from the recurrence plot (RP), and the RP itself, which can be plotted using the plotRP function.

str(ans)

CRQA on a categorical time-series (cross-recurrence)

Cross-recurrence extends univariate recurrence analysis into a bivariate analysis that allows quantification of the temporal coupling properties of two time series. We use eye-tracking data, 2,000 observations of six possible screen locations that are looked at by a dyad engaged into a joint task.

listener = eyemovement$listener
narrator = eyemovement$narrator

delay = 1; embed = 1; rescale = 0; radius = .01;
normalize = 0; mindiagline = 2; minvertline = 2;
tw = 0; whiteline = FALSE; recpt = FALSE; side = "both"
method = 'crqa'; metric = 'euclidean';  
datatype = "categorical"

ans = crqa(narrator, listener, delay, embed, rescale, radius, normalize, 
           mindiagline, minvertline, tw, whiteline, recpt, side, method, metric, 
           datatype)

Diagonal cross-recurrence profile.

From cross-recurrence plots is possible to extract the diagonal cross-recurrence profiles (DCRPs) and use them to capture leader-follower-relationships.

timecourse = round( seq(-3300,3300,33)/1000, digit = 2)  ## construct the time-course for the diagonal profile

res = drpfromts(narrator, listener, windowsize = 100,
                 radius = 0.001, delay = 1, embed = 1, rescale = 0,
                 normalize = 0, mindiagline = 2, minvertline = 2,
                 tw = 0, whiteline = F, recpt = F, side = 'both', 
                 method = 'crqa', metric = 'euclidean', 
                 datatype = 'continuous')
                 
 ## visualise the diagonal-profile
 profile = res$profile*100 ## extract it from the res object
 
plot(timecourse, profile, type = "l", lwd = 2.5, xlab = "Lag (seconds)",
     ylab = "Recurrence Rate %")                 

Multidimensional cross-recurrence quantification analysis

Multidimensional cross-recurrence quantification analysis allows for the computation of cross-recurrences between two multidimensional time-series. We use hand-movement data from a complex LEGO joint construction task. The dataframe comprises of 5,799 observations.

# reduce the dimensionality of the time series to make the computation faster
# handset = handmovement[1:3000, ]
handset = handmovement[1:1000, ]

P1 = cbind(handset$P1_TT_d, handset$P1_TT_n) 
P2 = cbind(handset$P2_TT_d, handset$P2_TT_n)

delay = 5; embed = 2; rescale = 0; radius = .1;
normalize = 0; mindiagline = 10; minvertline = 10;
tw = 0; whiteline = FALSE; recpt = FALSE; side = "both"
method = 'mdcrqa'; metric = 'euclidean';  
datatype = "continuous"

ans = crqa(P1, P2, delay, embed, rescale, radius, normalize, 
           mindiagline, minvertline, tw, whiteline, recpt, side, method, metric, 
           datatype)

RP = ans$RP
results = unlist(ans[1:10])
print(results)

Authors

Acknowledgments

Copy Link

Version

Install

install.packages('crqa')

Monthly Downloads

340

Version

2.0.1

License

GPL (>= 2)

Maintainer

Moreno I Coco

Last Published

October 29th, 2020

Functions in crqa (2.0.1)

wincrqa

Windowed Recurrence Measures
handmovement

Continuous series of hand movements
windowdrp

Windowed Recurrence Profile
drpfromts

Diagonal recurrence profile
piecewiseRQA

Compute recurrence plots for long time-series data series using a block (piece-wise) method.
lorenzattractor

Simulate the Lorenz Attractor
optimizeParam

Estimate optimal delay, embedding dimension and radius for continuous time-series data
crqa-package

Cross-Recurrence Quantification Analysis for Continuous and Categorial Time-series
crqa

Auto, cross and multidimensional recurrence measures of one, two or multiple time-series, time-delayed and embedded in higher dimensional space
spdiags

Extract diagonal matrices
text

Categorical sequence of words
plotRP

Plot a recurrence matrix
eyemovement

Eye-movement categorical time-series
simts

Simulate dichotomous binary time-series
mdDelay

Find optimal delay from a multi-dimensional dataset.
mdFnn

Find optimal embedding dimension of a multi-dimensional dataset.