Kruskal-Wallis 检验模块:提供完整的非参数多组比较检验功能
KruskalWallisModule
00 Remarks
============================================ 基于 VB.NET 基础数学函数实现的 Kruskal-Wallis 检验模块 适用于微生物丰度矩阵的非参数多组比较分析
功能说明:
- 对微生物丰度矩阵(行=物种/OTU,列=样本)逐行执行 Kruskal-Wallis 检验
- 自动处理结值(tied ranks)并应用校正因子
- 通过卡方分布计算精确 p 值(基于不完全 Gamma 函数的数值实现)
- 输出 H 统计量、自由度、p 值、各组平均秩等完整统计结果
数学原理: H = [12 / N(N+1)] Σ(ni (R̄i - (N+1)/2)²) - 结值校正 p = 1 - CDF_ChiSquared(H, k-1)
其中 CDF_ChiSquared 基于 Lanczos 近似的 Gamma 函数与不完全 Gamma 函数实现
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| RegularizedIncompleteGammaP | 1 | 计算正则化不完全 Gamma 函数 P(a, x) = γ(a,x) / Γ(a) 使用级数展开(当 x < a+1 时)和连分数展开(当 x >= a+1 时) P(a,x) = (1/Γ(a)) * ∫₀ˣ e^(-t) * t^(a-1) dt |
| GammaSeries | 1 | 不完全 Gamma 函数的级数展开 P(a,x) = e^(-x) * x^a * Σ(n=0..∞) x^n / [Γ(a+1+n)] 等价形式:P(a,x) = e^(-x) * x^a / Γ(a) * Σ(n=0..∞) x^n / [a*(a+1)*...*(a+n)] |
| GammaContinuedFraction | 1 | 不完全 Gamma 函数的连分数展开(计算 Q(a,x) = 1 - P(a,x)) 使用修正 Lentz 算法求连分数值 Q(a,x) = e^(-x) * x^a / Γ(a) * CF(a,x) |
| ChiSquaredCDF | 1 | 计算卡方分布的累积分布函数 CDF CDF(x; k) = P(k/2, x/2) = γ(k/2, x/2) / Γ(k/2) 其中 P 为正则化不完全 Gamma 函数 |
| ChiSquaredPValue | 1 | 计算卡方分布的右尾概率(生存函数) P(X > x) = 1 - CDF(x; k) 即 Kruskal-Wallis 检验中计算 p 值所需的函数 |
| ComputeRanks | 1 | 对一组数值进行排名,结值取平均秩 例如:[3, 1, 4, 1, 5] → [3, 1.5, 4, 1.5, 5] |
| QuickSortIndices | 1 | 快速排序版本:按值对索引数组排序(适用于大规模数据) |
| ComputeRanksFast | 1 | 对一组数值进行排名(使用快速排序,适用于大规模数据) 结值取平均秩 |
| ComputeTieCorrection | 1 | 计算结值校正因子 C C = 1 - Σ(ti³ - ti) / (N³ - N) 其中 ti 为每组结值的个数,N 为总样本量 当无结值时 C = 1 |
| KruskalWallisTest | 1 | 对单个分类单元(物种/OTU)的丰度数据执行 Kruskal-Wallis 检验 数学公式: H = [12 / (N(N+1))] * Σ_i [ni * (R̄i - (N+1)/2)²] 校正后:H_corrected = H / C 其中 C = 1 - Σ(ti³ - ti) / (N³ - N) p = P(χ² >… |
| KruskalWallisMatrixTest | 1 | 对微生物丰度矩阵执行逐行 Kruskal-Wallis 检验 丰度矩阵格式: - 行(第一维):分类单元(物种/OTU/ASV) - 列(第二维):样本 groupLabels 格式: - 长度等于样本数(矩阵列数) - 每个元素为对应样本的分组标签 taxonNames 格式(可选): - 长度等于分类单元数… |
| FormatKWResult | 1 | 将单个 KWResult 格式化为可读字符串 |
| FormatKWResultsTable | 1 | 将多个 KWResult 格式化为汇总表格字符串 适用于微生物丰度矩阵的批量检验结果展示 |
| GetSignificantTaxa | 1 | 筛选出显著差异的分类单元 |
| BonferroniCorrection | 1 | 对检验结果进行 Bonferroni 多重检验校正 |
| BenjaminiHochbergCorrection | 1 | 对检验结果进行 Benjamini-Hochberg (BH) FDR 多重检验校正 |
03 Members
Double, Double)计算正则化不完全 Gamma 函数 P(a, x) = γ(a,x) / Γ(a) 使用级数展开(当 x < a+1 时)和连分数展开(当 x >= a+1 时)
P(a,x) = (1/Γ(a)) ∫₀ˣ e^(-t) t^(a-1) dt
| Name | Type | Description |
|---|---|---|
a | Double | 形状参数,a > 0 |
x | Double | 积分上限,x >= 0 |
P(a, x),值域 [0, 1]
Double, Double)不完全 Gamma 函数的级数展开 P(a,x) = e^(-x) x^a Σ(n=0..∞) x^n / [Γ(a+1+n)] 等价形式:P(a,x) = e^(-x) x^a / Γ(a) Σ(n=0..∞) x^n / [a(a+1)...*(a+n)]
Double, Double)不完全 Gamma 函数的连分数展开(计算 Q(a,x) = 1 - P(a,x)) 使用修正 Lentz 算法求连分数值 Q(a,x) = e^(-x) x^a / Γ(a) CF(a,x)
Double, Int32)计算卡方分布的累积分布函数 CDF CDF(x; k) = P(k/2, x/2) = γ(k/2, x/2) / Γ(k/2) 其中 P 为正则化不完全 Gamma 函数
| Name | Type | Description |
|---|---|---|
x | Double | 卡方统计量,x >= 0 |
k | Int32 | 自由度,正整数 |
累积概率 P(X <= x),值域 [0, 1]
Double, Int32)计算卡方分布的右尾概率(生存函数) P(X > x) = 1 - CDF(x; k) 即 Kruskal-Wallis 检验中计算 p 值所需的函数
| Name | Type | Description |
|---|---|---|
x | Double | 卡方统计量 |
k | Int32 | 自由度 |
右尾概率 p 值
Double())对一组数值进行排名,结值取平均秩 例如:[3, 1, 4, 1, 5] → [3, 1.5, 4, 1.5, 5]
| Name | Type | Description |
|---|---|---|
values | Double() | 待排名的数值数组 |
排名数组,与输入等长
Double(), Int32(), Int32, Int32)快速排序版本:按值对索引数组排序(适用于大规模数据)
Double())对一组数值进行排名(使用快速排序,适用于大规模数据) 结值取平均秩
Double())计算结值校正因子 C C = 1 - Σ(ti³ - ti) / (N³ - N) 其中 ti 为每组结值的个数,N 为总样本量 当无结值时 C = 1
| Name | Type | Description |
|---|---|---|
values | Double() | 全部观测值数组 |
校正因子 C,值域 (0, 1]
Double()(), String(), String)对单个分类单元(物种/OTU)的丰度数据执行 Kruskal-Wallis 检验
数学公式: H = [12 / (N(N+1))] Σ_i [ni (R̄i - (N+1)/2)²] 校正后:H_corrected = H / C 其中 C = 1 - Σ(ti³ - ti) / (N³ - N) p = P(χ² > H_corrected),自由度 df = k - 1
| Name | Type | Description |
|---|---|---|
abundanceData | Double()() | 各组丰度数据的数组(外层数组=组,内层数组=该组样本的丰度值) |
groupNames | String() | 各组名称数组(可选) |
taxonName | String | 分类单元名称(可选) |
KWResult 结构体,包含完整检验结果
Double[0:,0:], String(), String())对微生物丰度矩阵执行逐行 Kruskal-Wallis 检验
丰度矩阵格式:
- 行(第一维):分类单元(物种/OTU/ASV)
- 列(第二维):样本
groupLabels 格式:
- 长度等于样本数(矩阵列数)
- 每个元素为对应样本的分组标签
taxonNames 格式(可选):
- 长度等于分类单元数(矩阵行数)
- 每个元素为对应分类单元的名称
| Name | Type | Description |
|---|---|---|
abundanceMatrix | Double[0:,0:] | 丰度矩阵 [taxon, sample] |
groupLabels | String() | 样本分组标签数组 |
taxonNames | String() | 分类单元名称数组(可选) |
KWResult 数组,每个元素对应一个分类单元的检验结果
将单个 KWResult 格式化为可读字符串
将多个 KWResult 格式化为汇总表格字符串 适用于微生物丰度矩阵的批量检验结果展示
Double)筛选出显著差异的分类单元
| Name | Type | Description |
|---|---|---|
results | KWResult() | 检验结果数组 |
alpha | Double | 显著性水平(默认 0.05) |
显著差异分类单元的 KWResult 数组
对检验结果进行 Bonferroni 多重检验校正
| Name | Type | Description |
|---|---|---|
results | KWResult() | 原始检验结果数组 |
校正后的 p 值数组(与 results 等长)
对检验结果进行 Benjamini-Hochberg (BH) FDR 多重检验校正
| Name | Type | Description |
|---|---|---|
results | KWResult() | 原始检验结果数组 |
校正后的 p 值数组(与 results 等长)