反正态分布算法

"反正态分布算法"这个词在中文语境下通常指的是标准正态分布累积分布函数(CDF)的"反函数"算法

在统计学和计算机科学中,它有一个更专业的名称:分位数函数 (Quantile Function) 或 Probit 函数

简单来说,它的逻辑是反过来的:

  • 正态分布 (Normal Distribution):给你一个数值(比如 Z分数),告诉你它落在某个范围的概率是多少。

  • 反正态分布 (Inverse Normal):给你一个概率 (比如 95%),告诉你对应的数值(Z分数)是多少。

直观理解:从"排名"推"分数" 为了让你秒懂,我们拿考试打比方:

  • 场景:全班考试成绩服从正态分布,平均分 60,标准差 10。

  • 正态分布 (CDF):

    • 问:"我考了 80 分,我打败了百分之多少的人?"

    • 答:"算出 Z 分数是 2.0,查表得知你打败了 97.7% 的人。"

  • 反正态分布 (Inverse CDF):

    • 问:"我想排在前 5%(也就是打败 95% 的人),我至少要考多少分?"

    • 答:"输入概率 0.95,通过算法算出 Z 分数是 1.645,换算回分数是 76.45 分。"

所以,"反正态分布算法"就是计算机用来回答第二个问题的数学工具。

反正态转换(Inverse Normal Transformation, INT)的过程示例

我们用一个简单的例子来说明反正态转换的过程。假设有 10 个样本的甲基化 β 值如下:

原始数据(甲基化 β 值):

0.1, 0.2, 0.4, 0.5, 0.3, 0.9, 0.7, 0.8, 0.6, 0.05

步骤 1:对 β 值进行排序

首先对这些 β 值进行升序排序,得到每个值的排序位置。

排序后的值 排序位置
0.05 1
0.1 2
0.2 3
0.3 4
0.4 5
0.5 6
0.6 7
0.7 8
0.8 9
0.9 10

步骤 2:计算分位数

接下来,计算每个排序位置的分位数。分位数可以通过以下公式计算:

分位数=排名总样本数+1 \text{分位数} = \frac{\text{排名}}{\text{总样本数} + 1} 分位数=总样本数+1排名

计算每个值的分位数:

排序位置 分位数
1 0.091
2 0.182
3 0.273
4 0.364
5 0.455
6 0.545
7 0.636
8 0.727
9 0.818
10 0.909

步骤 3:将分位数转换为标准正态分布下的 z 分数

使用正态分布的累积分布函数的反函数(qnorm),将分位数映射到标准正态分布下的 z 分数。标准正态分布的 z 分数表示每个分位数在标准正态分布中的位置。

通过 R 中的 qnorm() 函数,我们可以得到:

{r} 复制代码
qnorm(c(0.091, 0.182, 0.273, 0.364, 0.455, 0.545, 0.636, 0.727, 0.818, 0.909))

步骤 4:映射到原始数据顺序

最后,将这些 z 分数映射回原始数据的顺序:

原始 β 值 排序位置 分位数 正态分布 z 分数
0.1 2 0.182 -0.91
0.2 3 0.273 -0.60
0.4 5 0.455 -0.11
0.5 6 0.545 0.11
0.3 4 0.364 -0.35
0.9 10 0.909 1.34
0.7 8 0.727 0.60
0.8 9 0.818 0.91
0.6 7 0.636 0.35
0.05 1 0.091 -1.34
相关推荐
胡萝卜术7 分钟前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize1 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考14 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队18 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局2 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法