NIRS hyperscanning data analysis (4) coherence analysis

1 min read

NIRS hyperscanning data analysis (1)
NIRS hyperscanning data analysis (2)
NIRS hyperscanning data analysis (3)
NIRS hyperscanning data analysis (4)

How do we analyze hyperscanning data to find out the relationship between two brains? Obviously correlation is the first thought. However, raw correlation analysis might be susceptible to noise in the data (e.g. physiological noise such as heart beating, or motion noise). Wavelet coherence is a great way to find correlation between two signals – at the same time not affected by physiological noises. To understand wavelet coherence, you might want to read:

  1. Wavelet coherence
  2. What does a wavelet coherence plot tell you?

Let’s look at the data of a pair of subjects (please click the image to zoom):

Wavelet coherence of a pair of subjects
Wavelet coherence of a pair of subjects

There are 22 channels in total in each participant. Each small plot in the figure above is for one channel. The plots are arranged following the real position of the channel on the participant’s head. How did I arrange them? I cut and paste and arrange in PowerPoint 🙂 You can imagine it took me some time. I wish there is a handy tool.

By looking at this figure, a pattern pops out – there is a band in the period 6.4s in multiple channels. Maybe this band (increase of coherence) is a signature of collaboration. To quantify this, we average the coherence value around the band (between periods 3.2 and 12.8s in the task block, and the rest period in between):

[Rsq,period,scale,coi,sig95] = wtc(signal1,signal2,'mcc',0, 'ms',128);
period32 = find(period>32);
period32 = period32(1);
b1 = mean(mean(Rsq(period32:end, marktime(1):marktime(2))));
bi = mean(mean(Rsq(period32:end, marktime(2):marktime(3))));
b2 = mean(mean(Rsq(period32:end, marktime(3):marktime(4))));

Now we get a 3 values for each channel. I normally define “coherence increase” as the average of the coherence during task minus the coherence in rest. So CI = (b1+b2)/2 – bi

For each channel in each subject pair, we got a single value (CI). Then for each channel, we can do a group analysis using T-test. After we get all the T-values for all channels, then we can plot the map using plotTopoMap

Group coherence T map
Group coherence T map

This is basic analysis. You can go much deeper from here. Below are some examples:

  1. Is there a learning effect? i.e. is the performance during the 2nd block better than the 1st block? Is the coherence increase higher than the 1st block?
  2. Does coherence increase in the collaboration block differ from other blocks (such as competition, independent blocks)?
  3. Does the phase of the coherence carry any information?


Receive email notification via email 博客有新内容通知我
文献鸟,永远不错过新文献!

Don't want to miss new papers in your field? Check out Stork we developed:


第二十六期 fNIRS Journal Club 视频

来自上海精神卫生中心的胡志善博士为大家介绍了一篇他们去年发表的综述(静息态近红外在研究发育的应用)。视频如下: Youtube:https://youtu.be/C7xIRrBUhhg Youku: https://v.youku.com/v_show/id_XNTgzNTQ5ODg3Mg==.html
Xu Cui
4 sec read

第二十六期 fNIRS Journal Club 通知 2022/1/15,10:00am

来自上海精神卫生中心的胡志善博士将为大家介绍具体一篇他们去年发表的综述(静息态近红外在研究发育的应用)。热烈欢迎大家参与讨论。 时间: 北京时间2022年1月15日上午10:00地点: https://zoom.com房间号: 897 8179 5073密码: 333858 胡博士要讲解的文章如下: Hu, Liu, Dong, Niu (2020) Applications of Resting-State fNIRS in the Developing Brain: A Review...
Xu Cui
6 sec read

第二十五期 fNIRS Journal Club 视频

来自华东师范大学的胡银莹博士为大家介绍了具体如何计算和验证超扫描实验中脑间同步性,并分享做fNIRS实验相关方面的应用经验。视频如下: Youtube:https://youtu.be/xI_6wKd06io Youku:上传后被youku屏蔽,原因不详。
Xu Cui
3 sec read

4 Replies to “NIRS hyperscanning data analysis (4) coherence analysis”

  1. Dear Dr.Cui:
    I am little confused about the formual” b1 = mean(mean(Rsq(period32:end, marktime(1):marktime(2))))”,especiall the period32:end.

    In the context, you said the period between 3.2-12.8(32-128) was your instrested, so if you want to extra the correlation value of that band, the formal is Rsq(period32:period128, marktime(1):marktime(2)), right?

  2. Hi Prof. Cui,
    I’m trying to add support for 3×10 to plotTopoMap.
    In plotTopoMap.m, during testing of my new version, I’ve found m(10,2:3) and m(4,12) miscomputed (divided by a wrong number). Maybe your team (if not done yet) would like to program it in an more efficient way:) It really took me several hours to read and understand and generate a new one>_< Haha!
    best,
    Sam

Leave a Reply

Your email address will not be published. Required fields are marked *