资讯详情

静息态EEG微状态分析全流程:Cartool从GFP峰值提取到组水平聚类实战

📅 2026/9/20 12:25:10 | 华诺云谱 👁 阅读
静息态EEG微状态分析全流程:Cartool从GFP峰值提取到组水平聚类实战
1. 静息态EEG微状态分析到底在做什么静息态脑电微状态分析说白了就是把一段连续记录的自发脑电切成一个个几十到上百毫秒的“稳定地形图片段”再把这些片段归纳成几个反复出现的经典模板。它回答的问题很朴素人在闭眼放松、什么都不做的时候大脑的电场地形是不是在几个固定状态之间来回跳每个状态停留多久、出现多频繁、切换多快这些指标后来被大量用于研究注意、意识状态、精神疾病等方向。我最早接触微状态是在做一组静息态数据时当时用别的工具跑出来结果总是不稳定后来换成Cartool做组水平聚类才把流程理顺。Cartool是日内瓦那边开发的一款免费工具专门做EEG微状态和地形图分析它的强项在于全局场强GFP峰值提取、层次聚类和模板匹配这一整套链路都内置了不用自己从零写代码。但它也有个特点界面偏老派参数藏得深新手第一次打开很容易懵。这篇文章面向的是已经能完成基本EEG预处理滤波、去伪迹、坏导插值、重参考的读者我会把从GFP峰值提取、组水平聚类、聚类数选择到模板匹配、结果导出这一整条路走一遍。重点讲清楚每一步为什么这么做、参数怎么定、哪里容易翻车。你不需要会写代码但需要理解聚类的基本逻辑否则选K值的时候只能瞎猜。提示微状态分析对预处理质量极其敏感。如果原始数据里还有明显的眼动、肌电、坏导聚类出来的模板会非常脏后面所有指标都不可信。这一步没有捷径。2. 分析前的数据准备与Cartool工程搭建2.1 输入数据的格式与预处理底线Cartool原生支持的是.dat/.ep这类自有格式但实际工作中我们的数据多半来自其他采集系统。常见做法是先把预处理好的数据导出为ASCII文本或EDF再导入Cartool。我一般推荐导出为文本格式因为Cartool对文本的容错性更好导进去之后可以立刻在2D/3D地形图上检查通道位置对不对。预处理底线我列几条硬指标达不到就别急着做微状态采样率统一到250Hz到500Hz之间。太高没必要微状态的时间尺度在毫秒级250Hz足够太低会丢失地形细节。带通滤波建议1Hz到40Hz或0.5Hz到45Hz目的是去掉慢漂移和高频肌电。重参考用平均参考或CZ参考都行但整组数据必须统一不能一半平均参考一半别的。坏导必须插值且插值后要在Cartool里目视确认地形图没有明显畸变。眼动伪迹用ICA或回归去掉后记得回看一遍确认没有把前额的真实活动一起削掉。通道数量方面微状态分析对通道数没有硬性下限但64导以上做出来的地形图会明显更平滑、更稳定。如果是32导甚至更少也能做只是模板的空间分辨率会粗一些解释时要谨慎。2.2 在Cartool里建立组水平工程Cartool做组水平分析的核心思路是先把每个被试的数据单独读进来提取各自的GFP峰值地形图再把这些地形图汇总成一个大的“地形图池”对这个池子做聚类。所以工程搭建的关键是统一坐标和通道顺序。具体操作顺序我习惯这样打开Cartool新建一个workspace把所有被试的预处理文件拖进去。逐个检查每个文件的通道标签和坐标。如果不同被试的通道顺序不一致聚类会直接崩掉。Cartool里可以用Tools Electrodes查看和编辑坐标。确认所有文件的采样率、时长、参考方式一致。对每个被试单独跑一次GFP计算先看看GFP曲线是否正常——正常的静息态GFP应该有明显的峰谷交替如果曲线很平或者全是尖刺说明预处理有问题。这里有个容易忽略的点被试之间的数据时长最好接近。如果一个人记录5分钟、另一个人记录20分钟长的那位会在聚类池里占更大权重导致模板偏向他的数据。常见做法是每个被试截取相同长度的干净片段比如都取2分钟。注意Cartool的工程文件不会自动帮你对齐通道通道顺序错了它不会报错只会默默给你一个错误结果。这一步一定要人工核对。3. GFP峰值提取微状态分析的起点3.1 为什么是GFP而不是原始波形全局场强GFP是把某一时刻所有电极的电压值做空间标准差得到的。它衡量的是“这一刻整个头皮电场的强度有多强”。GFP的局部极大值代表电场地形最清晰、最稳定的时刻。微状态分析就建立在这个假设上在GFP峰值附近地形图是稳定的可以代表一个微状态。用GFP而不是原始波形好处是它跟参考电极无关因为标准差对整体偏移不敏感而且能自动把那些地形模糊、处于过渡态的时间点排除掉。这也是为什么微状态模板通常看起来都很“干净”——它们是从最清晰的地形里挑出来的。3.2 在Cartool里提取GFP峰值地形图操作路径大致是Tools GFP Extract peaks。关键参数有两个GFP峰值的最小间隔默认可能给的是几十毫秒。这个参数决定两个峰之间至少隔多久才算独立。设太小会把噪声当峰设太大又会漏掉真实状态。我的经验是设在10ms到20ms之间比较稳具体看采样率。是否只保留局部极大值一定要勾选否则会把上升沿上的点也当峰。提取完成后Cartool会生成一个包含所有峰值地形图的文件。这时候你可以先做个快速检查把所有峰值地形图按时间顺序浏览一遍看看有没有明显异常的比如某个通道爆掉、地形图半边黑半边白。异常的峰值地形图要手动剔除否则会污染聚类池。3.3 峰值数量与后续聚类的规模峰值数量直接决定聚类池的大小。一个被试2分钟的静息态数据通常能提取出几百到上千个峰值地形图。如果一组有20个被试聚类池可能就有上万个地形图。这个规模对Cartool的层次聚类来说是可以接受的但计算时间会比较长。如果峰值数量异常少比如一个被试只有几十个通常说明GFP曲线太平可能是滤波太狠或者数据本身质量差。这时候要回头查预处理而不是硬着头皮往下做。4. 组水平聚类K值怎么选、层次聚类怎么跑4.1 层次聚类的基本逻辑Cartool默认用的是层次聚类具体是凝聚式agglomerative一开始每个地形图自成一类然后不断把最相似的两类合并直到只剩一类。相似度用空间相关性或欧氏距离衡量。整个过程会生成一棵树树状图你在这棵树上切一刀就得到K个聚类。这里要澄清一个常见误解微状态分析里的“聚类”不是K-means那种需要预先指定K并迭代的算法而是层次聚类。K-means在微状态里也有应用但Cartool的主流程是层次聚类。热词里出现的“kmeans聚类算法用什么软件”“k值聚类”其实反映了很多人的困惑——K值到底怎么定。4.2 K值选择的几种主流做法K值就是最终保留几个微状态模板。文献里最常见的答案是4个经典的四模板A、B、C、D但这绝不是唯一正确答案。我实际用下来K值选择有几种思路方法做法优点缺点文献惯例直接取4可比性好省事可能不符合你的数据解释方差看不同K下的交叉验证解释方差有量化依据曲线常常没有明显拐点轮廓系数计算聚类紧致度和分离度客观计算量大Cartool不直接给目视先验结合地形图可解释性灵活主观性强我个人的做法是先跑K2到K8把每个K下的模板地形图都导出来看。如果K4和K5的模板几乎一样那就取4如果K5多出来的那个模板有明确的生理意义比如某个特定区域的活动可以考虑取5。关键是不要为了凑4而强行取4。4.3 在Cartool里执行组水平聚类操作路径是Tools Microstates Group clustering。把之前提取的所有峰值地形图文件加载进来选择聚类方法通常选TAAHC即Topographic Atomize and Agglomerate Hierarchical Clustering这是Cartool推荐的变体比传统层次聚类更稳定然后设定K值范围。跑完之后Cartool会给出每个K值下的模板地形图、每个模板的解释方差、以及每个被试的模板匹配结果。这时候要重点看两样东西模板地形图是否可解释有没有哪个模板看起来像噪声、或者跟另一个模板高度相似。解释方差是否够高一般K4时能解释70%以上的方差算不错如果只有50%多说明K可能不够或者数据太乱。提示TAAHC比传统层次聚类慢但结果更稳定尤其是组水平数据。如果时间允许优先用它。4.4 聚类结果的稳定性检查组水平聚类最怕的是“换个被试组合模板就变了”。检查稳定性的一个土办法是留一法每次去掉一个被试重新聚类看模板地形图是否基本一致。如果去掉某个被试后模板大变说明这个被试的数据在主导聚类要么他的数据有问题要么样本量太小。另一个办法是分半信度把被试随机分成两半各自聚类然后比较两组的模板相关性。相关性高说明结果稳。这个操作在Cartool里要手动做两次稍微麻烦但对于要发文章的结果值得花这个时间。5. 模板匹配把模板套回每个被试的时间序列5.1 模板匹配在做什么聚类得到的是“组水平模板”但每个被试的每一时刻到底属于哪个微状态需要靠模板匹配来判定。匹配的逻辑是对每个时间点计算它的地形图与每个模板的空间相关性相关性最高的那个模板就是该时刻的标签。这样每个被试就得到一条微状态时间序列。这一步在Cartool里是Tools Microstates Fitting。把组水平模板文件和每个被试的原始数据加载进去选择匹配方法通常用空间相关性跑完就能得到每个被试的标签序列。5.2 匹配时的几个关键参数是否允许一个时间点匹配多个模板一般不允许取最高相关即可。是否设置相关性阈值有些流程会设一个最低相关性低于阈值的点标为“未匹配”。我一般不设阈值因为静息态里本来就有过渡态强行剔除会丢失信息。是否平滑标签序列Cartool有个选项可以对标签序列做时间平滑减少频繁跳变。这个要谨慎平滑太狠会把真实的快速切换抹掉。我通常不平滑或者只做很小的平滑窗口。5.3 从标签序列到微状态指标匹配完成后每个被试的标签序列可以算出几个核心指标持续时间Duration每个微状态每次出现的平均时长单位毫秒。出现频率Occurrence每秒出现多少次。覆盖率Coverage该微状态占总时间的比例。转换概率Transition probability从一个微状态切换到另一个的概率矩阵。这些指标在Cartool里可以直接导出也可以导出标签序列后用别的工具算。我习惯导出标签序列因为后面做统计的时候更灵活。6. 常见问题与排查技巧实录6.1 聚类模板看起来像噪声怎么办这是新手最常遇到的问题。模板地形图如果看起来杂乱、没有明显的正负区域通常是这几个原因预处理没做干净肌电、眼动残留会直接污染地形图。回去查原始数据。峰值提取参数太松把太多过渡态地形图也提进来了。把最小间隔调大一点。通道坐标不对地形图插值依赖坐标坐标错了地形图就乱了。检查电极坐标。被试太少组水平聚类需要一定样本量5个被试以下做出来的模板往往不稳。6.2 K值到底选几个才“对”这个问题没有标准答案但有几个判断原则如果K4和K5的模板高度相似选4。如果某个K下出现一个只占很小比例的模板比如覆盖率不到5%考虑减K。如果解释方差在某个K之后提升很小说明再加K意义不大。最终要结合你的研究问题和文献可比性来定。6.3 匹配结果里某个微状态几乎不出现如果匹配后发现某个模板的覆盖率极低比如1%可能是这个模板本身就是聚类时产生的“边角料”可以考虑减K。匹配方法或参数有问题导致这个模板总是匹配不上。数据本身确实缺少这个状态这在某些临床群体里是真实存在的现象。6.4 不同被试的指标差异很大静息态微状态指标本身个体差异就大但如果某个被试的指标明显偏离先查他的数据质量再查他的匹配标签序列有没有异常跳变。有时候一个被试的坏导没处理好会导致他的地形图整体偏移匹配结果全乱。6.5 常见问题速查表问题可能原因排查方向模板像噪声预处理差、峰值太松、坐标错查原始数据、调峰值参数、核对坐标K值难定数据本身模糊跑多个K对比、看解释方差某模板覆盖率极低边角料模板或匹配问题减K、检查匹配参数被试间差异大个体差异或数据质量查坏导、查标签序列聚类结果不稳样本量小或被试主导留一法、分半信度提示微状态分析里预处理和峰值提取的质量决定了上限聚类和匹配只是在下限里做文章。花在预处理上的时间永远不亏。7. 结果导出与后续统计的衔接Cartool能直接导出每个被试的微状态指标表格格式是文本可以直接拖进SPSS或R做统计。我一般会导出这几样每个被试的模板匹配标签序列用于自定义分析。每个被试的四个核心指标持续时间、频率、覆盖率、转换概率。组水平模板地形图用于画图。导出标签序列后如果要做组间比较通常用混合线性模型或重复测量方差分析把微状态类型作为被试内因素。转换概率矩阵则常用卡方检验或置换检验来比较组间差异。如果后续想用Python做更灵活的分析可以把标签序列读进numpy自己算指标。热词里提到的“层次聚类python”其实也可以用scipy.cluster.hierarchy复现Cartool的聚类逻辑但要注意Cartool的TAAHC有自己的细节直接复现不一定完全一致。8. 我踩过的几个坑和一点个人体会第一个坑是通道顺序。有次偷懒没核对结果两个被试的通道顺序反了聚类出来的模板怎么看怎么别扭查了一整天才发现。从那以后我每次都在Cartool里逐个核对通道标签。第二个坑是K值执念。刚开始总想着凑4个模板结果有个数据集明明K5更合理硬取4导致两个模板被强行合并解释方差掉了一大截。后来想通了K值是服务于数据的不是数据服务于K值。第三个坑是忽略过渡态。早期我会设相关性阈值把低相关的点剔除后来发现静息态里过渡态占比不小剔掉之后指标全偏了。现在我不设阈值保留完整序列。一点个人体会微状态分析看起来流程固定但每一步都有很多小决策这些决策累积起来会显著影响结果。Cartool把这些决策都暴露给你好处是透明坏处是容易选错。我的建议是每做一个关键决策都记下来为什么这么选这样后面写方法部分或者复现的时候不会抓瞎。最后分享一个小技巧如果组水平聚类跑得慢可以先把每个被试的峰值地形图数量控制在一个合理范围比如每个被试随机抽200个先跑一遍看模板大致长什么样确认方向对了再跑全量。这样能省不少等待时间。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。