<div dir="ltr">Looking at the sample script, it should be reasonably straightforward for me to adapt my pipeline, and between the ragwitz tutorial and your notes I should be able to develop a better understanding of what the pipeline is doing in a more sophisticated way. Again, thank you so much! I will try to incorporate this new information as soon as possible, and if I have any other issues I'll follow up, but hopefully this should solve most of my problems.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 9, 2014 at 9:51 AM, Patricia Wollstadt <span dir="ltr"><<a href="mailto:Patricia.Wollstadt@gmx.de" target="_blank">Patricia.Wollstadt@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    I'm glad that cleared things up a little. Sorry about the confusion,
    we will try to include warnings for deprecated function in the next
    release of TRENTOOL.<br>
    <br>
    You don't need to run TEprepare before running TEgroup_prepare. You
    just run the four functions <br>
    - TEgroup_prepare<br>
    - InteractionDelayReconstruction_calculate <br>
    - InteractionDelayReconstruction_analyze   <br>
    - TEgroup_stats  <br>
    in that order. <br>
    <br>
    The graph analysis is an optional step that can be run on the
    individual outputs of InteractionDelayReconstruction_analyze. The
    function will partially correct the output for multivariate effects.
    Since you are looking at one connection only, you don't need to
    include the graph analysis step into your pipeline. (I also sent you
    an example script directly, because I think it is not a good idea to
    send attachments via the mailing list.)<br>
    <br>
    Best, Patricia<div><div class="h5"><br>
    <br>
    <br>
    <br>
    <div>On 09/09/2014 03:19 PM, Max Cantor
      wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">
        <div>
          <div>This is immensely helpful, thank you. I was very confused
            about why some versions of the pipeline I saw were using
            group calculate and others were using interaction delay
            reconstruction and what that meant, and I think I have a
            more clear idea of what the different steps of the pipeline
            are doing. There are still a few things I'm a bit confused
            about though in terms of the pipeline. For instance, whether
            or not I need to do TEprepare before group prepare, and if I
            need to do graph analysis (which I'm not sure I fully
            understand but also haven't looked deeply into) before group
            stats. <br>
            <br>
          </div>
          If you don't mind me taking you up on your offer, I think
          seeing your example script might help clarify some of these
          issues.<br>
          <br>
        </div>
        Thank you!<br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Tue, Sep 9, 2014 at 8:16 AM,
          Patricia Wollstadt <span dir="ltr"><<a href="mailto:Patricia.Wollstadt@gmx.de" target="_blank">Patricia.Wollstadt@gmx.de</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> Hello Max,<br>
              <br>
              I added a few comments to the questions regarding
              individual parameters below. To address the general
              problem of TRENTOOL telling you, that there are not enough
              sample points in your data: From what I can see in your
              script, you probably don't have enough data points in each
              time series to robustly estimate TE. You analyze 800 ms of
              data sampled at 300 Hz, which gives you 240 samples per
              time series. Can you maybe avoid downsampling to 300 Hz
              and downsample to 600 Hz instead? Or could you analyze a
              longer time window of interest?<br>
              Note that you also 'lose' data to embedding and the
              interaction delay: The first point that can be used for TE
              estimation is at max. embedding length + max. interaction
              delay in samples. For example: max. embedding length = dim
              * tau_factor * ACT = 10 * 0.4 * 5 = 20 samples plus the
              max interaction delay of 30 ms = 9 samples. In this
              example, you would be left with 240 - 29 samples for TE
              estimation per trial. There is also the possibility to
              estimate time resolved TE/TE for shorter time windows of
              interest (see section 4.4 in the manual); however, this
              method requires the use of a GPU for TE estimation.<br>
              <br>
              I would further recommend to use the new pipeline for
              group statistics described in the manual in section 4.5
              (the function 'TEgroup_calculate' is deprecated). The new
              pipeline allows you to reconstruct the interaction delay
              and uses the following functions (see also comments in the
              script):<br>
              <br>
              TEgroup_prepare    -> prepares all data sets (all
              subjects/all conditions) for group analysis (this means
              finding common embedding parameters such that estimates
              are not biased between groups)<br>
              InteractionDelayReconstruction_calculate     ->
              estimates TE for individual data sets and all assumed
              interaction delays u<br>
              InteractionDelayReconstruction_analyze       ->
              reconstructs the interaction delay by selecting the u that
              maximizes TE for each channel<br>
              TEgroup_stats        -> calculate group statistics
              using a permutation test<br>
              <br>
              I can send you an example script for group TE analysis
              using this pipeline to get you started. I hope this helps
              you to get the group analysis running. Just write again if
              you're having trouble setting up the pipeline or something
              is not clear about the parameters/my comments.<br>
              <br>
              Best,<br>
              Patricia<span><br>
                <br>
                <br>
                <br>
                <br>
                On 09/04/2014 08:30 PM, Max Cantor wrote:<br>
                <blockquote type="cite">
                  <div dir="ltr">
                    <div>
                      <div>
                        <div>Hi fieldtrippers,<br>
                          <br>
                        </div>
                        I know trentool is not produced by the Donders
                        Institute, so I'm not 100% sure if it is
                        appropriate to ask questions about it here, but
                        to the best of my knowledge they do not have a
                        mailing list and I saw a few trentool questions
                        in the archives, so I'm going to assume it's
                        ok...<br>
                        <br>
                      </div>
                      In any case, below is my current pipeline
                      (slightly modified for comprehensibility):<br>
                      <br>
                    </div>
                    (notes in bold are comments/questions made in this
                    email, not present in the pipeline. Sorry in advance
                    for the long post! Any help would be greatly
                    appreciated as I'm a bit over my head on this but I
                    think I'm close!)<br>
                    <div><br>
                      *****<br>
                      <br>
                      % Prepare group TE data<br>
                      <br>
                      cfgP                        = [];<br>
                      cfgP.Path2TSTOOL  = <b>TSTOOLPATH</b> <br>
                      cfgP.TEcalctype       = 'VW_ds';<br>
                      cfgP.channel            = {'ctfdip_LAC' 
                      'ctfdip_RAC'}; <br>
                      <br>
                      <b>I'm trying to find the transfer entropy between
                        the left and right auditory cortices in my
                        experiment. The input is virtual sensor data
                        that was produced using SAM in fieldtrip on real
                        MEG data. </b><br>
                              <br>
                      % specify u to be scanned <br>
                      <br>
                      cfgP.predicttime_u    = 30; <br>
                      cfgP.toi                    = [-0.4 0.4]; <br>
                      <br>
                    </div>
                  </div>
                </blockquote>
              </span>
              <blockquote type="cite">
                <div dir="ltr">
                  <div><b>For clarification, the predicttime_u is in
                      seconds but the toi is in milliseconds. If I
                      understand correctly, the predicttime_u must fit
                      within the toi, but beyond that are there any
                      benefits to it being earlier or later?</b> PW: The
                    predictiontime_u is in milliseconds and the toi is
                    in seconds. The prediction time is the assumed
                    interaction delay between your two sources and
                    should fit within your toi. In general it is
                    preferable to use the method for interaction delay
                    reconstruction for TE estimation, because it allows
                    you to reconstruct the actual delay between your
                    source and target times series. A non-optimal
                    u/interaction delay may cause an underestimation of
                    TE, so it is recommended to use the pipeline for
                    interaction delay reconstruction whenever estimating
                    TE for unknown delays. <br>
                    If you use the methods for interaction delay
                    reconstruction 'predicttime_u' is replaced by<br>
                    cfgTEP.predicttimemin_u % minimum u to be scanned<br>
                    cfgTEP.predicttimemax_u % maximum u to be scanned<br>
                    cfgTEP.predicttimestepsize % time steps between u to
                    be scanned   <br>
                    A large range for u values to be scanned increases
                    computing time a lot, so it is best to limit the u
                    range to values that are physiologically plausible.
                    <br>
                        <br>
                  </div>
                </div>
              </blockquote>
              <blockquote type="cite">
                <div dir="ltr"><span>
                    <div>% ACT (Autocorrelation Time) estimation and
                      constraints<br>
                      <br>
                      cfgP.maxlag              = 150; <br>
                      cfgP.actthrvalue         = 7.5; <br>
                      cfgP.minnrtrials          = 5; <br>
                      <br>
                    </div>
                  </span>
                  <div><b>My understanding is maxlag should be 1/2 the
                      sampling rate, so since the data are downsampled
                      to 300hz, it should be 150. I know that the sample
                      rate and filters are used to determine the
                      actthrvalue, but I don't actually know the
                      calculation. 7.5 was a rough guess just to test
                      the pipeline. I'm also uncertain of what
                      minnrtrials should be.</b> PW: You can set the
                    actthrvalue based on the filtering you did prior to
                    TE analysis. If you for example highpass filtered at
                    10 Hz, you shouldn't find an ACT higher than 30
                    samples, because you filtered out any components of
                    the signal slower than 10 Hz/30 samples (given your
                    sampling frequency of 300 Hz). So in this scenario
                    the actthrvalue would be 30.<br>
                    A good value for cfgP.minnrtrials is 12 (a minimum
                    number of trials is needed to realize the 
                    permutation test for estimated TE values). </div>
                </div>
              </blockquote>
              <blockquote type="cite">
                <div dir="ltr"><span>
                    <div> </div>
                    <div>        <br>
                      % Optimization<br>
                      <br>
                      cfgP.optimizemethod   = 'ragwitz';<br>
                      cfgP.ragdim                 = 4:8;<br>
                      cfgP.ragtaurange          = [0.2 0.4];<br>
                      cfgP.ragtausteps          = 15;<br>
                      cfgP.repPred                = 100;<br>
                      <b><br>
                      </b></div>
                  </span>
                  <div><b>I am completely at a loss for this. I've done
                      some reading into transfer entropy, mutual
                      information, etc., cited in trentool, but I'm yet
                      to understand how exactly this optimization works
                      and what the configuration should be, given my
                      data and experimental intentions.</b> PW: The
                    Ragwitz criterion tries to find optimal embedding
                    parameters dim and tau for the data. To do that, the
                    method iteratively takes all possible combinations
                    of dim and tau values that are provided in
                    cfgP.ragdim and cfgP.ragtaurange/.ragtausteps and
                    tests how well these combinations embed the data. To
                    test an embedding, the method builds the embedding
                    vectors from the data; it then tests for each point
                    how well the next point in time can be predicted
                    from the reference point's nearest neighbours. So
                    for each embedded point, the method searches for the
                    nearest neighbours and calculates the average of
                    those nearest neighbours. The difference between the
                    averaged/predicted point and the actual next point
                    is the error of the local predictor. The Ragwitz
                    criterion will then return the parameter combination
                    for which this error over all points is minimal. <br>
                    The parameters set the following: 'ragdim' are
                    dimensions to be tested by the method (I would
                    reccomend to start with 2:10), 'ragtaurange'
                    together with 'ragtausteps' specifies the tau values
                    to be tested (TRENTOOL will build a vector from 0.2
                    to 0.4 in 15 steps). Note, that the values here are
                    factors that are later multiplied with the ACT to
                    obtain the actual tau. 'repPred' is the number of
                    points that will be used for the local prediction,
                    i.e. the Ragwitz criterion will test the local
                    prediction and calculate the error for the first 100
                    points in your time series. The two parameters
                    'flagNei' ans 'sizeNei' below specify the type of
                    neighbour search conducted by the Ragwitz criterion:
                    'flagNei' tells the method to either conduct a kNN
                    or range search; 'sizeNei' specifies the number of
                    neighbours or the radius to be searched by a range
                    search.<br>
                    <br>
                  </div>
                </div>
              </blockquote>
              <blockquote type="cite">
                <div>
                  <div>
                    <div dir="ltr">
                      <div>        <br>
                        % Kernel-based TE estimation<br>
                        <br>
                        cfgP.flagNei                  = 'Mass';<br>
                        cfgP.sizeNei                  = 4; % Default<br>
                                <br>
                        cfgP.ensemblemethod    = 'no';<br>
                        cfgP.outputpath              = <b>OUTPUT PATH</b>;
                        <br>
                        <br>
                        if ~exist(<b>Path for TEprepare data object</b>)<br>
                            load VSdat;<br>
                            TE_Wrd                     = {};    <br>
                            for i                           = 1:nConds<br>
                                for j                       = 1:Nsub<br>
                                    TE_Wrd{i}{j}        =
                        TEprepare(cfgP, VSdat{i}{j});<br>
                                end<br>
                            end<br>
                            clear VSdat;<br>
                            save('TE_Wrd', 'TE_Wrd');<br>
                        end<br>
                        <b><br>
                        </b></div>
                      <div><b>The configuration and virtual sensor data,
                          organized in a 3 x 15 cell of structures
                          (condition by subject) are the input. The
                          TEprepare substructure is added to each
                          individual condition x subject .mat files'
                          data structure which are stored on disk
                          independently.</b> <br>
                      </div>
                      <div><br>
                        % Use object_to_mat_conversion.m to replace
                        individual condition x subject virtual sensor
                        data<br>
                        % .mat files with their TE_Wrd equivalent<br>
                        <b><br>
                        </b></div>
                      <div><b>I'm using a separate script to make some
                          manipulations to the objects from disk; this
                          will all eventually be integrated into the
                          main pipeline</b>.<b> TRENTOOL seems to handle
                          data output very differently from fieldtrip
                          and I've had trouble thinking through the most
                          logical way to handle the data so it's a bit
                          haphazard right now.</b><br>
                      </div>
                      <div><br>
                        load cond080sub01.mat<br>
                        <br>
                        cfgG                               = [];<br>
                        cfgG.dim                         =
                        cond080sub01.TEprepare.optdim;<br>
                        cfgG.tau                          =
                        cond080sub01.TEprepare.opttau;<br>
                        <br>
                        if isfield(cond080sub01, 'TEprepare')<br>
                                                     
                        TEgroup_prepare(cfgG, fileCell);<br>
                        else<br>
                            error('Need to run TEprepare before
                        TEgroup_prepare');<br>
                        end<br>
                        <b><br>
                        </b></div>
                      <div><b>For clarification, fileCell is a cell with
                          the name of each condition x subject .mat
                          file, which as I said before is collectively
                          the same as the 3 x 15 VSdat structure
                          (condition x subject).</b><br>
                      </div>
                      <div><br>
                        % Replace .mat files with
                        '_for_TEgroup_calculate' version in<br>
                        % object_to_mat_conversion.m<br>
                        <br>
                        % TE Group Calculate<br>
                        <br>
                        load cond080sub01.mat<br>
                        if isfield(cond080sub01, 'TEgroupprepare')<br>
                            for i                   = 1:length(fileCell)<br>
                                                     
                        TEgroup_calculate(fileCell{i});<br>
                            end<br>
                        else<br>
                            error('Need to run TEgroup_prepare before
                        TEgroup_calculate');<br>
                        end<br>
                        <b><br>
                        </b></div>
                      <div><b>At this step I get the following error:<br>
                          <br>
                          Error using transferentropy (line 337)<br>
                          \nTRENTOOL ERROR: not enough data points left
                          after embedding<br>
                          <br>
                          Error in TEgroup_calculate (line 133)<br>
                          [TEresult] = transferentropy(cfg,data);</b><br>
                      </div>
                      <div><br>
                        % TE Group Stats<br>
                        <br>
                        cfgGSTAT                              = [];<br>
                        cfgGSTAT.design(1,1:2*Nsub) = [ones(1,Nsub)
                        2*ones(1,Nsub)];<br>
                        cfgGSTAT.design(2,1:2*Nsub) = [1:Nsub 1:Nsub];<br>
                        <br>
                        cfgGSTAT.uvar                       = 1;<br>
                        cfgGSTAT.ivar                        = 2;<br>
                        cfgGSTAT.fileidout                  =
                        'test_groupstats';<br>
                        <br>
                                                     
                        TEgroup_stats(cfgGSTAT, fileCell);<br>
                        <br>
                      </div>
                      <div><b>Given the error above, I am yet to get to
                          this step, but it does not seem fundamentally
                          different from normal fieldtrip stats.</b><br clear="all">
                      </div>
                      <div>
                        <div>
                          <div>
                            <div><br>
                              *****<br>
                              <br>
                            </div>
                            <div>In case my notes were not clear or you
                              skipped to the bottom, <b>my primary
                                concern is whether the error I'm getting
                                in TEgroup_calculate is a pipeline issue</b>
                              (I noticed the example pipeline in
                              trentool, the manual, and published
                              methods articles all seem to have slightly
                              or significantly different pipeline
                              compositions), <b>or if the error is</b>
                              due to ACT, ragwitz optimization, or some
                              other faulty parameterization <b>on my
                                part due to a lack of understanding of
                                how transfer entropy works on a more
                                theoretical/mathematical level</b>. If
                              the latter is the case, is there any
                              relatively straightforward way to
                              conceptualize this, or is this something
                              where I'm just going to have to keep
                              reading and rereading until it eventually
                              makes sense? I've already done quite a bit
                              of that and it hasn't pierced my thick
                              skull yet but I'm sure it will eventually!<br>
                              <br>
                            </div>
                            <div>Thank you so much,<br>
                              <br>
                            </div>
                            <div>Max Cantor<br>
                            </div>
                            <div><br>
                              <br>
                              -- <br>
                              <div dir="ltr">Max Cantor
                                <div>Lab Manager</div>
                                <div>Computational Neurolinguistics Lab</div>
                                <div>University of Michigan</div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                    <br>
                    <fieldset></fieldset>
                    <br>
                  </div>
                </div>
                <pre>_______________________________________________
fieldtrip mailing list
<a href="mailto:fieldtrip@donders.ru.nl" target="_blank">fieldtrip@donders.ru.nl</a>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a></pre>
                <span><font color="#888888"> </font></span></blockquote>
              <span><font color="#888888"> <br>
                  <div>-- <br>
                    <address><font color="#666666"><small><font face="Helvetica, Arial, sans-serif">------------------------------------------------------------<br>
                            <br>
                          </font></small></font></address>
                    <address><font color="#666666"><small><font face="Helvetica, Arial, sans-serif">Patricia
                            Wollstadt, PhD Student<br>
                            <br>
                          </font></small></font></address>
                    <address><font color="#666666"><small> </small></font></address>
                    <address><font color="#666666"><small><font face="Helvetica, Arial, sans-serif"> MEG
                            Unit, Brain Imaging Center</font></small></font></address>
                    <address><font color="#666666"><small><font face="Helvetica, Arial, sans-serif"> Goethe
                            University, Frankfurt, Germany<br>
                            <br>
                          </font></small></font></address>
                    <address><font color="#666666"><small><font face="Helvetica, Arial, sans-serif">Heinrich
                            Hoffmann Strasse 10, Haus 93 B</font></small></font></address>
                    <address><font color="#666666"><small><font face="Helvetica, Arial, sans-serif">D -
                            60528 Frankfurt am Main</font></small></font></address>
                  </div>
                </font></span></div>
            <br>
            _______________________________________________<br>
            fieldtrip mailing list<br>
            <a href="mailto:fieldtrip@donders.ru.nl" target="_blank">fieldtrip@donders.ru.nl</a><br>
            <a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <br>
        -- <br>
        <div dir="ltr">Max Cantor
          <div>Lab Manager</div>
          <div>Computational Neurolinguistics Lab</div>
          <div>University of Michigan</div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      <pre>_______________________________________________
fieldtrip mailing list
<a href="mailto:fieldtrip@donders.ru.nl" target="_blank">fieldtrip@donders.ru.nl</a>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a></pre>
    </blockquote>
    <br>
    <div>-- <br>
      
      
      <address><font color="#666666"><small><font face="Helvetica,
              Arial, sans-serif">------------------------------------------------------------<br>
              <br>
            </font></small></font></address>
      <address><font color="#666666"><small><font face="Helvetica,
              Arial, sans-serif">Patricia Wollstadt, PhD Student<br>
              <br>
            </font></small></font></address>
      <address><font color="#666666"><small> </small></font></address>
      <address><font color="#666666"><small><font face="Helvetica,
              Arial, sans-serif"> MEG Unit, Brain Imaging Center</font></small></font></address>
      <address><font color="#666666"><small><font face="Helvetica,
              Arial, sans-serif"> Goethe University, Frankfurt, Germany<br>
              <br>
            </font></small></font></address>
      <address><font color="#666666"><small><font face="Helvetica,
              Arial, sans-serif">Heinrich Hoffmann Strasse 10, Haus 93 B</font></small></font></address>
      <address><font color="#666666"><small><font face="Helvetica,
              Arial, sans-serif">D - 60528 Frankfurt am Main</font></small></font></address>
    </div>
  </div></div></div>

<br>_______________________________________________<br>
fieldtrip mailing list<br>
<a href="mailto:fieldtrip@donders.ru.nl">fieldtrip@donders.ru.nl</a><br>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br></blockquote></div><br><br clear="all"><br>-- <br><div dir="ltr">Max Cantor<div>Lab Manager</div><div>Computational Neurolinguistics Lab</div><div>University of Michigan</div></div>
</div>