<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1d3 20150301//EN" "http://jats.nlm.nih.gov/publishing/1.1d3/JATS-journalpublishing1.dtd">
<article article-type="research-article" dtd-version="1.1d3" xml:lang="en" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">PLoS ONE</journal-id>
<journal-id journal-id-type="publisher-id">plos</journal-id>
<journal-id journal-id-type="pmc">plosone</journal-id>
<journal-title-group>
<journal-title>PLOS ONE</journal-title>
</journal-title-group>
<issn pub-type="epub">1932-6203</issn>
<publisher>
<publisher-name>Public Library of Science</publisher-name>
<publisher-loc>San Francisco, CA USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">PONE-D-18-17628</article-id>
<article-id pub-id-type="doi">10.1371/journal.pone.0212190</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Research Article</subject>
</subj-group>
<subj-group subj-group-type="Discipline-v3"><subject>Physical sciences</subject><subj-group><subject>Mathematics</subject><subj-group><subject>Applied mathematics</subject><subj-group><subject>Algorithms</subject></subj-group></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Research and analysis methods</subject><subj-group><subject>Simulation and modeling</subject><subj-group><subject>Algorithms</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Computational biology</subject><subj-group><subject>Computational neuroscience</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Neuroscience</subject><subj-group><subject>Computational neuroscience</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Neuroscience</subject></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Cell biology</subject><subj-group><subject>Cellular types</subject><subj-group><subject>Animal cells</subject><subj-group><subject>Neurons</subject></subj-group></subj-group></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Neuroscience</subject><subj-group><subject>Cellular neuroscience</subject><subj-group><subject>Neurons</subject></subj-group></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Research and analysis methods</subject><subj-group><subject>Simulation and modeling</subject></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Computer and information sciences</subject><subj-group><subject>Computing methods</subject></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Computer and information sciences</subject><subj-group><subject>Network analysis</subject></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Computer and information sciences</subject><subj-group><subject>Neural networks</subject></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Neuroscience</subject><subj-group><subject>Neural networks</subject></subj-group></subj-group></subj-group></article-categories>
<title-group>
<article-title>An <italic>O(n)</italic> method of calculating Kendall correlations of spike trains</article-title>
<alt-title alt-title-type="running-head">Fast Kendall correlation method</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes" xlink:type="simple">
<contrib-id authenticated="true" contrib-id-type="orcid">http://orcid.org/0000-0002-4147-2026</contrib-id>
<name name-style="western">
<surname>Redman</surname> <given-names>William</given-names></name>
<role content-type="http://credit.casrai.org/">Conceptualization</role>
<role content-type="http://credit.casrai.org/">Formal analysis</role>
<role content-type="http://credit.casrai.org/">Writing – original draft</role>
<role content-type="http://credit.casrai.org/">Writing – review &amp; editing</role>
<xref ref-type="aff" rid="aff001"/>
<xref ref-type="corresp" rid="cor001">*</xref>
</contrib>
</contrib-group>
<aff id="aff001">
<addr-line>Dynamical Neuroscience Program, UC Santa Barbara, Santa Barbara, CA, United States of America</addr-line>
</aff>
<contrib-group>
<contrib contrib-type="editor" xlink:type="simple">
<name name-style="western">
<surname>Daniels</surname> <given-names>Bryan C</given-names></name>
<role>Editor</role>
<xref ref-type="aff" rid="edit1"/>
</contrib>
</contrib-group>
<aff id="edit1">
<addr-line>Arizona State University &amp; Santa Fe Institute, UNITED STATES</addr-line>
</aff>
<author-notes>
<fn fn-type="conflict" id="coi001">
<p>The author has declared no competing interests exist.</p>
</fn>
<corresp id="cor001">* E-mail: <email xlink:type="simple">wredman@ucsb.edu</email></corresp>
</author-notes>
<pub-date pub-type="collection">
<year>2019</year>
</pub-date>
<pub-date pub-type="epub">
<day>14</day>
<month>2</month>
<year>2019</year>
</pub-date>
<volume>14</volume>
<issue>2</issue>
<elocation-id>e0212190</elocation-id>
<history>
<date date-type="received">
<day>12</day>
<month>6</month>
<year>2018</year>
</date>
<date date-type="accepted">
<day>29</day>
<month>1</month>
<year>2019</year>
</date>
</history>
<permissions>
<copyright-year>2019</copyright-year>
<copyright-holder>William Redman</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/" xlink:type="simple">
<license-p>This is an open access article distributed under the terms of the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/" xlink:type="simple">Creative Commons Attribution License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="info:doi/10.1371/journal.pone.0212190"/>
<abstract>
<p>The ability to record from increasingly large numbers of neurons, and the increasing attention being paid to large scale neural network simulations, demands computationally fast algorithms to compute relevant statistical measures. We present an <italic>O</italic>(<italic>n</italic>) algorithm for calculating the Kendall correlation of spike trains, a correlation measure that is becoming especially recognized as an important tool in neuroscience. We show that our method is around 50 times faster than the <italic>O</italic> (<italic>n</italic> ln <italic>n</italic>) method which is a current standard for quickly computing the Kendall correlation. In addition to providing a faster algorithm, we emphasize the role that taking the specific nature of spike trains had on reducing the run time. We imagine that there are many other useful algorithms that can be even more significantly sped up when taking this into consideration. A MATLAB function executing the method described here has been made freely available on-line.</p>
</abstract>
<funding-group>
<funding-statement>The author received no specific funding for this work.</funding-statement>
</funding-group>
<counts>
<fig-count count="1"/>
<table-count count="1"/>
<page-count count="7"/>
</counts>
<custom-meta-group>
<custom-meta id="data-availability">
<meta-name>Data Availability</meta-name>
<meta-value>There is no data for this paper. The code used to evaluate the two principle methods discussed in the manuscript have been made available on Github (<ext-link ext-link-type="uri" xlink:href="https://github.com/william-redman/Kendall-Correlation-for-Large-Spike-Trains" xlink:type="simple">https://github.com/william-redman/Kendall-Correlation-for-Large-Spike-Trains</ext-link>) as mentioned in <xref ref-type="supplementary-material" rid="pone.0212190.s001">S1 Code</xref>.</meta-value>
</custom-meta>
</custom-meta-group>
</article-meta>
</front>
<body>
<sec id="sec001" sec-type="intro">
<title>Introduction</title>
<p>The Kendall correlation was first introduced by Maurice Kendall in 1938 [<xref ref-type="bibr" rid="pone.0212190.ref001">1</xref>]. As a rank correlation, it takes into account the specific ordering of the elements of the sets it is correlating. A Kendall correlation, <italic>τ</italic>, equal to 1 is interpreted as the elements in the two sets being ordered in the same way. <italic>τ</italic> = −1 is interpreted as the elements in the two sets being ordered exactly oppositely. And <italic>τ</italic> = 0 is interpreted as the ordering of the two sets having no relation to one another.</p>
<p>Despite being used in a number of other scientific fields [<xref ref-type="bibr" rid="pone.0212190.ref002">2</xref>–<xref ref-type="bibr" rid="pone.0212190.ref004">4</xref>], it is only recently that the Kendall correlation has started to become appreciated, and implemented, in neuroscience. In particular, due to the usual sparseness of spike trains (i.e. the large number of zeros), the Kendall correlation has been shown to be particularly appropriate for computing pairwise correlations between spike trains, especially as compared to Pearson’s correlation [<xref ref-type="bibr" rid="pone.0212190.ref005">5</xref>–<xref ref-type="bibr" rid="pone.0212190.ref007">7</xref>]. Recently, it was used to explore the place field structure of place cells in the hippocampus [<xref ref-type="bibr" rid="pone.0212190.ref007">7</xref>], and generally pairwise correlations can be useful for revealing aspects of the behavior of the recorded, or constructed (in the case of computational/theoretical studies), networks. We note that for the remainder of the paper, by spike train we mean specifically a vector of length <italic>n</italic> whose i<sup>th</sup> element is a 1 if the corresponding neuron fired at least once during the i<sup>th</sup> time bin of the recorded interval and 0 otherwise. This is a frequently used way to talk about spike trains and is appropriate if firing is particularly sparse or if the time bin size is sufficiently small.</p>
<p>A simple, non-optimized, way of computing the Kendall correlation of two row vectors, <italic>X</italic> and <italic>Y</italic>, is MATLAB’s function, corr(X, Y, ‘Type’, ‘Kendall’). On MATLAB’s website [<xref ref-type="bibr" rid="pone.0212190.ref008">8</xref>], they define the Kendall correlation as
<disp-formula id="pone.0212190.e001"><alternatives><graphic id="pone.0212190.e001g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e001" xlink:type="simple"/><mml:math display="block" id="M1"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mi>τ</mml:mi> <mml:mo>=</mml:mo> <mml:mfrac><mml:mrow><mml:mn>2</mml:mn> <mml:mi>K</mml:mi></mml:mrow> <mml:mrow><mml:mi>n</mml:mi> <mml:mo>(</mml:mo> <mml:mi>n</mml:mi> <mml:mo>-</mml:mo> <mml:mn>1</mml:mn> <mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(1)</label></disp-formula>
where <inline-formula id="pone.0212190.e002"><alternatives><graphic id="pone.0212190.e002g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e002" xlink:type="simple"/><mml:math display="inline" id="M2"><mml:mrow><mml:mi>K</mml:mi> <mml:mo>=</mml:mo> <mml:msubsup><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn></mml:mrow> <mml:mrow><mml:mi>n</mml:mi> <mml:mo>-</mml:mo> <mml:mn>1</mml:mn></mml:mrow></mml:msubsup> <mml:msubsup><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>j</mml:mi> <mml:mo>=</mml:mo> <mml:mi>i</mml:mi> <mml:mo>+</mml:mo> <mml:mn>1</mml:mn></mml:mrow> <mml:mi>n</mml:mi></mml:msubsup> <mml:msup><mml:mi>ξ</mml:mi> <mml:mo>*</mml:mo></mml:msup> <mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>,</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>,</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>,</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></alternatives></inline-formula>, and
<disp-formula id="pone.0212190.e003"><alternatives><graphic id="pone.0212190.e003g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e003" xlink:type="simple"/><mml:math display="block" id="M3"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>ξ</mml:mi> <mml:mo>*</mml:mo></mml:msup> <mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>,</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>,</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>,</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>=</mml:mo> <mml:mo>{</mml:mo> <mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mn>1</mml:mn></mml:mtd> <mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.em"/><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>&gt;</mml:mo> <mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr> <mml:mtr><mml:mtd columnalign="left"><mml:mn>0</mml:mn></mml:mtd> <mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.em"/><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>=</mml:mo> <mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr> <mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo>-</mml:mo> <mml:mn>1</mml:mn></mml:mrow></mml:mtd> <mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.em"/><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>X</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>&lt;</mml:mo> <mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable> <mml:mo/></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(2)</label></disp-formula></p>
<p>However, as additionally stated, MATLAB’s function also has a normalization constant in the calculation of <italic>τ</italic> that adjusts for ties [<xref ref-type="bibr" rid="pone.0212190.ref008">8</xref>]. A Kendall correlation that takes this additional consideration into account is often referred to as <italic>τ</italic><sub><italic>b</italic></sub> in the literature [<xref ref-type="bibr" rid="pone.0212190.ref009">9</xref>]. Therefore, the true way in which MATLAB calculates the Kendall correlation of the row vectors <italic>X</italic> and <italic>Y</italic> is
<disp-formula id="pone.0212190.e004"><alternatives><graphic id="pone.0212190.e004g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e004" xlink:type="simple"/><mml:math display="block" id="M4"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mi>τ</mml:mi> <mml:mo>=</mml:mo> <mml:mfrac><mml:mi>K</mml:mi> <mml:mrow><mml:mroot><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>0</mml:mn></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>1</mml:mn></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow/></mml:mroot> <mml:mspace width="2.84526pt"/><mml:mroot><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>0</mml:mn></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>2</mml:mn></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow/></mml:mroot></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(3)</label></disp-formula>
where <italic>n</italic><sub>0</sub> = <italic>n</italic>(<italic>n</italic> − 1)/2, <italic>n</italic><sub>1</sub> = ∑<sub><italic>i</italic></sub> <italic>t</italic><sub><italic>i</italic></sub>(<italic>t</italic><sub><italic>i</italic></sub> − 1)/2, and <italic>n</italic><sub>2</sub> = ∑<sub><italic>j</italic></sub> <italic>u</italic><sub><italic>j</italic></sub>(<italic>u</italic><sub><italic>j</italic></sub> − 1)/2. The sums of <italic>n</italic><sub>1</sub> and <italic>n</italic><sub>2</sub> are over all the distinct values <italic>X</italic> and <italic>Y</italic> take (respectively), and <italic>t</italic><sub><italic>i</italic></sub> is the number of elements in <italic>X</italic> equal to the i<sup>th</sup> distinct value of <italic>X</italic> (<italic>u</italic><sub><italic>j</italic></sub> is the same, but for <italic>Y</italic>).</p>
<p>As can be seen from the definition of <italic>K</italic>, calculating <italic>τ</italic> requires summing over many of the pairs of values in <italic>X</italic> and <italic>Y</italic> (in fact, <italic>n</italic>(<italic>n</italic> − 1)/2 pairs, which means that the run time is <italic>O</italic>(<italic>n</italic><sup>2</sup>)). For large spike trains, this results in a large computation time. For this reason, a faster, <italic>O</italic>(<italic>n</italic> ln <italic>n</italic>) method was developed [<xref ref-type="bibr" rid="pone.0212190.ref010">10</xref>], which makes use of the existence of a mapping between sorting and Kendall correlation. Additional work has been done using sorting and balanced tree structures in cutting edge ways to decrease the run time of other <italic>O</italic>(<italic>n</italic> ln <italic>n</italic>) methods [<xref ref-type="bibr" rid="pone.0212190.ref011">11</xref>]. While these methods—we will below consider specifically Knight’s method [<xref ref-type="bibr" rid="pone.0212190.ref010">10</xref>]—have great power because they are valid for arbitrary vectors, like the <italic>O</italic>(<italic>n</italic><sup>2</sup>) method implemented by MATLAB, the generality is unnecessary for computing the Kendall correlation of spike trains. Below, we specifically take the inherent structure of spike trains (that is, that their elements take values only from {0, 1}) under consideration to derive a faster method of calculating Kendall correlations specific to spike trains. We show that our new method is <italic>O</italic>(<italic>n</italic>) and then examine how much faster our method is than Knight’s method under various conditions.</p>
</sec>
<sec id="sec002" sec-type="materials|methods">
<title>Materials and methods</title>
<p>As mentioned above, the motivating idea for the following method is that, since spike trains take values only in {0, 1}, by taking this fact under consideration, we might be able to speed up the calculation of the Kendall correlation. In particular, we show that we can write an explicit formula for <italic>K</italic> (from <xref ref-type="disp-formula" rid="pone.0212190.e001">Eq (1)</xref>) that can be evaluated very quickly—in fact, in <italic>O</italic>(<italic>n</italic>).</p>
<p>Considering <xref ref-type="disp-formula" rid="pone.0212190.e003">Eq (2)</xref>, we see that there are two principle cases we need to consider when calculating <italic>K</italic>: the case where <italic>X</italic><sub><italic>i</italic></sub> and <italic>X</italic><sub><italic>j</italic></sub> are in the same order as <italic>Y</italic><sub><italic>i</italic></sub> and <italic>Y</italic><sub><italic>j</italic></sub> (i.e. where <italic>ξ</italic>*(<italic>X</italic><sub><italic>i</italic></sub>, <italic>X</italic><sub><italic>j</italic></sub>, <italic>Y</italic><sub><italic>i</italic></sub>, <italic>Y</italic><sub><italic>j</italic></sub>) = 1), and the case where they are in the opposite order (i.e. where <italic>ξ</italic>*(<italic>X</italic><sub><italic>i</italic></sub>, <italic>X</italic><sub><italic>j</italic></sub>, <italic>Y</italic><sub><italic>i</italic></sub>, <italic>Y</italic><sub><italic>j</italic></sub>) = −1). The third case, <italic>ξ</italic>*(<italic>X</italic><sub><italic>i</italic></sub>, <italic>X</italic><sub><italic>j</italic></sub>, <italic>Y</italic><sub><italic>i</italic></sub>, <italic>Y</italic><sub><italic>j</italic></sub>) = 0, obviously doesn’t contribute to the value of <italic>K</italic>. We now consider these two cases separately.</p>
<sec id="sec003">
<title>Same order case</title>
<p>This case happens only when <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 1 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 0, or when <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 0 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 1 (for <italic>i</italic> &lt; <italic>j</italic>).</p>
<p>We define the <italic>active set</italic> of <italic>X</italic> to be
<disp-formula id="pone.0212190.e005"><alternatives><graphic id="pone.0212190.e005g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e005" xlink:type="simple"/><mml:math display="block" id="M5"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>A</mml:mi> <mml:mi>X</mml:mi></mml:msup> <mml:mo>=</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>i</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn> <mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(4)</label></disp-formula>
where 1 ≤ <italic>i</italic> ≤ <italic>n</italic>. We similarly define the active set of <italic>Y</italic>, <italic>A</italic><sup><italic>Y</italic></sup>.</p>
<p>We now define the <italic>combined active set</italic>, or the set of positions in the spike trains such that <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 1, as
<disp-formula id="pone.0212190.e006"><alternatives><graphic id="pone.0212190.e006g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e006" xlink:type="simple"/><mml:math display="block" id="M6"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mi>A</mml:mi> <mml:mo>=</mml:mo> <mml:msup><mml:mi>A</mml:mi> <mml:mi>X</mml:mi></mml:msup> <mml:mo>∩</mml:mo> <mml:msup><mml:mi>A</mml:mi> <mml:mi>Y</mml:mi></mml:msup> <mml:mo>=</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>i</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>+</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>=</mml:mo> <mml:mn>2</mml:mn> <mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(5)</label></disp-formula></p>
<p>Now let <italic>N</italic> = {1, 2, …, <italic>n</italic>}. We define the <italic>silent set</italic> of <italic>X</italic> as
<disp-formula id="pone.0212190.e007"><alternatives><graphic id="pone.0212190.e007g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e007" xlink:type="simple"/><mml:math display="block" id="M7"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>S</mml:mi> <mml:mi>X</mml:mi></mml:msup> <mml:mo>=</mml:mo> <mml:mi>N</mml:mi> <mml:mo>\</mml:mo> <mml:msup><mml:mi>A</mml:mi> <mml:mi>X</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(6)</label></disp-formula>
where ⋅\⋅ is the set minus operator. We similarly define the silent set of <italic>Y</italic>, <italic>S</italic><sup><italic>Y</italic></sup>.</p>
<p>We now define the <italic>combined silent set</italic>, or the set of positions in the spike trains such that <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 0, as
<disp-formula id="pone.0212190.e008"><alternatives><graphic id="pone.0212190.e008g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e008" xlink:type="simple"/><mml:math display="block" id="M8"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mi>S</mml:mi> <mml:mo>=</mml:mo> <mml:msup><mml:mi>S</mml:mi> <mml:mi>X</mml:mi></mml:msup> <mml:mo>∩</mml:mo> <mml:msup><mml:mi>S</mml:mi> <mml:mi>Y</mml:mi></mml:msup> <mml:mo>=</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:msub><mml:mi>X</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>+</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>j</mml:mi></mml:msub> <mml:mo>=</mml:mo> <mml:mn>0</mml:mn> <mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(7)</label></disp-formula>
With Eqs <xref ref-type="disp-formula" rid="pone.0212190.e006">(5)</xref> and <xref ref-type="disp-formula" rid="pone.0212190.e008">(7)</xref>, we can find the contribution to <italic>K</italic> from this case. The number of ways <italic>ξ</italic>*(<italic>X</italic><sub><italic>i</italic></sub>, <italic>X</italic><sub><italic>j</italic></sub>, <italic>Y</italic><sub><italic>i</italic></sub>, <italic>Y</italic><sub><italic>j</italic></sub>) = 1, <italic>K</italic><sup>+</sup>, is
<disp-formula id="pone.0212190.e009"><alternatives><graphic id="pone.0212190.e009g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e009" xlink:type="simple"/><mml:math display="block" id="M9"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>K</mml:mi> <mml:mo>+</mml:mo></mml:msup> <mml:mo>=</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>A</mml:mi></mml:mrow></mml:munder> <mml:mo>|</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>S</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo></mml:mrow> <mml:mo>|</mml:mo> <mml:mo>+</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>S</mml:mi></mml:mrow></mml:munder> <mml:mo>|</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>A</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>j</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>i</mml:mi> <mml:mo>}</mml:mo></mml:mrow> <mml:mo>|</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(8)</label></disp-formula>
where |⋅| is the function that returns the number of elements of the set. We see clearly that the first sum in <italic>K</italic><sup>+</sup> is the number of ways <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 1 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 0, and the second sum in <italic>K</italic><sup>+</sup> is the number of ways <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 0 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 1.</p>
<p>By the relationship between the two sums in <xref ref-type="disp-formula" rid="pone.0212190.e009">Eq (8)</xref>, we can simplify <italic>K</italic><sup>+</sup> to be
<disp-formula id="pone.0212190.e010"><alternatives><graphic id="pone.0212190.e010g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e010" xlink:type="simple"/><mml:math display="block" id="M10"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>K</mml:mi> <mml:mo>+</mml:mo></mml:msup> <mml:mo>=</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>A</mml:mi></mml:mrow></mml:munder> <mml:mo>|</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>S</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo></mml:mrow> <mml:mo>|</mml:mo> <mml:mo>+</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>A</mml:mi></mml:mrow></mml:munder> <mml:mo>(</mml:mo> <mml:mo>|</mml:mo> <mml:mi>S</mml:mi> <mml:mo>|</mml:mo> <mml:mo>-</mml:mo> <mml:mo>|</mml:mo> <mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>S</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo> <mml:mo>|</mml:mo> <mml:mo>)</mml:mo> <mml:mo>=</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mi>A</mml:mi></mml:mrow></mml:munder> <mml:mrow><mml:mo>|</mml:mo> <mml:mi>S</mml:mi> <mml:mo>|</mml:mo></mml:mrow> <mml:mo>=</mml:mo> <mml:mrow><mml:mo>|</mml:mo> <mml:mi>A</mml:mi> <mml:mo>|</mml:mo></mml:mrow> <mml:mo>·</mml:mo> <mml:mrow><mml:mo>|</mml:mo> <mml:mi>S</mml:mi> <mml:mo>|</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(9)</label></disp-formula></p>
</sec>
<sec id="sec004">
<title>Opposite order case</title>
<p>This case happens only when <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 1 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 0, or <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 0 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 1 (for <italic>i</italic> &lt; <italic>j</italic>).</p>
<p>We define the <italic>difference of X</italic> as
<disp-formula id="pone.0212190.e011"><alternatives><graphic id="pone.0212190.e011g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e011" xlink:type="simple"/><mml:math display="block" id="M11"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mo>Δ</mml:mo> <mml:mi>X</mml:mi> <mml:mo>=</mml:mo> <mml:msup><mml:mi>A</mml:mi> <mml:mi>X</mml:mi></mml:msup> <mml:mo>\</mml:mo> <mml:msup><mml:mi>A</mml:mi> <mml:mi>Y</mml:mi></mml:msup> <mml:mo>=</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>i</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>Y</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn> <mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(10)</label></disp-formula></p>
<p>We similarly define the difference of <italic>Y</italic>, Δ<italic>Y</italic>. Δ<italic>X</italic> is the set of positions in the spike trains where <italic>X</italic><sub><italic>i</italic></sub> = 1 and <italic>Y</italic><sub><italic>i</italic></sub> = 0 (vice versa for Δ<italic>Y</italic>).</p>
<p>With these we can now find the contribution to <italic>K</italic> from this case. The number of ways <italic>ξ</italic>*(<italic>X</italic><sub><italic>i</italic></sub>, <italic>X</italic><sub><italic>j</italic></sub>, <italic>Y</italic><sub><italic>i</italic></sub>, <italic>Y</italic><sub><italic>j</italic></sub>) = −1, <italic>K</italic><sup>−</sup>, is
<disp-formula id="pone.0212190.e012"><alternatives><graphic id="pone.0212190.e012g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e012" xlink:type="simple"/><mml:math display="block" id="M12"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>K</mml:mi> <mml:mo>-</mml:mo></mml:msup> <mml:mo>=</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>X</mml:mi></mml:mrow></mml:munder> <mml:mo>|</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>Y</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo></mml:mrow> <mml:mo>|</mml:mo> <mml:mo>+</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>Y</mml:mi></mml:mrow></mml:munder> <mml:mo>|</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>X</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo></mml:mrow> <mml:mo>|</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(11)</label></disp-formula>
where the first sum in <italic>K</italic><sup>−</sup> is the number of pairs (<italic>i</italic>, <italic>j</italic>) (where <italic>i</italic> &lt; <italic>j</italic>) such that <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 1 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 0, and the second sum in <italic>K</italic><sup>−</sup> is the number of pairs (<italic>i</italic>, <italic>j</italic>) such that <italic>X</italic><sub><italic>i</italic></sub> = <italic>Y</italic><sub><italic>j</italic></sub> = 0 and <italic>X</italic><sub><italic>j</italic></sub> = <italic>Y</italic><sub><italic>i</italic></sub> = 1.</p>
<p>Again, the sums are related (as they were in <xref ref-type="disp-formula" rid="pone.0212190.e009">Eq (8)</xref>), so we can re-write <italic>K</italic><sup>−</sup> as
<disp-formula id="pone.0212190.e013"><alternatives><graphic id="pone.0212190.e013g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e013" xlink:type="simple"/><mml:math display="block" id="M13"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msup><mml:mi>K</mml:mi> <mml:mo>-</mml:mo></mml:msup> <mml:mo>=</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>X</mml:mi></mml:mrow></mml:munder> <mml:mo>|</mml:mo> <mml:mrow><mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>Y</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo></mml:mrow> <mml:mo>|</mml:mo> <mml:mo>+</mml:mo> <mml:munder><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>X</mml:mi></mml:mrow></mml:munder> <mml:mo>(</mml:mo> <mml:mo>|</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>Y</mml:mi> <mml:mo>|</mml:mo> <mml:mo>-</mml:mo> <mml:mo>|</mml:mo> <mml:mo>{</mml:mo> <mml:mi>j</mml:mi> <mml:mo>∈</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>Y</mml:mi> <mml:mspace width="2.84526pt"/><mml:mo>|</mml:mo> <mml:mspace width="2.84526pt"/><mml:mi>i</mml:mi> <mml:mo>&lt;</mml:mo> <mml:mi>j</mml:mi> <mml:mo>}</mml:mo> <mml:mo>|</mml:mo> <mml:mo>)</mml:mo> <mml:mo>=</mml:mo> <mml:mrow><mml:mo>|</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>X</mml:mi> <mml:mo>|</mml:mo></mml:mrow> <mml:mo>·</mml:mo> <mml:mrow><mml:mo>|</mml:mo> <mml:mo>Δ</mml:mo> <mml:mi>Y</mml:mi> <mml:mo>|</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(12)</label></disp-formula></p>
</sec>
<sec id="sec005">
<title>Ties</title>
<p>The final thing needed in order to calculate <italic>K</italic> is the number of tied pairs in <italic>X</italic> and <italic>Y</italic>, <italic>n</italic><sub>1</sub> and <italic>n</italic><sub>2</sub>. This is easy in the case of spike trains, as the number of ties for the value 1 is just the sum of all the elements in the train, and the number of ties for the value 0 is just <italic>n</italic> minus that sum. Therefore, using the equation given for <italic>n</italic><sub>1</sub>, we have
<disp-formula id="pone.0212190.e014"><alternatives><graphic id="pone.0212190.e014g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e014" xlink:type="simple"/><mml:math display="block" id="M14"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msub><mml:mi>n</mml:mi> <mml:mn>1</mml:mn></mml:msub> <mml:mo>=</mml:mo> <mml:mfrac><mml:mn>1</mml:mn> <mml:mn>2</mml:mn></mml:mfrac> <mml:mo>(</mml:mo> <mml:munderover><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn></mml:mrow> <mml:mi>n</mml:mi></mml:munderover> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>(</mml:mo> <mml:munderover><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn></mml:mrow> <mml:mi>n</mml:mi></mml:munderover> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:mn>1</mml:mn> <mml:mo>)</mml:mo> <mml:mo>+</mml:mo> <mml:mo>(</mml:mo> <mml:mi>n</mml:mi> <mml:mo>-</mml:mo> <mml:munderover><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn></mml:mrow> <mml:mi>n</mml:mi></mml:munderover> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>)</mml:mo> <mml:mo>(</mml:mo> <mml:mi>n</mml:mi> <mml:mo>-</mml:mo> <mml:munderover><mml:mo>∑</mml:mo> <mml:mrow><mml:mi>i</mml:mi> <mml:mo>=</mml:mo> <mml:mn>1</mml:mn></mml:mrow> <mml:mi>n</mml:mi></mml:munderover> <mml:msub><mml:mi>X</mml:mi> <mml:mi>i</mml:mi></mml:msub> <mml:mo>-</mml:mo> <mml:mn>1</mml:mn> <mml:mo>)</mml:mo> <mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(13)</label></disp-formula></p>
<p>The same is true for <italic>n</italic><sub>2</sub> (with <italic>Y</italic> in place of <italic>X</italic>).</p>
<p>Therefore, with Eqs <xref ref-type="disp-formula" rid="pone.0212190.e010">(9)</xref>, <xref ref-type="disp-formula" rid="pone.0212190.e013">(12)</xref> and <xref ref-type="disp-formula" rid="pone.0212190.e014">(13)</xref>, we can write the Kendall correlation, <xref ref-type="disp-formula" rid="pone.0212190.e004">Eq (3)</xref>, of two neural spike trains as
<disp-formula id="pone.0212190.e015"><alternatives><graphic id="pone.0212190.e015g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e015" xlink:type="simple"/><mml:math display="block" id="M15"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mi>τ</mml:mi> <mml:mo>=</mml:mo> <mml:mfrac><mml:mrow><mml:msup><mml:mi>K</mml:mi> <mml:mo>+</mml:mo></mml:msup> <mml:mo>-</mml:mo> <mml:msup><mml:mi>K</mml:mi> <mml:mo>-</mml:mo></mml:msup></mml:mrow> <mml:mrow><mml:mroot><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>0</mml:mn></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>1</mml:mn></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow/></mml:mroot> <mml:mspace width="2.84526pt"/><mml:mroot><mml:mrow><mml:mo>(</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>0</mml:mn></mml:msub> <mml:mo>-</mml:mo> <mml:msub><mml:mi>n</mml:mi> <mml:mn>2</mml:mn></mml:msub> <mml:mo>)</mml:mo></mml:mrow> <mml:mrow/></mml:mroot></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(14)</label></disp-formula>
where <italic>K</italic><sup>+</sup>, <italic>K</italic><sup>−</sup>, <italic>n</italic><sub>0</sub>, <italic>n</italic><sub>1</sub>, and <italic>n</italic><sub>2</sub> can be found with the formulas we have given for them. Note that Eqs <xref ref-type="disp-formula" rid="pone.0212190.e006">(5)</xref>, <xref ref-type="disp-formula" rid="pone.0212190.e008">(7)</xref>, <xref ref-type="disp-formula" rid="pone.0212190.e010">(9)</xref>, <xref ref-type="disp-formula" rid="pone.0212190.e011">(10)</xref>, <xref ref-type="disp-formula" rid="pone.0212190.e013">(12)</xref> and <xref ref-type="disp-formula" rid="pone.0212190.e014">(13)</xref> are all linear in <italic>n</italic>, i.e. <italic>O</italic>(<italic>n</italic>). Therefore, <xref ref-type="disp-formula" rid="pone.0212190.e015">Eq (14)</xref> is <italic>O</italic>(<italic>n</italic>).</p>
</sec>
<sec id="sec006">
<title>Comparison</title>
<p>To compare the presented method, <xref ref-type="disp-formula" rid="pone.0212190.e015">Eq (14)</xref>, with Knight’s method and MATLAB’s method, we created random binary vectors with a specified “sparseness”. Here sparseness refers to the expected fraction of 1s present in the vectors (or, in the neural context, the expected activity over a given time interval). We generated these vectors by using MATLAB’s rand function, with which we generated 1 × <italic>n</italic> vectors with elements uniformly drawn from (0, 1) [<xref ref-type="bibr" rid="pone.0212190.ref012">12</xref>]. We then set every element in each vector that had a value less than the sparseness we specified to 1, and all other elements to 0. Put another way, if <italic>X</italic><sup>rand</sup> was our random 1 × <italic>n</italic> vector with elements drawn from (0, 1), then we used the transform
<disp-formula id="pone.0212190.e016"><alternatives><graphic id="pone.0212190.e016g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e016" xlink:type="simple"/><mml:math display="block" id="M16"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>X</mml:mi> <mml:mo>^</mml:mo></mml:mover> <mml:mi>i</mml:mi> <mml:mtext>rand</mml:mtext></mml:msubsup> <mml:mo>=</mml:mo> <mml:mo>{</mml:mo> <mml:mtable><mml:mtr><mml:mtd columnalign="left"><mml:mn>1</mml:mn></mml:mtd> <mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.em"/><mml:msubsup><mml:mi>X</mml:mi> <mml:mi>i</mml:mi> <mml:mtext>rand</mml:mtext></mml:msubsup> <mml:mo>&lt;</mml:mo> <mml:mtext>sparseness</mml:mtext></mml:mrow></mml:mtd></mml:mtr> <mml:mtr><mml:mtd columnalign="left"><mml:mn>0</mml:mn></mml:mtd> <mml:mtd columnalign="left"><mml:mrow><mml:mspace width="1.em"/><mml:mtext>otherwise</mml:mtext></mml:mrow></mml:mtd></mml:mtr></mml:mtable> <mml:mo/></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(15)</label></disp-formula></p>
<p>We then used MATLAB’s method, Knight’s method, and our method to calculate the Kendall correlation of <inline-formula id="pone.0212190.e017"><alternatives><graphic id="pone.0212190.e017g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e017" xlink:type="simple"/><mml:math display="inline" id="M17"><mml:msup><mml:mover accent="true"><mml:mi>X</mml:mi> <mml:mo>^</mml:mo></mml:mover> <mml:mtext>rand</mml:mtext></mml:msup></mml:math></alternatives></inline-formula> and <inline-formula id="pone.0212190.e018"><alternatives><graphic id="pone.0212190.e018g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e018" xlink:type="simple"/><mml:math display="inline" id="M18"><mml:msup><mml:mover accent="true"><mml:mi>Y</mml:mi> <mml:mo>^</mml:mo></mml:mover> <mml:mtext>rand</mml:mtext></mml:msup></mml:math></alternatives></inline-formula> (where <inline-formula id="pone.0212190.e019"><alternatives><graphic id="pone.0212190.e019g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pone.0212190.e019" xlink:type="simple"/><mml:math display="inline" id="M19"><mml:msup><mml:mover accent="true"><mml:mi>Y</mml:mi> <mml:mo>^</mml:mo></mml:mover> <mml:mtext>rand</mml:mtext></mml:msup></mml:math></alternatives></inline-formula> was similarly generated). To record the time it took for each method, we used MATLAB’s built-in tic toc function [<xref ref-type="bibr" rid="pone.0212190.ref013">13</xref>]. We did all of the calculations on a 2014 MacBook Air (1.4 GHz Intel Core i5) running MATLAB 2015a.</p>
<p>For details of how we implemented Knight’s method, see the <xref ref-type="supplementary-material" rid="pone.0212190.s002">S1 Text</xref>.</p>
</sec>
</sec>
<sec id="sec007" sec-type="results">
<title>Results</title>
<p>The results of comparing our method to Knight’s and MATLAB’s methods, are shown in <xref ref-type="fig" rid="pone.0212190.g001">Fig 1</xref>. Unsurprisingly, both our method and Knight’s method show considerable advantage over the <italic>O</italic>(<italic>n</italic><sup>2</sup>) method that is implemented by MATLAB [<xref ref-type="bibr" rid="pone.0212190.ref008">8</xref>] (<xref ref-type="fig" rid="pone.0212190.g001">Fig 1a</xref>). However, our method is definitively faster. Importantly, this holds true for a range of sparseness values (<xref ref-type="fig" rid="pone.0212190.g001">Fig 1b</xref>), although our method shows a slight slowing down for larger sparseness values, while Knight’s method does not. Our method is on average ≈ 35 times faster for a sparseness of 25% and ≈ 60 times faster for a sparseness of 1%. Because a sparseness of 25%, the maximum we tested, is unrealistic for any neural simulation or recording, our method is faster than Knight’s in a neurally plausible regime.</p>
<fig id="pone.0212190.g001" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0212190.g001</object-id>
<label>Fig 1</label>
<caption>
<title>Run times for all three methods.</title>
<p>(a) The run time as a function of spike train length using Knight’s method (black), our method (red), and the standard MATLAB method (green) for a sparseness of 5%. <italic>N</italic> = 10 and error bars are standard deviation. (b) The run time as a function of spike train length for different sparseness values: dotted line (1%), dashed line (5%), solid line (25%). <italic>N</italic> = 100, error bars are standard deviation, and colors are the same as in (a).</p>
</caption>
<graphic mimetype="image" position="float" xlink:href="info:doi/10.1371/journal.pone.0212190.g001" xlink:type="simple"/>
</fig>
<p>Finally, for all the correlations between spike trains we computed, we checked that the two Kendall correlation values were within 10<sup>−12</sup> of MATLAB’s Kendall correlation function (see <xref ref-type="table" rid="pone.0212190.t001">Table 1</xref>). Therefore, we feel confident that our method is correct and equivalent (up to machine error) to MATLAB’s method.</p>
<table-wrap id="pone.0212190.t001" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0212190.t001</object-id>
<label>Table 1</label>
<caption>
<title>Examples of calculated Kendall correlation for all three methods.</title>
<p>Kendall correlation of the spike trains listed at the top of the table (both with length 10<sup>4</sup>) for the three methods.</p>
</caption>
<alternatives>
<graphic id="pone.0212190.t001g" mimetype="image" position="float" xlink:href="info:doi/10.1371/journal.pone.0212190.t001" xlink:type="simple"/>
<table border="0" frame="box" rules="all">
<colgroup>
<col align="left" valign="middle"/>
<col align="left" valign="middle"/>
<col align="left" valign="middle"/>
</colgroup>
<thead>
<tr>
<th align="center"/>
<th align="center">(1010…), (110110…)</th>
<th align="center">(011011…), (110110…)</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><italic>O</italic>(<italic>n</italic>) Method</td>
<td align="center">−2.121373383860751 × 10<sup>−4</sup></td>
<td align="char" char=".">−0.500037496719090</td>
</tr>
<tr>
<td align="center">Knight’s Method</td>
<td align="center">−2.121373383860751 × 10<sup>−4</sup></td>
<td align="char" char=".">−0.500037496719090</td>
</tr>
<tr>
<td align="center">MATLAB’s Method</td>
<td align="center">−2.121373383860751 × 10<sup>−4</sup></td>
<td align="char" char=".">−0.500037496719090</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
</sec>
<sec id="sec008" sec-type="conclusions">
<title>Discussion</title>
<p>We have presented a novel method to calculate Kendall correlations of large spike trains, and have demonstrated its advantage (in terms of computation time) to the standard for fast Kendall correlation computation [<xref ref-type="bibr" rid="pone.0212190.ref010">10</xref>]. We achieved this by specifically taking the structure of spike trains (the fact that they are made up of 1s and 0s) into consideration, and deriving explicit formulas for the components of the Kendall correlation (Eqs <xref ref-type="disp-formula" rid="pone.0212190.e010">(9)</xref>, <xref ref-type="disp-formula" rid="pone.0212190.e013">(12)</xref> and <xref ref-type="disp-formula" rid="pone.0212190.e014">(13)</xref>). These formulas are all linear in <italic>n</italic>, meaning our method is <italic>O</italic>(<italic>n</italic>), unlike Knight’s method which is <italic>O</italic> (<italic>n</italic> ln <italic>n</italic>). We have also, by way of computation, provided evidence that our method is correct and equivalent (up to machine error) to MATLAB’s standard method.</p>
<p>With a significantly faster method to compute the Kendall correlation between large spike trains, we hope that the Kendall correlation will become a more accessible tool for neuroscience. While we know there are faster ways to implement algorithms similar to Knight’s (as was explored in [<xref ref-type="bibr" rid="pone.0212190.ref011">11</xref>]) that may be faster than the method provided here, the simplicity of our method (a few linear equations) makes it much more appealing to neuroscientists who have limited technical knowledge and/or interest in computer science. We imagine it will be especially useful in computational/theoretical studies where large, sparse spike trains are frequently generated and whose pairwise correlations provide insight into the complex properties of the network. We hope that the fact that pairwise correlations over significantly longer time intervals (or equivalently, between spikes trains of longer lengths) can now be calculated quickly, more in-depth analysis of generated networks (in addition to analysis of observed/recorded networks) will be achieved.</p>
<p>Finally, we hope that our results make clear the usefulness of considering specifically the structure of spike trains when calculating certain quantities. We’re sure many other measures can be significantly sped up when taking this into consideration.</p>
</sec>
<sec id="sec009">
<title>Supporting information</title>
<supplementary-material id="pone.0212190.s001" mimetype="application/pdf" position="float" xlink:href="info:doi/10.1371/journal.pone.0212190.s001" xlink:type="simple">
<label>S1 Code</label>
<caption>
<title/>
<p>(PDF)</p>
</caption>
</supplementary-material>
<supplementary-material id="pone.0212190.s002" mimetype="application/pdf" position="float" xlink:href="info:doi/10.1371/journal.pone.0212190.s002" xlink:type="simple">
<label>S1 Text</label>
<caption>
<title>Implementation of Knight’s method.</title>
<p>(PDF)</p>
</caption>
</supplementary-material>
</sec>
</body>
<back>
<ack>
<p>We thank Eliott Levy for fruitful discussion and mentorship. We thank the reviewers for their helpful and constructive comments that pushed us towards making our algorithm <italic>O</italic>(<italic>n</italic>). We dedicate this paper to Prof. David Cai, who was among the first to inspire us towards research in neural science.</p>
</ack>
<ref-list>
<title>References</title>
<ref id="pone.0212190.ref001">
<label>1</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Kendall</surname> <given-names>M</given-names></name>. <article-title>A New Measure of Rank Correlation</article-title>. <source>Biometrika</source> <year>1938</year>; <volume>30</volume> (<issue>1–2</issue>): <fpage>81</fpage>–<lpage>89</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.2307/2332226" xlink:type="simple">10.2307/2332226</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref002">
<label>2</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Slamon</surname> <given-names>DJ</given-names></name>, <name name-style="western"><surname>Godolphin</surname> <given-names>W</given-names></name>, <name name-style="western"><surname>Jones</surname> <given-names>LA</given-names></name>, <name name-style="western"><surname>Holt</surname> <given-names>JA</given-names></name>, <name name-style="western"><surname>Wong</surname> <given-names>SG</given-names></name>, <name name-style="western"><surname>Keith</surname> <given-names>DE</given-names></name>, <etal>et al</etal>. <article-title>Studies of the HER-2/neu proto-oncogene in human breast and ovarian cancer</article-title>. <source>Science</source> <year>1989</year>; <volume>244</volume>: <fpage>707</fpage>–<lpage>712</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1126/science.2470152" xlink:type="simple">10.1126/science.2470152</ext-link></comment> <object-id pub-id-type="pmid">2470152</object-id></mixed-citation>
</ref>
<ref id="pone.0212190.ref003">
<label>3</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Giraudet</surname> <given-names>AL</given-names></name>, <name name-style="western"><surname>Al Ghulzan</surname> <given-names>A</given-names></name>, <name name-style="western"><surname>Auperin</surname> <given-names>A</given-names></name>, <name name-style="western"><surname>Leboulleux</surname> <given-names>S</given-names></name>, <name name-style="western"><surname>Chehboun</surname> <given-names>A</given-names></name>, <name name-style="western"><surname>Troalen</surname> <given-names>F</given-names></name>, <etal>et al</etal>. <article-title>Progression of medullary thyroid carcinoma: assessment with calcitonin and carcinoembryonic antigen doubling times</article-title>. <source>Eur J Endocrinol</source> <year>2008</year>; <volume>158</volume>:<fpage>239</fpage>–<lpage>246</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1530/EJE-07-0667" xlink:type="simple">10.1530/EJE-07-0667</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref004">
<label>4</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Kelder</surname> <given-names>T</given-names></name>, <name name-style="western"><surname>Stroeve</surname> <given-names>JH</given-names></name>, <name name-style="western"><surname>Bijlsma</surname> <given-names>S</given-names></name>, <name name-style="western"><surname>Radonjic</surname> <given-names>M</given-names></name>, <name name-style="western"><surname>Roeselers</surname> <given-names>G</given-names></name>. <article-title>Correlation network analysis reveals relationships between diet-induced changes in human gut microbiota and metabolic health</article-title>. <source>Nutrition &amp; Diabetes</source> <year>2014</year> <month>Jun</month> <day>30</day>;<volume>4</volume>:<fpage>e122</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1038/nutd.2014.18" xlink:type="simple">10.1038/nutd.2014.18</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref005">
<label>5</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Press</surname> <given-names>WH</given-names></name>, <name name-style="western"><surname>Teukolsky</surname> <given-names>SA</given-names></name>, <name name-style="western"><surname>Vetterling</surname> <given-names>WT</given-names></name>, <name name-style="western"><surname>Flannery</surname> <given-names>BP</given-names></name>. <source>Numerical Recipes: The Art of Scientific Computing</source>. <publisher-loc>Cambridge</publisher-loc>: <publisher-name>Cambridge Univ. Press</publisher-name> <year>2007</year>.</mixed-citation>
</ref>
<ref id="pone.0212190.ref006">
<label>6</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Soletta</surname> <given-names>JH</given-names></name>, <name name-style="western"><surname>Farfán</surname> <given-names>FD</given-names></name>, <name name-style="western"><surname>Felice</surname> <given-names>CJ</given-names></name>. <article-title>Measuring Spike Train Correlation with Non-Parametric Statistics Coefficient</article-title>. <source>IEEE Latin America Transactions</source> <year>2015</year> <month>Dec</month> <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/TLA.2015.7404902" xlink:type="simple">10.1109/TLA.2015.7404902</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref007">
<label>7</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Neymotin</surname> <given-names>SA</given-names></name>, <name name-style="western"><surname>Talbot</surname> <given-names>ZN</given-names></name>, <name name-style="western"><surname>Jung</surname> <given-names>JQ</given-names></name>, <name name-style="western"><surname>Fenton</surname> <given-names>AA</given-names></name>, <name name-style="western"><surname>Lytton</surname> <given-names>WW</given-names></name>. <article-title>Tracking recurrence of correlation structure in neuronal recordings</article-title>. <source>J. Neurosci. Methods</source> <year>2017</year>; <volume>275</volume>: <fpage>1</fpage>–<lpage>9</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.jneumeth.2016.10.009" xlink:type="simple">10.1016/j.jneumeth.2016.10.009</ext-link></comment> <object-id pub-id-type="pmid">27746231</object-id></mixed-citation>
</ref>
<ref id="pone.0212190.ref008">
<label>8</label>
<mixed-citation publication-type="other" xlink:type="simple">
<ext-link ext-link-type="uri" xlink:href="https://www.mathworks.com/help/stats/corr.html" xlink:type="simple">https://www.mathworks.com/help/stats/corr.html</ext-link></mixed-citation>
</ref>
<ref id="pone.0212190.ref009">
<label>9</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Agresti</surname> <given-names>A</given-names></name>. <source>Analysis of Ordinal Categorical Data</source>. <edition>2nd ed</edition>. <publisher-loc>New York</publisher-loc>: <publisher-name>John Wiley &amp; Sons</publisher-name>. <year>2010</year>. ISBN 978-0-470-08289-8. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1002/9780470594001" xlink:type="simple">10.1002/9780470594001</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref010">
<label>10</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Knight</surname> <given-names>WR</given-names></name>. <article-title>A computer method for calculating Kendall’s tau with ungrouped data</article-title>. <source>J. Am. Stat. Assoc</source>. <year>1966</year>; <volume>61</volume> (<issue>314</issue>): <fpage>436</fpage>–<lpage>439</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1080/01621459.1966.10480879" xlink:type="simple">10.1080/01621459.1966.10480879</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref011">
<label>11</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Christensen</surname> <given-names>D</given-names></name>. <article-title>Fast algorithms for the calculation of Kendall’s <italic>τ</italic></article-title>. <source>Computational Statistics</source> <year>2005</year>; <volume>20</volume>: <fpage>51</fpage>–<lpage>62</lpage> <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1007/BF02736122" xlink:type="simple">10.1007/BF02736122</ext-link></comment></mixed-citation>
</ref>
<ref id="pone.0212190.ref012">
<label>12</label>
<mixed-citation publication-type="other" xlink:type="simple">
<ext-link ext-link-type="uri" xlink:href="https://www.mathworks.com/help/matlab/ref/rand.html" xlink:type="simple">https://www.mathworks.com/help/matlab/ref/rand.html</ext-link></mixed-citation>
</ref>
<ref id="pone.0212190.ref013">
<label>13</label>
<mixed-citation publication-type="other" xlink:type="simple">
<ext-link ext-link-type="uri" xlink:href="https://www.mathworks.com/help/matlab/ref/tic.html" xlink:type="simple">https://www.mathworks.com/help/matlab/ref/tic.html</ext-link></mixed-citation>
</ref>
</ref-list>
</back>
</article>