fMRI(4-1)统计分析报告生成器说明

fMRI 统计分析报告生成器说明

文件:generate_stats_report.m

版本:v1.0

依赖:run_full_pipeline.m + run_post_analysis.m 的完整输出 + 被试分组 CSV


目录

  1. 功能概述
  2. 依赖环境
  3. 目录结构要求
  4. 输入参数
  5. 输出文件
  6. 全局配置参数
  7. 调用方式
  8. 数据预加载流程
  9. 报告页面详解
  10. 统计方法说明
  11. 辅助函数说明
  12. 网络-ROI映射参考
  13. 常见问题与排错

1. 功能概述

generate_stats_report.m 是 fMRI 静息态分析流程的分组统计分析报告生成器,面向两组被试的组间对比分析,生成包含描述性统计和(当样本量足够时的)推断统计结果的多页 PDF 报告。

核心特点:

  • 预加载全部被试数据后再统一生成图表,避免多次磁盘 I/O
  • 对所有关键指标执行独立样本 t-test ,计算 Cohen's d 效应量,并进行 Benjamini-Hochberg FDR 校正
  • 以中英双语图表(图注 + 表头)呈现结果
  • 含开关变量控制耗时页面的生成

generate_report.m 的区别
generate_report.m:单被试逐页展示,无统计检验
generate_stats_report.m两组汇总对比,含 t-test / FDR / Cohen's d,页面数量固定(最多 21 页)


2. 依赖环境

依赖项 版本要求 用途
MATLAB R2020b 及以上(推荐 R2022b+) 主运行环境
SPM SPM25(spm_25_01_02) NIfTI 文件读取(spm_volspm_read_vols
Statistics and Machine Learning Toolbox 必须 ttest2(独立样本 t-test)
exportgraphics 函数 MATLAB R2020a+ 内置 PDF 页面输出(低版本自动回退 print

SPM 路径(硬编码在脚本开头,需按实际修改):

matlab 复制代码
spm_path = 'D:\0share\0matelab_scripts\spm_25_01_02';

3. 目录结构要求

(以 root_dir = 'F:\test' 为例)

复制代码
F:\test\
├── data.csv                          ← 必须:被试分组信息
├── test-01\
│   └── results\
│       ├── framewise_displacement.mat  ← 变量:fd(向量)
│       ├── brain_mask.nii             ← 脑掩模(用于提取体素均值)
│       ├── ALFF.nii
│       ├── fALFF.nii
│       ├── sReHo.nii
│       ├── sVMHC.nii
│       ├── DC_WeightedSum.nii
│       ├── SeedFC\
│       │   ├── FC_PCC.nii
│       │   ├── FC_mPFC.nii
│       │   ├── FC_L_DLPFC.nii
│       │   ├── FC_R_DLPFC.nii
│       │   ├── FC_L_Amygdala.nii
│       │   └── FC_R_Amygdala.nii
│       ├── FC_matrix.mat              ← 变量:FC_z(N×N), roi_ids(N×1)
│       ├── dFC\
│       │   └── dFC_states.mat         ← 变量:dfc_labels, dfc_centers, win_size, dfc_step
│       └── GraphTheory.mat            ← 变量:CC, lambda, Eglob, Q, sigma, gamma,
│                                          lam_n, deg, str, BC, W_norm
├── test-02\  ...
└── group_analysis\
    ├── GroupComp_ALFF\
    │   ├── spmT_0001.nii               ← A>B 对比 T 图
    │   └── spmT_0002.nii               ← B>A 对比 T 图
    ├── GroupComp_fALFF\
    ├── GroupComp_sReHo\
    ├── GroupComp_sVMHC\
    └── GroupComp_DC_WeightedSum\

data.csv 外,其余文件均为可选------缺失时对应页面跳过,不报错。


4. 输入参数

参数 类型 默认值 说明
root_dir char 'F:\test' 数据根目录,含 test-* 被试子目录及 group_analysis/
group_csv char <root_dir>/data.csv 被试分组 CSV 文件路径

data.csv 格式

列名 类型 必须 说明
SubjectID 字符串 被试 ID,需与 test-* 目录名对应(如 sub-01 对应 test-01
Group 整数 组别编号,1 = 组A,2 = 组B
Age 数值 年龄(有则显示在被试信息表中)
其他列 任意 读入但不使用

示例

csv 复制代码
SubjectID,Group,Age
sub-01,1,24
sub-02,1,26
sub-03,2,23
sub-04,2,28

被试目录匹配规则

脚本按以下优先级将 SubjectID 映射到 test-* 目录:

  1. 精确匹配:test-<两位数字> 格式(如 sub-01test-01
  2. 名称完全匹配(strcmpi
  3. 按 CSV 行顺序与扫描到的 test-* 目录顺序对应

5. 输出文件

文件名 路径 说明
fMRI_Stats_Report.pdf <root_dir>/fMRI_Stats_Report.pdf 多页矢量 PDF(11×8.5 英寸横向),最多 21 页
  • 若文件已存在,先删除再重建
  • 默认关闭 2 个可选页面(见 [§6 开关变量](#§6 开关变量)),实际页数约为 19--21 页。

6. 全局配置参数

脚本顶部提供以下可调配置项(无需修改函数签名):

6.1 报告生成开关

matlab 复制代码
do_dfc_page = false;  % 第 15--16 页:dFC 状态停留时间 + 中心矩阵可视化(默认关闭)
do_hub_page = false;  % 第 19 页:Hub 节点分析(耗时,默认关闭)
开关 默认 控制页面 说明
do_dfc_page false 第 15 页(dFC 状态停留时间)+ 第 16 页(聚类中心可视化) 两页同时开/关;对 ROI 数量大时渲染较慢
do_hub_page false 第 19 页(Hub 节点分析) 显示 Top-10 Hub 节点汇总表及得分分布图

将对应开关设为 true 即可启用该页面。

6.2 颜色方案(colorblind-safe)

matlab 复制代码
CLR_A    = [0.00 0.45 0.70];   % 组A(蓝色)
CLR_B    = [0.85 0.33 0.10];   % 组B(橙色)
CLR_diff = [0.47 0.67 0.19];   % 差异(绿色,未使用)
CLR_NET  = lines(7);           % 7 网络颜色

颜色组合参考 Wong (2011) colorblind-safe palette,同时考虑色觉缺陷人群的可读性。


7. 调用方式

matlab 复制代码
% 方式一:使用默认路径和默认 data.csv
generate_stats_report('F:\test')

% 方式二:指定分组 CSV
generate_stats_report('F:\test', 'F:\test\my_groups.csv')

命令窗口输出示例:

复制代码
=== fMRI 统计分析报告 ===
被试: 20 (组A=10, 组B=10)
输出: F:\test\fMRI_Stats_Report.pdf

── 预加载被试数据 ──
  ✓ sub-01 加载完成
  ✓ sub-02 加载完成
  ...
[页面  1] 封面
[页面  2] 被试信息表
[页面  3] 质量控制 FD
...
═══════════════════════════════════════════════════════
✅ 统计分析报告生成完成!
   输出: F:\test\fMRI_Stats_Report.pdf
   大小: 2541.3 KB / 共 19 页
═══════════════════════════════════════════════════════

8. 数据预加载流程

脚本在生成任何报告页面之前,先对所有被试循环一次,预加载以下数据:

数据类型 变量名 维度 来源文件
FD 时间序列 fd_all {n_subj × 1} cell framewise_displacement.mat
FD 统计量 fd_mean, fd_max, fd_pct025 n_subj × 1 同上,计算得到
体素指标均值 met_mean n_subj × 5 ALFF.nii 等,用 brain_mask.nii 掩模
种子点FC均值 seed_mean_fc n_subj × 6 SeedFC/FC_*.nii,全脑掩模均值
Atlas FC 矩阵 fc_mat_all {n_subj × 1} cell FC_matrix.mat
网络内FC net_within n_subj × 7 FC_matrix.mat 计算
网络间FC net_between n_subj × 7 × 7 FC_matrix.mat 计算
dFC 状态 dfc_all {n_subj × 1} cell dFC/dFC_states.mat
图论全局指标 gta_vals n_subj × 7 GraphTheory.mat
节点级指标 node_deg, node_str, node_bc, node_cc {n_subj × 1} cell GraphTheory.mat

体素指标提取方式 :读取 brain_mask.nii(0/1 体素掩模),提取 Y(mask3d) 内的非零有限值,计算其均值、标准差和中位数。

网络内/间 FC 计算 :根据 [§12 网络映射表](#§12 网络映射表),将 AAL3 ROI 分配到 7 个网络,提取对应 FC_z 子矩阵,取上三角均值(网络内)或全矩阵均值(网络间)。


9. 报告页面详解

总览

页码 标题 类型 统计检验 开关
1 封面 文字 --- ---
2 被试基本信息 表格 --- ---
3 质量控制 FD 图 + 表 --- ---
4 全脑体素指标汇总 表 + 柱状图 --- ---
5 ALFF 组间 T-map 脑图 --- ---
6 fALFF 组间 T-map 脑图 --- ---
7 ReHo 组间 T-map 脑图 --- ---
8 VMHC 组间 T-map 脑图 --- ---
9 DC 组间 T-map 脑图 --- ---
10 种子点 FC 组间对比 表 + 柱状图 ✅ t, p, p(FDR), d ---
11 Atlas FC 矩阵差异热图 热图 --- ---
12 网络内 FC 组间对比 表 + 柱状图 ✅ t, p, p(FDR), d ---
13 网络间 FC 矩阵 热图 --- ---
14 网络×指标差异热图 热图 --- ---
15 动态 FC 状态分析 表 + 堆叠图 --- ⚠️ do_dfc_page=true
16 dFC 状态中心矩阵 条形图 --- ⚠️ do_dfc_page=true
17 图论全局指标 表 + 雷达图 + 柱状图 ✅ t, p, p(FDR), d ---
18 节点级图论分布 直方图 --- ---
18+ 节点级汇总表 表格 --- ---
19 Hub 节点分析 表 + 得分图 --- ⚠️ do_hub_page=true
20 综合结果摘要 文字 --- ---
21 统计方法说明与局限性 文字 --- ---

第 1 页:封面

内容

  • 报告双语标题(中文 + 英文)
  • 生成时间、数据目录、被试总数(组A / 组B)
  • 全部分析指标列表
  • 样本量警告(若每组 N=1 时提示无法推断统计)

第 2 页:被试基本信息(表1)

内容 :列出每位被试的 ID、组别,以及年龄(如 CSV 含 Age 列)。末尾附各组年龄均值 ± SD 汇总行。


第 3 页:质量控制 FD(图1)

布局

区域 内容
左上图(0.56 宽) 所有被试 FD 时间序列(组A蓝色,组B橙色),红虚线标注 0.25 mm 阈值
右上图(0.28 宽) 组均值柱状图,含误差线(SD)
下方表格 每位被试:FD均值(mm)、FD最大值(mm)、超阈值帧百分比(>0.25mm)

图注:含组A/B的均值±SD数值描述。


第 4 页:全脑体素指标汇总(图2/表2)

布局

区域 内容
上方表格 每位被试 × 5 指标的脑掩模内均值,末尾附各组均值行
下方柱状图 5 指标组间均值对比(分组并排柱状图,误差线=SD)

5 个体素级指标

文件名 报告缩写 含义
ALFF.nii ALFF 振幅低频波动
fALFF.nii fALFF 分数振幅低频波动
sReHo.nii ReHo 平滑局部一致性
sVMHC.nii VMHC 平滑体素镜像同伦连接
DC_WeightedSum.nii DC 度中心性(加权和)

第 5--9 页:组水平 T-map(图3--7)

每个指标一页(ALFF、fALFF、ReHo、VMHC、DC),布局:

区域 内容
上半 A > B 对比 T 图(spmT_0001.nii),colormap: jet,范围 [-6, +6]
下半 B > A 对比 T 图(spmT_0002.nii

图注:含全脑均值、差异方向、差异百分比。

数据来源group_analysis/GroupComp_<metric>/spmT_000*.nii

若 T 图文件不存在,显示红框提示"Not found"。


第 10 页:种子点 FC 组间对比(图8/表3)

布局

区域 内容
上方表格(表3) 6 个种子点 × 9 列(ROI, G1均值, G2均值, Δ, t, p, p(FDR), d, 方向)
下方柱状图 6 个种子点的组均值 FC 对比(分组并排)

6 个种子点

种子点 坐标/定义
PCC 后扣带回
mPFC 内侧前额叶
L_DLPFC 左侧背外侧前额叶
R_DLPFC 右侧背外侧前额叶
L_Amygdala 左侧杏仁核
R_Amygdala 右侧杏仁核

FC 值定义:全脑掩模内 Fisher-z 均值(非特定目标区域的连接)。

统计 :对每个种子点进行独立样本 t-test,FDR 校正跨 6 个比较,显著结果(p < 0.05)以 * 标注。


第 11 页:Atlas FC 矩阵差异热图(图9)

布局(3 幅并排热图):

热图 内容 颜色范围
组A平均 FC 矩阵(AAL3 N×N) [-1, 1]
组B平均 FC 矩阵 [-1, 1]
差异矩阵(A-B) [-0.5, 0.5]

组平均计算 :对各组内被试 FC_z 矩阵取算术平均(缺失被试不计入)。

Colormap:RdBu(红=强/正,蓝=弱/负)。


第 12 页:网络内 FC 组间对比(图10/表4)

布局

区域 内容
上方表格(表4) 7 个网络 × 10 列(网络中文名, 缩写, G1均值, G2均值, Δ, t, p, p(FDR), d, 方向)
下方柱状图 7 个网络内 FC 组均值对比

7 个 Yeo 功能网络

缩写 中文名 英文名
DMN 默认模式网络 Default Mode Network
FPN 额顶控制网络 Frontoparietal Network
DAN 背侧注意网络 Dorsal Attention Network
VAN 腹侧注意网络 Ventral Attention Network
SMN 感觉运动网络 Sensorimotor Network
VIS 视觉网络 Visual Network
LIM 边缘网络 Limbic Network

统计:对每个网络进行独立样本 t-test,FDR 校正跨 7 个比较。


第 13 页:网络间 FC 矩阵(图11)

布局(3 幅并排 7×7 热图):

热图 颜色范围
组A均值矩阵 [0, 0.5]
组B均值矩阵 [0, 0.5]
差异矩阵(A-B) [-0.3, 0.3]

对角线填充对应网络的网络内 FC 均值(而非 0)。


第 14 页:网络×指标差异热图(图12)

布局(3 幅热图):

热图 内容
左上(7×5) 组A各网络×各指标均值
右上(7×5) 组B各网络×各指标均值
下方(7×5) 差异热图(A-B),含数值标注

注意 :此处体素指标均值为各指标的全被试组均值,而非网络特异性提取(所有网络行数值相同)。这是当前实现的简化处理------如需网络特异性提取,需对各网络的 ROI 单独计算指标均值。

差异热图每格包含文字标注:正值红色,负值蓝色,接近0灰色(阈值 ±0.05)。


第 15--16 页:动态 FC 状态分析【do_dfc_page=true 才生成,默认关闭】

触发条件do_dfc_page = true(默认 false)。两页同时启用或关闭。

第 15 页布局

区域 内容
上方表格(表5) 每位被试 × 5 个状态的停留时间占比,末尾附各组均值行
下方堆叠柱状图 两组在 5 个 dFC 状态的平均时间分配比例

停留时间(dwell time fraction):某状态出现的窗口数 / 总窗口数。

聚类数 :固定 dfc_k = 5(需与 run_post_analysis.m 中一致)。


第 16 页:dFC 状态中心矩阵(图14)【同 do_dfc_page 开关】

触发条件do_dfc_page = true,且至少有一个被试有 dFC 数据。

内容:选取有 dFC 数据的第一个被试,显示 k 个聚类中心的 FC 边向量条形图(每图一个状态,横轴=FC 上三角所有边,纵轴=Fisher-z 值)。

耗时原因:ROI 数量较多(165 区 → 13530 条边),渲染条形图较慢。


第 17 页:图论全局指标(图15/表6)

布局(两个表格 + 两个图):

区域 内容
上方表格(数据表) 每位被试 × 7 个图论指标,末尾附各组均值行
下方表格(统计表) 7 个指标 × 9 列(指标名, G1均值, G2均值, Δ, t, p, p(FDR), d, 方向)
左下雷达图 5 个指标(CC, Eglob, Q, σ, γ)归一化后的极坐标图,两组叠加
右下柱状图 7 个指标的原值分组对比(含误差线)

7 个图论全局指标

变量名 英文标签 含义
CC_mean Mean CC 全图平均聚类系数
lambda Char Path (L) 特征路径长度
Eglob Global Eff. 全局效率
Q Modularity (Q) 模块度
sigma Small-World (σ) 小世界系数(σ = γ/λ_n)
gamma γ 归一化聚类系数
lam_n λ_n 归一化路径长度

统计:对每个指标进行独立样本 t-test,FDR 校正跨 7 个比较。


第 18 页:节点级图论分布(图16)

布局(4 幅分布直方图并排):

指标 颜色
节点度(Degree) 组A蓝 / 组B橙
节点强度(Strength) 同上
聚类系数(CC) 同上
介数中心性(BC) 同上

直方图以概率归一化(Normalization='probability'),20 个 bin。

随后独立一页显示节点级汇总表(表7),含 4 个指标的组A/B 均值 ± SD 及方向。


第 19 页:Hub 节点分析(图17/表8)【可选,do_hub_page=true

Hub 得分定义

复制代码
Hub_score = (norm.Degree + norm.Strength + norm.BC) / 3

其中各指标分别对 [min, max] 做 min-max 归一化,取三者均值作为综合 Hub 得分。

内容

  • 表格(表8):每被试 Top-10 Hub 节点(ROI 编号 + 得分)
  • 折线图:所有被试按 Hub 得分降序排列的节点曲线,前 10 个节点用实心点高亮

第 20 页:综合结果摘要

结构化文字摘要,分 5 节:

  1. 质量控制:各组 FD 均值和超阈值帧比例
  2. 体素级指标:5 个指标的组间方向和差异百分比
  3. 功能连接:全矩阵均值FC,DMN 和 FPN 内FC
  4. 图论指标:7 个指标的组间具体数值对比
  5. 统计说明:样本量是否足够推断统计的提示

第 21 页:统计方法说明与局限性

详细记录以下内容(供报告引用):

  • 数据预处理方法(SPM/CAT12/DPABI 参数)
  • 各分析指标的计算方法
  • 统计检验说明(t-test、FDR、效应量)
  • 局限性(样本量、网络映射精度、GLM 阈值化等)
  • 工具箱引用建议

10. 统计方法说明

10.1 独立样本 t-test

由内部函数 do_ttest2(x, y) 实现,调用 MATLAB 内置 ttest2

触发条件:每组有效被试数 N ≥ 2(否则返回 NaN,表格显示"---")。

输出

返回值 说明
pval 双尾 p 值
tstat t 统计量
df 自由度(Welch 修正)
cohend Cohen's d 效应量

Cohen's d 计算

复制代码
sp = sqrt(((n1-1)*var(x) + (n2-1)*var(y)) / (n1+n2-2))
d  = (mean(x) - mean(y)) / sp

正值表示组A > 组B,负值表示组B > 组A。通常 |d| < 0.2 为小效应,0.2--0.8 为中效应,> 0.8 为大效应。

10.2 Benjamini-Hochberg FDR 校正

由内部函数 fdr_bh(p_raw) 实现,不依赖任何工具箱。

校正范围:每个独立统计表分别校正(不跨页合并),例如:

  • 页10:对 6 个种子点的 p 值校正
  • 页12:对 7 个网络的 p 值校正
  • 页17:对 7 个图论指标的 p 值校正

算法(标准 BH 步骤):

  1. 对 m 个 p 值从小到大排序,得到秩 i
  2. 调整后 p 值:p_adj(i) = p(i) × m / i
  3. 单调化:从大到小取累积最小值
  4. 截断至 [0, 1]

10.3 p 值显示规则

fmt_pval(p) 函数格式化:

条件 显示
p = NaN ---(样本量不足)
p < 0.001 <.001*
0.001 ≤ p < 0.05 0.xxx*(加星号)
p ≥ 0.05 0.xxx(无星号)

11. 辅助函数说明

do_ttest2(x, y) ← 主要统计函数

matlab 复制代码
[pval, tstat, df, cohend] = do_ttest2(x, y)

独立样本 t-test 封装,自动去除 NaN,组 N < 2 时返回全 NaN。


fdr_bh(p_raw)

matlab 复制代码
p_fdr = fdr_bh(p_raw)

Benjamini-Hochberg FDR 校正,输入 m×1 向量,输出校正后 p 值向量,NaN 值跳过。


fmt_pval(p)

matlab 复制代码
s = fmt_pval(0.032)   % → '0.032*'
s = fmt_pval(0.0002)  % → '<.001*'
s = fmt_pval(NaN)     % → '---'
s = fmt_pval(0.12)    % → '0.120'

格式化 p 值为显示字符串,显著者加星号。


fmt_num(v)

matlab 复制代码
s = fmt_num(3.14159)  % → '3.142'
s = fmt_num(NaN)      % → '---'

格式化数值为 3 位小数字符串,NaN 显示破折号。


direction_symbol(valA, valB)

matlab 复制代码
s = direction_symbol(0.5, 0.3)   % → '↑ G1>G2'
s = direction_symbol(0.3, 0.5)   % → '↓ G1<G2'
s = direction_symbol(0.5, 0.5)   % → '= 相等'

返回组间方向文字描述,用于表格"方向"列。


ternary_color(val)

matlab 复制代码
c = ternary_color(0.1)   % → [0.6 0.0 0.0](红)
c = ternary_color(-0.1)  % → [0.0 0.0 0.6](蓝)
c = ternary_color(0.01)  % → [0.3 0.3 0.3](灰)

根据正负值(阈值 ±0.05)返回文字颜色,用于热图数值标注。


共享辅助函数(与 generate_report.m 相同)

函数 签名 功能
new_fig fig = new_fig() 创建离屏图形窗口(11×8.5 英寸)
save_page save_page(fig, pdf_out) 追加保存页面到 PDF
section_title section_title(fig, txt) 绘制页面蓝色标题栏
caption_text caption_text(fig, txt) 绘制页面底部图注文字
draw_table draw_table(fig, tdata, pos, fs) 绘制 cell 数组表格
slice_montage slice_montage(nii, label, cmap, pos, clim) NIfTI 轴位切片蒙太奇
rdbu_colormap cmap = rdbu_colormap() 生成红-白-蓝 256 色 colormap
get_colormap cmap = get_colormap(name) 根据名称返回 colormap

caption_textgenerate_stats_report.m 相比 generate_report.m 新增的辅助函数,用于统一格式的图注文字。


12. 网络-ROI映射参考

基于 AAL3(165 区)→ Yeo 7-network 的近似手动映射,参考 Rolls ET (2020) NeuroImage 和 AAL3 标准分区文档。

网络 缩写 主要 AAL3 脑区 ROI 编号(1-indexed,部分)
默认模式网络 DMN mPFC, PCC/楔前叶, 角回, 颞中回, 顶下小叶 25,26,67,68,55,56,65,66,61,62,83,84,87--90
额顶控制网络 FPN DLPFC, 顶下小叶, dACC, 尾状核 3,4,7,8,9,10,59,60,11,12
背侧注意网络 DAN FEF, IPS/顶上小叶 57,58,69,70,1,2,19,20
腹侧注意网络 VAN TPJ, 腹侧前额叶, 岛叶, 缘上回 13,14,15,16,29,30,63,64
感觉运动网络 SMN 中央前/后回, SMA, 旁中央小叶 1,2,57,58,17,18,69,70,71,72
视觉网络 VIS 距状裂, 楔叶, 舌回, 枕叶 43--54
边缘网络 LIM 杏仁核, 海马, 海马旁回, OFC, 颞极 31,32,37,38,39,40,27,28,85,86,35,36

注意:SMN 与 DAN 之间存在 ROI 重叠(如 ROI 1,2,57,58),这是基于 Yeo 7-network 映射的近似,在边界区域不可避免。网络内 FC 计算时每个被分配的 ROI 只计算一次(重叠 ROI 会同时贡献两个网络的计算)。


13. 常见问题与排错

Q1:运行报错"Undefined function 'ttest2'"

原因:未安装或未激活 Statistics and Machine Learning Toolbox。

解决

matlab 复制代码
% 检查是否有该工具箱
ver('stats')

若无,需安装该工具箱;或使用自定义 t-test 实现替换 do_ttest2 中的 ttest2 调用。


Q2:统计列全部显示"---",无法计算 t 值

原因:每组有效被试数 N < 2(如每组只有 1 人,或某指标数据缺失)。

说明 :这是正常行为。当 N < 2/组时,独立样本 t-test 无意义,do_ttest2 返回 NaN,表格显示"---"。
解决:增加每组样本量至 N ≥ 2。


Q3:第 11 页 FC 矩阵热图是全零(全蓝)

原因 :两组被试均无 FC_matrix.mat 文件,fc_Afc_B 保持全零初始值。

排查 :确认 run_post_analysis.m 的 Atlas FC 计算模块(§C)已正确运行并保存了 FC_matrix.mat


Q4:被试目录匹配失败(某被试数据未加载)

症状 :命令窗口显示 ⚠ sub-XX: results/ 不存在

原因 :CSV 中 SubjectID 格式与 test-* 目录不匹配。

解决 :确认目录命名规律,例如 sub-01 对应 test-01(ID 提取规则:取 SubjectID 第 2 字符以后的数字,转换为两位数格式)。若命名规则不同,修改脚本中的目录匹配段落:

matlab 复制代码
if strcmpi(subj_list(d).name, ['test-' sprintf('%02d', str2double(sid(2:end)))])

Q5:第 20 页综合摘要显示 fc_A 未定义错误

原因 :若第 11 页(Atlas FC 矩阵)被跳过(n_roi_fc = 0),变量 fc_Afc_B 不会被计算,导致第 20 页访问未定义变量。

解决 :在脚本中找到第 20 页 summary_lines 部分,将 FC 均值计算行用 try-catchexist 判断保护:

matlab 复制代码
% 如果 fc_A 不存在则使用 NaN
if exist('fc_A','var')
    fc_A_mean = nanmean(nanmean(fc_A));
    fc_B_mean = nanmean(nanmean(fc_B));
else
    fc_A_mean = NaN; fc_B_mean = NaN;
end

Q6:报告生成速度慢

主要耗时环节

  1. 预加载数据(逐被试读取 NIfTI 文件)
  2. 第 16 页(dFC 状态中心,165 ROI → 13530 条边的条形图)
  3. 第 19 页(Hub 节点分析,所有节点得分计算)

优化建议

  • 确保 do_dfc_page = falsedo_hub_page = false(默认值)
  • 将数据目录放在 SSD 上加速 NIfTI 读取
  • MATLAB 并行工具箱可对预加载循环使用 parfor(需修改代码)

附录:页面坐标系说明

所有绘图位置均使用 MATLAB 归一化坐标(0--1),以图形左下角为原点:

复制代码
(0,1)────────────(1,1)
  |                 |
  |   页面内容区域   |
  |                 |
(0,0)────────────(1,0)

annotationaxesPosition 参数格式:[x_left, y_bottom, width, height]

  • 标题栏[0.0, 0.93, 1.0, 0.07](顶部 7% 高度)
  • 图注区[0.04, 0.01, 0.92, 0.04](底部 4% 高度)
  • 内容区[0.04, 0.06, 0.92, 0.86](中间 86%)

文档对应脚本版本:generate_stats_report.m v1.0
最后更新:2026-04

相关推荐
m0_716765232 小时前
数据结构--顺序表的插入、删除、查找详解
c语言·开发语言·数据结构·c++·学习·算法·visual studio
简简单单做算法2 小时前
【第2章>第2节】基于FPGA的图像双线性插值实现——理论分析与MATLAB仿真
matlab·fpga·图像双线性插值
Halo_tjn2 小时前
Java 抽象类 知识点
java·开发语言·算法
踏着七彩祥云的小丑2 小时前
Python——排序
开发语言·python
c++圈来了个新人2 小时前
C++类和对象(上)
c语言·开发语言·数据结构·c++·考研
xyq20242 小时前
SQL CREATE INDEX
开发语言
Дерек的学习记录2 小时前
Unreal Eangie 5:蓝图编程
开发语言·学习·ue5
添尹2 小时前
Go语言基础之指针
开发语言·后端·golang
2401_827499992 小时前
python项目实战10-网络机器人01
开发语言·python