经过这一年

做事要循环渐进  不能一步吃个胖子

connectivity 搞了两周  从图论到各种

今天用个列子也理解下 connectivity到底什么玩意

这里面用到一个  multivariate autoregress mode  多参数自回归模型

就是 有多个变量的多个函数   这个模型试图找出这些函数之间的组合关系 (相关性,相关性就是connectivity的基础)

x(t) = 0.8*x(t-1) – 0.5*x(t-2)

y(t) = 0.9*y(t-1) + 0.5*z(t-1) – 0.8*y(t-2)

z(t) = 0.5*z(t-1) + 0.4*x(t-1) – 0.2*z(t-2)

 

t-1    t-2 为两个时间点

三个时间序列函数,自变量里面都牵涉到 x y z

这三个方程是结果,

我们要根据它们给出的数据反向模拟出这三个方程

数据我们生成如下 :

cfg             = [];
cfg.ntrials     = 500;
cfg.triallength = 1;
cfg.fsample     = 200;
cfg.nsignal     = 3;
cfg.method      = 'ar';

cfg.params(:,:,1) = [ 0.8    0    0 ; 
                        0  0.9  0.5 ;
                      0.4    0  0.5];
                      
cfg.params(:,:,2) = [-0.5    0    0 ; 
                        0 -0.8    0 ; 
                        0    0 -0.2];
                        
cfg.noisecov      = [ 0.3    0    0 ;
                        0    1    0 ;
                        0    0  0.2];

data              = ft_connectivitysimulation(cfg);

                                  三个信号如上图所示 

那么我们对这三列信号进行多变量分析
cfg         = [];
cfg.order   = 5;
cfg.toolbox = 'bsmart';
mdata       = ft_mvaranalysis(cfg, data);

For the actual computation of the autoregressive coefficients FieldTrip makes use of
an implementation from third party toolboxes. At present ft_mvaranalysis supports
the biosig and bsmart toolboxes for these computations.

我们使用第三方 bsmart进行多变量分析 

mdata = 
         dimord: 'chan_chan_lag'
          label: {3x1 cell}
         coeffs: [3x3x5 double]
       noisecov: [3x3 double]
            dof: 500
    fsampleorig: 200
            cfg: [1x1 struct]

得到结果如上,相关系数里面有个3x3x5系数矩阵
val(:,:,1) =

 0.7939 0.0008 -0.0013
 0.0047 0.8988 0.4905
 0.4011 -0.0016 0.4983


val(:,:,2) =

 -0.4992 -0.0004 0.0017
 -0.0026 -0.8023 -0.0036
 0.0015 -0.0003 -0.2064


val(:,:,3) =

 -0.0025 -0.0001 -0.0015
 0.0050 -0.0023 0.0019
 0.0026 -0.0016 0.0013


val(:,:,4) =

 -0.0046 0.0012 0.0048
 -0.0096 0.0008 -0.0054
 -0.0017 0.0003 -0.0021


val(:,:,5) =

 -0.0042 -0.0013 -0.0101
 0.0063 -0.0092 0.0060
 0.0056 -0.0008 -0.0029

对于Oder 可以理解为相关变量系数

这里求了五个延伸,其实第一第二是最重要的  后面是三个是可以忽略不计的

对比我们设定的方程,几乎是完美逼近

这样你就可以理解 multivariate autoregress mode 干啥的了

transfer matrix  转移矩阵

这个东西 就是指的一个状态到下个状态的转化概率

每一列的和为1

有个mdata 我们就可以通过相关系数计算频谱转移矩阵

cfg        = [];
cfg.method = 'mvar';
mfreq      = ft_freqanalysis(cfg, mdata);

Filedtrip自带freqanalysis 里面可以用mvar的方式进行频谱计算

'mvar', does a fourier transform on the coefficients
                         of an estimated multivariate autoregressive model,
                         obtained with FT_MVARANALYSIS. In this case, the
                         output will contain a spectral transfer matrix,
                         the cross-spectral density matrix, and the
                         covariance matrix of the innovatio noise.

 

mfreq = 
        label: {3x1 cell}
        freq: [1x101 double]
        dimord: 'chan_chan_freq'
        transfer: [3x3x101 double]
        noisecov: [3x3 double]
        crsspctrm: [3x3x101 double]
        dof: 500
        cfg: [1x1 struct]

上述函数计算了 1-100频段的频谱转移矩阵 transfer matrix 和 crsspetrm 交叉频谱密度矩阵

Non-parametric computation of the cross-spectral density matrix

当然我们也可以通过非参数计算

cfg           = [];
cfg.method    = 'mtmfft';
cfg.taper     = 'dpss';
cfg.output    = 'fourier';
cfg.tapsmofrq = 2;
freq          = ft_freqanalysis(cfg, data);

这里注意输出是fourier 因为这种输出可以直接作为coherence, phase-locking value and phase slope index
方法计算connecitvity 直接使用

现在我们有了两种方式的freq,第一种是使用多变量回归得到 mfreq 
第二种是直接使用非参数计算的 freq

cfg           = [];
cfg.method    = 'coh';
coh           = ft_connectivityanalysis(cfg, freq);
cohm          = ft_connectivityanalysis(cfg, mfreq);

我们分别计算这两种数据的conectivity   结果如下
cohand com
上图可以看出,coh不平滑,cohm很平滑,当然两者都可以逼近的很好

The coherence measure is a symmetric measure, which means that it does not provide
 information regarding the direction of information flow between any pair of signals.
相关性测量时对称的,它并不能提供两队信号之间的信息流动方向
 In order to analyze directionality in interactions, measures based on the concept 
of granger causality can be computed. These measures are based on an estimate of 
the spectral transfer matrix, which can be computed in a straightforward way from 
the multivariate autoregressive model fitted to the data.

为了测试内在的方向,我们进行因果计算,这里使用的频谱转化矩阵

 

cfg=[];

cfg.method=’granger';

granger=ft_conectivityanalysis(cfg,mfreq)

granger

我们很清楚的看到

singal1 和 2 3没有因果上的关系 (singal1 的变量中没有 y z  只有x )

singal2 和 1 3 都有关系 (singal2 里面有y  和 z,没有x)

singal3 和 1有关系 (singal2 里面有x和 z   没有y)

 

通过granger方法更好的可以观察三个信号之间的交叉关系

 

下面我们同另外三种方式来计算三个信号之间的差异

partial directed coherence (pdc),

cfg           = [];
cfg.method    = 'pdc';
pdc       = ft_connectivityanalysis(cfg, mfreq);

dtf

 

 

directed transfer function (dtf),

 

cfg           = [];
cfg.method    = 'dtf';
dtf       = ft_connectivityanalysis(cfg, mfreq);
pdc

phase slope index (psi). (Note that psi will require specifying cfg.bandwidth.

cfg           = [];
cfg.method    = 'psi';
cfg.bandwidth=[8 14];
psi       = ft_connectivityanalysis(cfg, mfreq);

psi

 

 

上述几种方法可看  directed transfer function 是最精确的表述了三个函数之间的相关性 

在 brain connectivity 上  是多个channel 之间的比较,相对来说更复杂,但是其原理还是基于此文章所述

寻找channel之间的关系,可以根据不同的方式计算交叉频谱  最终来可视化其之间的关系。