nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.Math.Statistics.ANOVA / KruskalWallisModule

KruskalWallisModule

Full name Microsoft.VisualBasic.Math.Statistics.Hypothesis.ANOVA.KruskalWallisModule Assembly Microsoft.VisualBasic.Math.Statistics.ANOVA Members 16

Kruskal-Wallis 检验模块:提供完整的非参数多组比较检验功能

00 Remarks

============================================ 基于 VB.NET 基础数学函数实现的 Kruskal-Wallis 检验模块 适用于微生物丰度矩阵的非参数多组比较分析

功能说明:

  1. 对微生物丰度矩阵(行=物种/OTU,列=样本)逐行执行 Kruskal-Wallis 检验
  2. 自动处理结值(tied ranks)并应用校正因子
  3. 通过卡方分布计算精确 p 值(基于不完全 Gamma 函数的数值实现)
  4. 输出 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

Microsoft.VisualBasic.Math.Statistics.Hypothesis.ANOVA.KruskalWallisModule

02 Methods

NameOverloadsSummary
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

method RegularizedIncompleteGammaP #
RegularizedIncompleteGammaP(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

Parameters
NameTypeDescription
aDouble

形状参数,a > 0

xDouble

积分上限,x >= 0

Returns

P(a, x),值域 [0, 1]

method GammaSeries #
GammaSeries(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)]

method GammaContinuedFraction #
GammaContinuedFraction(Double, Double)

不完全 Gamma 函数的连分数展开(计算 Q(a,x) = 1 - P(a,x)) 使用修正 Lentz 算法求连分数值 Q(a,x) = e^(-x) x^a / Γ(a) CF(a,x)

method ChiSquaredCDF #
ChiSquaredCDF(Double, Int32)

计算卡方分布的累积分布函数 CDF CDF(x; k) = P(k/2, x/2) = γ(k/2, x/2) / Γ(k/2) 其中 P 为正则化不完全 Gamma 函数

Parameters
NameTypeDescription
xDouble

卡方统计量,x >= 0

kInt32

自由度,正整数

Returns

累积概率 P(X <= x),值域 [0, 1]

method ChiSquaredPValue #
ChiSquaredPValue(Double, Int32)

计算卡方分布的右尾概率(生存函数) P(X > x) = 1 - CDF(x; k) 即 Kruskal-Wallis 检验中计算 p 值所需的函数

Parameters
NameTypeDescription
xDouble

卡方统计量

kInt32

自由度

Returns

右尾概率 p 值

method ComputeRanks #
ComputeRanks(Double())

对一组数值进行排名,结值取平均秩 例如:[3, 1, 4, 1, 5] → [3, 1.5, 4, 1.5, 5]

Parameters
NameTypeDescription
valuesDouble()

待排名的数值数组

Returns

排名数组,与输入等长

method QuickSortIndices #
QuickSortIndices(Double(), Int32(), Int32, Int32)

快速排序版本:按值对索引数组排序(适用于大规模数据)

method ComputeRanksFast #
ComputeRanksFast(Double())

对一组数值进行排名(使用快速排序,适用于大规模数据) 结值取平均秩

method ComputeTieCorrection #
ComputeTieCorrection(Double())

计算结值校正因子 C C = 1 - Σ(ti³ - ti) / (N³ - N) 其中 ti 为每组结值的个数,N 为总样本量 当无结值时 C = 1

Parameters
NameTypeDescription
valuesDouble()

全部观测值数组

Returns

校正因子 C,值域 (0, 1]

method KruskalWallisTest #
KruskalWallisTest(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

Parameters
NameTypeDescription
abundanceDataDouble()()

各组丰度数据的数组(外层数组=组,内层数组=该组样本的丰度值)

groupNamesString()

各组名称数组(可选)

taxonNameString

分类单元名称(可选)

Returns

KWResult 结构体,包含完整检验结果

method KruskalWallisMatrixTest #
KruskalWallisMatrixTest(Double[0:,0:], String(), String())

对微生物丰度矩阵执行逐行 Kruskal-Wallis 检验

丰度矩阵格式:

  • 行(第一维):分类单元(物种/OTU/ASV)
  • 列(第二维):样本

groupLabels 格式:

  • 长度等于样本数(矩阵列数)
  • 每个元素为对应样本的分组标签

taxonNames 格式(可选):

  • 长度等于分类单元数(矩阵行数)
  • 每个元素为对应分类单元的名称
Parameters
NameTypeDescription
abundanceMatrixDouble[0:,0:]

丰度矩阵 [taxon, sample]

groupLabelsString()

样本分组标签数组

taxonNamesString()

分类单元名称数组(可选)

Returns

KWResult 数组,每个元素对应一个分类单元的检验结果

method FormatKWResult #
FormatKWResult(KWResult)

将单个 KWResult 格式化为可读字符串

method FormatKWResultsTable #
FormatKWResultsTable(KWResult())

将多个 KWResult 格式化为汇总表格字符串 适用于微生物丰度矩阵的批量检验结果展示

method GetSignificantTaxa #
GetSignificantTaxa(KWResult(), Double)

筛选出显著差异的分类单元

Parameters
NameTypeDescription
resultsKWResult()

检验结果数组

alphaDouble

显著性水平(默认 0.05)

Returns

显著差异分类单元的 KWResult 数组

method BonferroniCorrection #
BonferroniCorrection(KWResult())

对检验结果进行 Bonferroni 多重检验校正

Parameters
NameTypeDescription
resultsKWResult()

原始检验结果数组

Returns

校正后的 p 值数组(与 results 等长)

method BenjaminiHochbergCorrection #
BenjaminiHochbergCorrection(KWResult())

对检验结果进行 Benjamini-Hochberg (BH) FDR 多重检验校正

Parameters
NameTypeDescription
resultsKWResult()

原始检验结果数组

Returns

校正后的 p 值数组(与 results 等长)