对功能连接的体会

神经影像学分为功能像和核磁像,
功能像通过一系列预处理,有reho值,dc值,alff值等等,但是最重要的还是FC值。因为这个值比较容易解释,像reho啊,其对应的生理学意义不太好解释。
结构像经过一系列预处理,其实也有功能连接的指标,之前都是计算FA值,网络值这些,现在也有计算功能连接值的。这方面暂且不提。

这里只专注于功能像。
功能像的所有计算和分析,都建立在最原始的数据上。最原始的数据只有2个方面,一个是体素的体素值,一个是时间序列值。
计算功能连接,实际上是计算相关性,而且功能连接也只能 one versus one,因为其本质就是相关性。
具体实例来说:可以计算一个体素和一个体素的功能连接,可以计算一个脑区和脑区的功能连接,可以计算一个脑功能网络和一个脑功能网络的功能连接。
对于体素和体素的功能连接,其实就是很正常的普通的相关性分析,但是这个一般不用,因为单个体素在生理学上没有任何意义。
对于脑区和脑区的功能连接,这是比较常用的计算方式。但是它是怎么计算出来的呢?
下面以dparsf得到的results为例。
经过处理后,original data被import到MNI空间,然后形状是(61,73,61,230),然后看results里的order key文件,dparsf默认是用了多个模板提取了很多的模板roi,里面包括了Mask的ROI 1-10,Dosenbach的160ROI,Power Neuro的264ROI,所以一共就生成了2287个ROI。这就是MNI公共空间的所有ROI了。
以ROI1FCMap_Sub_001为例,它的形状是(61,73,61,1),这很容易理解,就是ROI1这个点和其余体素去计算相关性,然后以ROI1为1,其他点的值就是R值。所以再看看result里面的ROIcorrelation,那就好理解了,就是2287×2287的矩阵。ROIcenter of mass就储存了它的坐标,包括了自然空间坐标和MNI坐标。
经过上述解释,相信大家和我一样,对ROI和功能连接就十分清晰明了了。
举例二:
放入两个大一点的自定义ROI,放入一个sub,我们来计算ROI-ROI的功能连接。
1、首先是提取了ROI的时间序列,所以就是(2,230),然后自动计算了correlation 和 fisher z的correlation。看,就像我猜的那样,ROI1就是1,ROI2的值就是他们之间的功能连接。我真的是太聪明了。
在这里插入图片描述
在这里插入图片描述

2、我们放进入sub2的,同理得到这些。
3、对于两个ROI的功能连接变化,当然一个sub的两个ROI只有1个值,一个sub和另一个sub是没办法做连接变化的。但是换个角度想想,假如sub里面包括多个sub-sub呢,那就有多个sub-sub了,那另一个sub和这个sub就可以做功能连接变化了,就用置换检验(在临床上,会选择参数或者非参数,在神经影像学里,常规用置换检验,不用其他方法,因为其他方法假阳性高,此外这个方法不需要前提假设,非常方便,一般不会被审稿人质疑结果)。

如此这样,脑区与脑区的功能连接变化就清晰明了了。
但是这样又出现了新的问题,这个问题涉及到后面要提的网络间与网络间的功能连接变化。
我们知道,一个脑区一般只有激活和抑制的状态,目前来说,基本我们人体的状态只有单向(除了物理学里面的波粒二象性,这个比较特殊),神经元也是如此。那么从定义的脑区去研究另一个定义的脑区,用的是脑区内所有体素的平均时间序列,这没问题。但是,假如define的ROI跨脑区呢?假如恰好这个脑区是激活,旁边的脑区是抑制呢?那么这个ROI的均值就很小很小了,(假如激活=抑制,那均值就是0),0与其他值去相关,当然就不对了,因此这个时候,其实更好的方法是,使用主成分的时间序列。就是计算这个区域体素的主成分,然后提取主成分的时间序列。这个方法可以在SPM12里面去实现。
网络间与网络间的问题,其实就是上面我们说到的这个问题,把这个问题理解透了,其实网络间与网络间的功能连接就很简单了。

还有一个问题,就是相关性计算的问题。在计算相关性的时候,一定要去除全局信号,因为这影响很大。在去除全局信号以后,使用皮尔逊相关,还是有一个问题,就是这个相关是包含了该ROI和其他所有体素的影响,所以r值会很大,假阳性高。这个时候,其实更推荐使用稀疏的逆协方差方法,这个方法把其他所有体素当成干扰因素,去分析两个ROI的直接相关性,也就是我们所说的偏相关的负值。
稀疏的逆协方差方法使用后,ROI-ROI的功能连接强度会弱很多,虽然假阳性低了,但是太严格,太难出结果。有一个折衷的方法,并且有文章表面其鲁棒性更好,重复性也更好,就是基于切线空间的相关,这种方法的连接强度在皮尔逊相关和偏相关之间,一般这种方法出的结果,不会被审稿人去质疑。

以上就是功能像的功能连接的本质。这是干货,能理解透彻的话,自己用R和python就可以用脚本去计算ROI的连接变化,然后挑选有显著p值的功能连接变化。

代码如下: ```c #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit LED1=P1^1; sbit LED2=P1^2; sbit LED3=P1^3; sbit K1=P3^2; uchar Count = 0; uchar LED2_Flag = 0; uchar LED3_Count = 0; uchar LED3_Flag = 0; void Init(); void LED1_Blink(); void LED2_Control(); void LED3_Blink(); void Send_Data(uchar dat); void main() { Init(); while(1) { LED1_Blink(); LED2_Control(); LED3_Blink(); Send_Data(P1); } } void Init() { TMOD &= 0xF0; TMOD |= 0x01; TH0 = 0xFC; TL0 = 0x67; EA = 1; ET0 = 1; TR0 = 1; ES = 1; SM0 = 0; SM1 = 1; REN = 1; } void LED1_Blink() { if(Count == 5) { Count = 0; LED1 = ~LED1; } } void LED2_Control() { if(K1 == 0 && LED2_Flag == 0) { LED2_Flag = 1; LED2 = 1; } if(LED2_Flag == 1) { Count++; if(Count == 10) { Count = 0; LED2 = 0; LED2_Flag = 0; } } } void LED3_Blink() { if(LED2_Flag == 0 && LED3_Flag == 0) { LED3_Count++; if(LED3_Count == 5) { LED3_Count = 0; LED3_Flag = 1; } } if(LED3_Flag == 1) { Count++; if(Count == 5) { Count = 0; LED3 = ~LED3; LED3_Count++; if(LED3_Count == 20) { LED3_Count = 0; LED3_Flag = 0; } } } } void Send_Data(uchar dat) { SBUF = dat; while(!TI); TI = 0; } void Timer0() interrupt 1 { TH0 = 0xFC; TL0 = 0x67; Count++; } void UART() interrupt 4 { if(RI) { RI = 0; } if(TI) { TI = 0; } } ``` 实验心得: 本次实验是一个比较全面的综合性实验,需要我们综合运用到了单片机的定时器、外部中断、串口通信等知识点。 在编写代码的过程中,需要我们分析每个 LED 的控制方式和亮灭时间,结合定时器的中断时间,来实现各个 LED 的控制。 在实验的过程中,我遇到了很多问题,例如串口通信时发送数据时需要等待 TI 标志位置位,否则会导致数据发送错误;LED2 控制时需要注意按键的抖动问题,需要通过中断标志位来控制 LED2 的亮灭等等。 通过这次实验,我深入了解了单片机的定时器、外部中断、串口通信等知识点,提高了编程能力和解决问题的能力。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clancy_wu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值