[FieldTrip] Permutation test with cluster based correction on a single sensor with time frequency data
Anne Guérin
anne.guerin at gipsa-lab.grenoble-inp.fr
Thu Dec 19 16:53:49 CET 2024
Le 19/12/2024 à 14:57, Schoffelen, J.M. (Jan Mathijs) via fieldtrip a
écrit :
> Hi Anne,
>
> I don’t know what’s going on.
>
> Have you tried cfg.neighbours = {} (i.e. curly rather than square
> brackets), and/or explicitly defined cfg.connectivity = []; ?
>
> Best wishes,
> Jan-Mathijs
>
> Hi Jan-Mathijs,
When I try cfg.neighbours = {}, instead of [], a bug appears earlier at
Unrecognized field name "label".
Error in channelconnectivity (line 91)
[seld] = match_str(chans, neighbours(chan).label);
I solved it with cfg.chanel = {ROI} in order to overlap the field
.label of the data structure, and with cfg.neighbours = [];
after this function (channelconnectivity) and go back to
I have for the cfg structure and these 3 fields :
channel: {'V5_R'}
neighbours: []
connectivity: 0
With cfg.neighbours={}; , in the function channelconnectivity, the bug
appears at line 91
line 90 for chan=1:length(neighbours)
line 91 [seld] = match_str(chans, neighbours(chan).label);
in fact with cfg.neighbours={} , the variable 'neighbours' is a struct
with no field, so length(neighbours)=1 , and the loop begins and it's bug.
So I go back cfg.chanel = {'V5_R'} and cfg.neighbours=[]
(cfg.connectivity = [] has no impact), I find the same bug again, at the
function 'findcluster'.
But, I think that the problem comes from the expected input data onoff
of the function findcluster :
onoff = is a 3D boolean matrix with size N1xN2xN3
three dimensions are expected for chan freq and time, but in my case
there are only two dimensions freq and time. So I changed the indut data
like this (for example for the first subject) :
ftAllFiles{1}
ans =
struct with fields:
dimord: 'chan_freq_time'
avg: [1×29×401 double]
time: [-0.2000 -0.1990 -0.1980 -0.1970 -0.1960 -0.1950 -0.1940
-0.1930 -0.1920 -0.1910 -0.1900 -0.1890 -0.1880 -0.1870 -0.1860 … ]
freq: [6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34]
label: {'V5_R'}
with a first dimension as a scalar (only one chanel).
It now seems to be working properly. but I must verify the results to be
sure.
The moral of the story is that you always have to define a “chan”
dimension, even if there's only one chanel, and that it's not
theoretically necessary to encode the data in this case.
Thank you.
Best regards.
Anne
>> On 19 Dec 2024, at 12:18, Anne Guérin via fieldtrip
>> <fieldtrip at science.ru.nl> wrote:
>>
>> Hi,
>>
>> I would like to use the FT permutations test with cluster based
>> correction on 2D data freq x time with a within subject design. Data
>> are obtained after sources reconstruction and are for example related
>> to a particular ROI (e.g. V5_R). The first dimension is a frequency
>> dimension but not the oscillatory brain frequency. This dimension is
>> linked to a temporal frequency of the input visual stimulus. the
>> second dimension is time (sRate = 1kHz) and data are timelocked ERP
>> for different values of this temporale frequency (by step of 1Hz).
>> The data therefore has the same structure as if it had been obtained
>> by time-frequency analysis on a particular electrode.
>>
>> For example, here's the data for one participant:
>> ftAllFiles{1}
>>
>> ans =
>>
>> struct with fields:
>>
>> dimord: 'freq_time'
>> avg: [29×401 double]
>> time: [-0.2000 -0.1990 -0.1980 -0.1970 -0.1960 -0.1950 -0.1940
>> -0.1930 -0.1920 -0.1910 -0.1900 -0.1890 -0.1880 -0.1870 -0.1860 … ]
>> freq: [6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
>> 26 27 28 29 30 31 32 33 34]
>> label: {'V5_R'}
>> There are 29 participants for each conditions. ftAllFiles have 2x29
>> cells, the first 29 correspond to the first condition and the last 29
>> to the second condition.
>>
>> Here is the configuration :
>>
>> >> statcfg
>>
>> statcfg =
>>
>> struct with fields:
>>
>> frequency: 'all'
>> parameter: 'avg'
>> avgoverfreq: 'no'
>> avgoverchan: 'no'
>> latency: 'all'
>> method: 'montecarlo'
>> statistic: 'ft_statfun_depsamplesT'
>> correctm: 'cluster'
>> clusteralpha: 0.0500
>> clusterstatistic: 'maxsum'
>> minnbchan: 0
>> tail: 1
>> clustertail: 1
>> alpha: 0.0500
>> numrandomization: 100000
>> ivar: 1
>> uvar: 2
>> design: [2×58 double]
>> channel: 'all'
>> neighbours: []
>> avgovertime: 'no'
>>
>> When I run ftStat = ft_freqstatistics(statcfg, ftAllFiles{:}); ,
>> the program stops at the step 'findcluster':
>>
>> posclusobs = findcluster(tmp, connmat, cfg.minnbchan);
>>
>> In fact tmp is 2D boolean table (29 frequency samples x 401 time
>> samples), connmat is 4x4 matrix with 0 and cfg.minnbchan=0. So bug
>> withfindcluster. See below.
>>
>> When I plot tmp (image(tmp)), the result doesn't look ridiculous.
>>
>> How to have a good configuration of neighborhood for this
>> single-sensor time-frequency permutation test ?
>>
>> Thank you for your help.
>>
>> Best regards.
>>
>> Anne
>>
>> ps :
>>
>>
>> >> ftStat = ft_freqstatistics(statcfg, ftAllFiles{:});
>> the call to "ft_selectdata" took 0 seconds
>> using "ft_statistics_montecarlo" for the statistical testing
>> using "ft_statfun_depsamplesT" for the single-sample statistics
>> constructing randomized design
>> total number of measurements = 58
>> total number of variables = 2
>> number of independent variables = 1
>> number of unit variables = 1
>> number of within-cell variables = 0
>> number of control variables = 0
>> using a permutation resampling approach
>> repeated measurement in variable 2 over 29 levels
>> number of repeated measurements in each level is 2 2 2 2 2 2 2 2 2 2
>> 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
>> the maximum number of unique permutations is 536870912
>> generated 100000 random permutations
>> computing a parametric threshold for clustering
>> computing statistic
>> estimated time per randomization is 0.00 seconds
>> computing statistic 100000 from 100000
>>
>> Error using findcluster
>> invalid dimension of spatdimneighbstructmat
>>
>> Error in clusterstat (line 214)
>> posclusobs = findcluster(tmp, connmat, cfg.minnbchan);
>>
>> Error in ft_statistics_montecarlo (line 364)
>> [stat, cfg] = clusterstat(cfg, statrand, statobs);
>>
>> Error in ft_freqstatistics (line 194)
>> [stat, cfg] = statmethod(cfg, dat, design);
>>
>>
>>
>> --
>> Anne Guérin-Dugué
>> PR Emérite Université Grenoble Alpes (UGA)
>> GIPSA-lab / PSD / Equipe ViBS
>> Bureau B146
>> Site Ampère
>> 11 rue des Mathématiques
>> BP 46
>> F - 38042 GRENOBLE
>> tel : +33 (0)4 76 57 43 73
>> mel :anne.guerin at gipsa-lab.grenoble-inp.fr
>> _______________________________________________
>> fieldtrip mailing list
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmailman.science.ru.nl%2Fmailman%2Flistinfo%2Ffieldtrip&data=05%7C02%7Cfieldtrip%40science.ru.nl%7C2f9ec0f7e6054ef8be4808dd20455733%7C084578d9400d4a5aa7c7e76ca47af400%7C1%7C0%7C638702204827091515%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=vdm7LhXH29meFdIrX%2BsGvC%2FP3fXc1ZJMdpD3AWdS1bE%3D&reserved=0
>> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmailman.science.ru.nl%2Fmailman%2Flistinfo%2Ffieldtrip&data=05%7C02%7Cfieldtrip%40science.ru.nl%7C2f9ec0f7e6054ef8be4808dd20455733%7C084578d9400d4a5aa7c7e76ca47af400%7C1%7C0%7C638702204827111331%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=4lD%2FCDZD4nn3dLB%2BjL9sLd6dJWOyp0lTcFcMNxZNIiQ%3D&reserved=0>
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdoi.org%2F10.1371%2Fjournal.pcbi.1002202&data=05%7C02%7Cfieldtrip%40science.ru.nl%7C2f9ec0f7e6054ef8be4808dd20455733%7C084578d9400d4a5aa7c7e76ca47af400%7C1%7C0%7C638702204827123868%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=wuYH9PnqC9e4Ad463yjomit9sqMF9hTtCNEGJhQqK0A%3D&reserved=0
>> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdoi.org%2F10.1371%2Fjournal.pcbi.1002202&data=05%7C02%7Cfieldtrip%40science.ru.nl%7C2f9ec0f7e6054ef8be4808dd20455733%7C084578d9400d4a5aa7c7e76ca47af400%7C1%7C0%7C638702204827137956%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=Fu7cxfKXmOXl59AWBgZwpTxJWFmc91nYDz8fn5Sy8%2F8%3D&reserved=0>
>
>
> _______________________________________________
> fieldtrip mailing list
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmailman.science.ru.nl%2Fmailman%2Flistinfo%2Ffieldtrip&data=05%7C02%7Cfieldtrip%40science.ru.nl%7C2f9ec0f7e6054ef8be4808dd20455733%7C084578d9400d4a5aa7c7e76ca47af400%7C1%7C0%7C638702204827149591%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=vy8XqMWXfrInYkCj%2FbiVpRe%2FzrFTS2pJvCINovaQ5bE%3D&reserved=0
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdoi.org%2F10.1371%2Fjournal.pcbi.1002202&data=05%7C02%7Cfieldtrip%40science.ru.nl%7C2f9ec0f7e6054ef8be4808dd20455733%7C084578d9400d4a5aa7c7e76ca47af400%7C1%7C0%7C638702204827160768%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=hdcZdA6wlVK53VDjf8Suj0X7qxeQqQ6%2BRH0usYddp%2BQ%3D&reserved=0
--
Anne Guérin-Dugué
PR Emérite Université Grenoble Alpes (UGA)
GIPSA-lab / PSD / Equipe ViBS
Bureau B146
Site Ampère
11 rue des Mathématiques
BP 46
F - 38042 GRENOBLE
tel : +33 (0)4 76 57 43 73
mel :anne.guerin at gipsa-lab.grenoble-inp.fr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20241219/544944d6/attachment.htm>
More information about the fieldtrip
mailing list