从0到1:如何用统计学“看透”不同睡眠PSG数据集的差异(域偏差分析实战)

你可能正在处理来自不同医院、不同设备或不同人群的睡眠多导睡眠图(PSG)数据集(比如 Sleep-EDF, SleepDG, HMC 等),并发现一个棘手的问题:在一个数据集上训练得很好的模型,换到另一个数据集上效果就一落千丈。

这个问题,我们称之为域偏差(Domain Bias)或域偏移(Domain Shift)

这篇博客的唯一目的,就是带你------一个"小白"------从最基础的统计学原理和公式出发,一步步学会如何量化评判这些数据集之间的差异。


路线图

我们将分步骤进行,就像爬楼梯一样:

  1. Step 1: 描述性统计 - <em>给你的数据集"量体温"</em>
  2. Step 2: 数据分布 - <em>看清数据集的"长相"</em>
  3. Step 3: 假设检验 - <em>判断"差异"是否真的存在</em>
  4. Step 4: 分布相似性度量 - <em>域偏差的"量化"</em>
  5. Step 5: 综合分析 - <em>如何向他人展示你的发现</em>

Step 1: 描述性统计 (Descriptive Statistics)

这是最基础的第一步。我们要为每个数据集计算一些"身份信息"。

  • 类比: 想象你有两组人(两个数据集),你需要先知道他们的平均身高、体重范围等基本信息。

1.1 中心趋势 (Central Tendency)

它告诉我们数据的"中心"在哪里。

a) 均值 (Mean)

就是我们常说的"平均数"。它对"异常值"(比如一个特别大的伪影)非常敏感。

公式:

对于一个特征(比如C4-A1通道的EEG信号幅度),其均值为 μ\muμ:
μ=1N∑i=1Nxi\mu = \frac{1}{N} \sum_{i=1}^{N} x_iμ=N1i=1∑Nxi

其中,NNN 是样本总数(比如总Epochs数),xix_ixi 是第 iii 个样本的值。

b) 中位数 (Median)

将所有数据从高到低排序,排在最中间的那个数。它对异常值不敏感,更"稳健"。

公式:
Median=Value at the (N+12)-th position\text{Median} = \text{Value at the } \left( \frac{N+1}{2} \right)\text{-th position}Median=Value at the (2N+1)-th position

1.2 离散程度 (Dispersion)

它告诉我们数据有多"分散"或多"集中"。

a) 方差 (Variance)

衡量每个数据点离均值有多远。方差越大,数据越分散。

公式:
σ2=1N∑i=1N(xi−μ)2\sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2σ2=N1i=1∑N(xi−μ)2

b) 标准差 (Standard Deviation)

方差的平方根。它的好处是单位和原始数据相同(比如 μV\mu VμV),因此更容易解释。

公式:
σ=σ2=1N∑i=1N(xi−μ)2\sigma = \sqrt{\sigma^2} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2}σ=σ2 =N1i=1∑N(xi−μ)2


PSG应用与域偏差初探:

假设你计算了两个PSG数据集(数据集A 和 数据集B)的统计数据:

特征 指标 数据集 A (医院A) 数据集 B (医院B)
患者年龄 均值 (μ\muμ) 45.2 岁 58.7 岁
EEG (C4-A1) 幅度 标准差 (σ\sigmaσ) 15.3 μV\mu VμV 28.1 μV\mu VμV

结论:

  1. 年龄差异: 数据集B的患者平均年龄显著大于A。这是一个协变量偏移 (Covariate Shift)。这可能导致模型学到的"年龄相关的睡眠特征"在另一个数据集上失效。
  2. 信号幅度差异: 数据集B的EEG信号标准差远大于A。这可能意味着B的设备灵敏度不同 ,或者伪影(Artifacts)更多 。这是数据本身的偏移

Step 2: 数据分布 (Data Distribution)

均值和方差只是"总结"。我们更想知道数据整体的"长相"

  • 类比: 知道两组人的平均身高还不够,我想知道他们中"高个子"和"矮个子"各占多少比例。

这就是概率密度函数 (Probability Density Function, PDF)直方图 (Histogram) 要做的事。

公式 (概念):

我们经常假设数据(尤其是生物信号)服从正态分布(高斯分布)
f(x)=1σ2πe−12(x−μσ)2f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}(\frac{x-\mu}{\sigma})^2}f(x)=σ2π 1e−21(σx−μ)2

这个公式的重点是:一个分布可以由它的 μ\muμ 和 σ\sigmaσ 完整定义。


PSG应用与可视化:

我们可以画出两个数据集某个特征(比如某个频带的能量)的分布图。

假设的可视化图:

复制代码
[一个显示两个不同分布的假设图表]

                 |
      数据集 A     |     .
     (μ=10, σ=2)   |    . .
                 |   .   .
                 |  .     .
   概率密度       | .       .        数据集 B
                 | .         .      (μ=15, σ=4)
                 | .           .
                 | .             .
                 |.               .
                 |________________._________________
                             特征值 (例如: Delta波能量)

图1:假设数据集A与数据集B的特征分布对比

结论:

从上图(假设)中我们肉眼可见

  1. 均值不同: B的中心(15)远大于A的中心(10)。
  2. 方差不同: B的分布更"胖"(σ=4\sigma=4σ=4),说明其特征值更分散。

这就是最直观的域偏差!


Step 3: 假设检验 (Hypothesis Testing)

我们在Step 1和Step 2中"看到"了差异。但这个差异是**"显著的"(真的有不同),还是"偶然的"**(可能只是抽样巧合)?

  • 类比: 你在A组抽了10个人,B组抽了10个人,发现A组平均身高175cm,B组176cm。这个1cm的差异是"真的"吗?还是你下次再抽10个人,可能A组就177cm了?

假设检验就是来回答这个问题的。

3.1 零假设 (H0H_0H0) vs 备择假设 (HAH_AHA)

  • 零假设 (H0H_0H0): "没有差异"。(例如:μA=μB\mu_A = \mu_BμA=μB)
  • 备择假设 (HAH_AHA): "存在差异"。(例如:μA≠μB\mu_A \neq \mu_BμA=μB)

我们的目标是**"拒绝"H0H_0H0**。

3.2 t-检验 (t-test)

最常用的检验之一,用于比较两个 组的均值是否有显著差异。

公式 (独立双样本t-test):

它会计算一个 ttt 值 ,这个值越大,说明差异越"明显"。
t=xˉA−xˉBsp1nA+1nBt = \frac{\bar{x}_A - \bar{x}_B}{s_p \sqrt{\frac{1}{n_A} + \frac{1}{n_B}}}t=spnA1+nB1 xˉA−xˉB

其中,xˉA,xˉB\bar{x}_A, \bar{x}_BxˉA,xˉB 是A和B的样本均值;nA,nBn_A, n_BnA,nB 是样本量;sps_psp 是合并标准差(有点复杂,这里先理解概念)。

3.3 p-值 (p-value)

t-test 会给我们一个 ppp 值

  • p值的"小白"解释: 如果零假设(H0H_0H0)是真的(即A和B没有 差异),我们能观测到当前这种(甚至更极端)差异的概率
  • 判断标准: 通常,我们设置一个显著性水平 α\alphaα(比如 α=0.05\alpha = 0.05α=0.05)。
    • 如果 p<αp < \alphap<α (例如 p=0.001p = 0.001p=0.001):说明"如果A和B没差异,我们基本不可能看到现在的数据"。因此,我们拒绝H0H_0H0,认为**"差异是显著的"**。
    • 如果 p>αp > \alphap>α (例如 p=0.3p = 0.3p=0.3):说明"这个差异很可能是偶然"。我们无法拒绝H0H_0H0

PSG应用:

你对Step 1中的"患者年龄"进行t-test:

  • H0H_0H0:数据集A和B的患者平均年龄相同
  • HAH_AHA:数据集A和B的患者平均年龄不同
  • 你运行检验,得到 p=0.0001p = 0.0001p=0.0001。
  • 结论: p<0.05p < 0.05p<0.05,我们拒绝H0H_0H0。数据集A和B的患者年龄存在统计学上的显著差异 。这是一个必须在模型训练中考虑的严重域偏差

Step 4: 分布相似性度量 (深入域偏差)

t-test 只比较"均值"。但有时两个分布均值相同,但"形状"完全不同(比如一个高瘦,一个矮胖)。我们需要更高级的工具来比较整个分布

4.1 K-S 检验 (Kolmogorov-Smirnov Test)

K-S 检验用于比较两个分布的累积分布函数 (CDF)

  • 类比: 它不是比较"平均身高",而是比较"身高在170cm以下的人的比例"、"180cm以下的人的比例"...等等所有点。
  • 公式 (概念): 它计算两个CDF之间的最大垂直距离 DDD。
    D=max⁡x∣FA(x)−FB(x)∣D = \max_{x} |F_A(x) - F_B(x)|D=xmax∣FA(x)−FB(x)∣
  • K-S 检验也会给出一个 ppp 值。如果 p<0.05p < 0.05p<0.05,说明两个分布形状显著不同

4.2 JS 散度 (Jensen-Shannon Divergence)

这是信息论中一个非常强大的工具,用于衡量两个概率分布的"相似性"。

  • 小白解释: 它衡量"用一个分布去描述另一个分布"有多"困难"。
  • 基础 - KL 散度 (Kullback-Leibler Divergence):
    DKL(P∣∣Q)=∑xP(x)log⁡(P(x)Q(x))D_{KL}(P || Q) = \sum_{x} P(x) \log\left(\frac{P(x)}{Q(x)}\right)DKL(P∣∣Q)=x∑P(x)log(Q(x)P(x))
    它衡量用 QQQ 替 PPP 时的"信息损失"。注意:DKL(P∣∣Q)≠DKL(Q∣∣P)D_{KL}(P || Q) \neq D_{KL}(Q || P)DKL(P∣∣Q)=DKL(Q∣∣P) (不对称)。
  • JS 散度 (JSD): 它是KL散度的"升级版",具有对称性
    JSD(P∣∣Q)=12DKL(P∣∣M)+12DKL(Q∣∣M)JSD(P || Q) = \frac{1}{2} D_{KL}(P || M) + \frac{1}{2} D_{KL}(Q || M)JSD(P∣∣Q)=21DKL(P∣∣M)+21DKL(Q∣∣M)
    其中,M=12(P+Q)M = \frac{1}{2}(P + Q)M=21(P+Q) 是两个分布的平均分布。

JS 散度的值域是 [0, 1](如果用log2)或 [0, ln(2)](如果用ln):

  • JSD=0JSD = 0JSD=0:两个分布完全相同
  • JSDJSDJSD 越大:两个分布差异越大

PSG应用 (核心):

这才是你分析域偏差的"杀手锏"!

  1. 提取特征: 对每个Epoch(例如30秒的PSG片段)提取特征(比如功率谱密度 Power Spectral Density, PSD)。
  2. 创建分布: 将所有Epoch的特征值做成直方图(PDF),这就是 PAP_APA (数据集A的特征分布) 和 PBP_BPB (数据集B的特征分布)。
  3. 计算 JSD:
    DomainBiasScore=JSD(PA∣∣PB)\text{DomainBiasScore} = JSD(P_A || P_B)DomainBiasScore=JSD(PA∣∣PB)

结论:

你得到了一个单一的数值 (比如 0.42),它量化了两个数据集在"这个特征上"的域偏差有多大。你可以为所有重要特征(不同通道、不同频带)都计算这个分数。


Step 5: 综合分析 (可视化你的发现)

最后,你不能只给老板看一堆 ppp 值和 JSD 分数。你需要一个直观的全局视图

技术:降维与可视化 (t-SNE / PCA)

PSG特征(比如所有通道的PSD)可能有几百甚至上千维。我们无法直接画图。我们需要用降维技术把它们"压"到2D或3D。

  • PCA (主成分分析): 线性降维,寻找数据"方差最大"的方向。
  • t-SNE (t-分布随机邻域嵌入): 非线性降维,非常擅长"聚类",能把相似的数据点"拉"到一起。

操作流程:

  1. 从数据集A和数据集B中抽取(比如各5000个)Epochs的特征。
  2. 将数据集A的特征标记为"蓝色"
  3. 将数据集B的特征标记为"红色"
  4. 将所有(10000个)高维特征数据扔进 t-SNE 算法,让它降到2D。
  5. 绘制散点图。

可能的分析结果:

  • 情况一:域偏差极大

    • 你看到的图像是:左边一大片"蓝色"点,右边一大片"红色"点。两坨分得清清楚楚。
    • 结论: 域偏差非常严重。模型能轻易"记住"它在哪个数据集上。
  • 情况二:域偏差很小

    • 你看到的图像是:"蓝色"和"红色"的点均匀地混合在一起,像一碗"红豆蓝莓粥"。
    • 结论: 两个数据集的特征空间非常相似,模型泛化性会很好。

总结:你的最终评判流程

从0开始评判睡眠PSG数据集的域偏差,你应该:

  1. 看基本盘 (描述性统计): 计算 μ,σ\mu, \sigmaμ,σ。检查患者元数据 (年龄、性别)和信号基本属性(幅度、噪声水平)。
  2. 看差异 (假设检验): 对你怀疑有差异的指标(如年龄)跑一个 t-test ,用 ppp 值确认差异是否显著
  3. 看全局 (分布度量): 对关键的EEG/EOG/EMG特征(如频带能量),计算 JS散度 (JSD) ,得到一个量化的偏差分数
  4. 看全貌 (可视化): 跑一个 t-SNE,用"颜色"区分数据集。如果能"一眼分开",就是最直观的域偏差证据。

通过这套组合拳,你就可以从一个"小白"变成一个能用数据和公式清晰说明"这两个PSG数据集差异到底有多大"的专业分析师了。

相关推荐
浮灯Foden4 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试
TMT星球5 小时前
TCL华星t8项目正式开工,总投资额约295亿元
大数据·人工智能
猫头虎5 小时前
DeepSeek刚刚开源了一个3B的 OCR模型:什么是DeepSeek-OCR?单张A100-40G每天可以处理20万+页文档
人工智能·开源·whisper·prompt·aigc·ocr·gpu算力
lky不吃香菜5 小时前
上下文工程的艺术与科学:来自 LangChain 和 Manus 的前沿洞察
人工智能
香菜烤面包5 小时前
Attention:MHA->MQA->GQA->MLA
人工智能·深度学习
阿里云大数据AI技术5 小时前
云栖实录 | 驶入智驾深水区:广汽的“数据突围“之路
大数据·人工智能
肥晨5 小时前
OCR 模型受全球关注,实测到底谁更出色?
人工智能·ai编程
景天科技苑5 小时前
【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体?
人工智能·llm·agent·智能体·ai智能体·ollama·智能体搭建
skywalk81635 小时前
用Trae自动生成一个围棋小程序
人工智能·小程序