<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><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><br>
</div><div>        <br>% ACT (Autocorrelation Time) estimation and constraints<br><br>cfgP.maxlag              = 150; <br>cfgP.actthrvalue         = 7.5; <br>cfgP.minnrtrials          = 5; <br><br></div><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><br>
</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><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><br>
</div><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>