五种被低估的非常规统计检验方法:数学原理剖析与多领域应用价值研究

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文将详细介绍五种具有重要应用价值的统计检验方法,并探讨它们在免疫学(TCR/BCR库分析)、金融数据分析和运动科学等领域的具体应用。

在当前的数据分析实践中,研究人员往往过度依赖t检验和方差分析(ANOVA)等传统统计方法。但是还存在多种具有重要应用价值但未受到足够重视的统计检验方法,这些方法在处理复杂的实际数据时具有独特优势。本文将详细介绍五种具有重要应用价值的统计检验方法,并探讨它们在免疫学(TCR/BCR库分析)、金融数据分析和运动科学等领域的具体应用。

1、Mann-Kendall趋势检验

Mann-Kendall检验是一种非参数检验方法,用于检测时间序列中是否存在单调上升或下降趋势。与传统线性回归相比,该方法的优势在于不要求数据满足线性关系假设或服从正态分布。

应用价值

  • 金融领域:用于检测股票价格的潜在趋势变化,特别适用于非线性市场环境。
  • 免疫学研究:监测TCR/BCR克隆群体随时间的动态变化趋势。

为了展示Mann-Kendall检验的应用效果,我们构建了两组对照数据:

  1. 具有上升趋势的时间序列:数据呈现明确的时间依赖性增长特征。
  2. 无趋势随机序列:数据表现为围绕均值的随机波动(白噪声过程)。

以下代码实现了这两种情况的数据生成和分析过程:

 importpymannkendallasmk  
 np.random.seed(43)  

 # 1. 生成具有上升趋势的时间序列  
 time_trend=np.arange(1, 31)  
 values_trend=0.5*time_trend+np.random.normal(0, 2, size=len(time_trend))  

 # 2. 生成无趋势随机序列  
 time_no_trend=np.arange(1, 31)  
 values_no_trend=np.random.normal(0, 2, size=len(time_no_trend))  

 # 执行Mann-Kendall趋势检验  
 trend_result=mk.original_test(values_trend)  
 no_trend_result=mk.original_test(values_no_trend)  

 fig, axes=plt.subplots(1, 2, figsize=(20, 10))  
 plt.grid(lw=2, ls=':')  

 axes[0].plot(time_trend, values_trend, marker='o', linestyle='-', color='blue')  
 axes[0].set_title("Data with Upward Trend")  
 axes[0].set_xlabel("Time")  
 axes[0].set_ylabel("Value")  

 textstr_trend='\n'.join((  
     f"Trend: {trend_result.trend}",  
     f"P-value: {trend_result.p:.5f}",  
     f"Tau (Kendall's): {trend_result.Tau:.4f}"  
 ))  
 props=dict(boxstyle='round', facecolor='wheat', alpha=0.5)  
 axes[0].text(0.05, 0.95, textstr_trend, transform=axes[0].transAxes, fontsize=14,  
              verticalalignment='top', bbox=props)  

 axes[1].plot(time_no_trend, values_no_trend, marker='o', linestyle='-', color='red')  
 axes[1].set_title("Data with No Trend")  
 axes[1].set_xlabel("Time")  
 axes[1].set_ylabel("Value")  
 axes[1].grid(lw=2, ls=':')  
 axes[0].grid(lw=2, ls=':')  

 textstr_no_trend='\n'.join((  
     f"Trend: {no_trend_result.trend}",  
     f"P-value: {no_trend_result.p:.5f}",  
     f"Tau (Kendall's): {no_trend_result.Tau:.4f}"  
 ))  
 axes[1].text(0.05, 0.95, textstr_no_trend, transform=axes[1].transAxes, fontsize=14,  
              verticalalignment='top', bbox=props)  

 plt.tight_layout()  
 plt.grid(lw=2, ls=':')  
 plt.show()

实验结果分析:

上升趋势序列:检验结果显示"increasing"(上升趋势),且p值较低,具有统计显著性。

无趋势序列:检验结果显示"no trend"(无趋势),p值较高,未能拒绝无趋势的原假设。

2、Mood中位数检验

Mood中位数检验是一种稳健的非参数统计方法,用于检验多个独立样本是否来自具有相同中位数的总体。该方法在处理偏态分布数据时具有特殊优势,尤其适用于研究重点关注中位数而非均值的场景。

方法应用领域:

  • 免疫学研究:用于比较不同患者群体间的TCR多样性指标中位数(如比较不同免疫库间的K1000指数)。
  • 金融数据分析:评估不同金融资产的日收益率中位数差异。
  • 运动科学研究:分析不同训练方案下运动表现指标的中位数差异。

实证研究设计

为验证Mood中位数检验的效能,我们设计了两组对照实验:

中位数显著差异组:构造具有明显中位数差异的两个样本组。

中位数相近组:构造具有相似中位数的两个样本组。

实验代码实现如下:

 importnumpyasnp  
 fromscipy.statsimportmedian_test  
 importmatplotlib.pyplotasplt  

 np.random.seed(2024)  

 # 构造具有显著差异的样本组  
 group_A_diff=np.random.exponential(scale=1.0, size=50)  
 group_B_diff=np.random.exponential(scale=2.0, size=50)  

 # 构造中位数相近的样本组  
 group_A_sim=np.random.exponential(scale=1.0, size=50)  
 group_B_sim=np.random.exponential(scale=1.1, size=50)  

 # 应用Mood中位数检验  
 stat_diff, p_value_diff, median_diff, table_diff=median_test(group_A_diff, group_B_diff)  
 stat_sim, p_value_sim, median_sim, table_sim=median_test(group_A_sim, group_B_sim)  

 fig, axes=plt.subplots(1, 2, figsize=(20, 7))  

 axes[0].boxplot([group_A_diff, group_B_diff], labels=["Group A (diff)", "Group B (diff)"])  
 axes[0].set_title("Groups with Different Medians")  
 axes[0].set_ylabel("Value")  

 textstr_diff='\n'.join((  
     f"Test Statistic: {stat_diff:.4f}",  
     f"P-value: {p_value_diff:.5f}",  
     f"Overall Median: {median_diff:.4f}",  
     f"Contingency Table:\n{table_diff}"  
 ))  
 props=dict(boxstyle='round', facecolor='wheat', alpha=0.5)  
 axes[0].text(0.05, 0.95, textstr_diff, transform=axes[0].transAxes, fontsize=10,  
              verticalalignment='top', bbox=props)  

 axes[1].boxplot([group_A_sim, group_B_sim], labels=["Group A (sim)", "Group B (sim)"])  
 axes[1].set_title("Groups with Similar Medians")  
 axes[1].set_ylabel("Value")  

 textstr_sim='\n'.join((  
     f"Test Statistic: {stat_sim:.4f}",  
     f"P-value: {p_value_sim:.5f}",  
     f"Overall Median: {median_sim:.4f}",  
     f"Contingency Table:\n{table_sim}"  
 ))  
 axes[1].text(0.05, 0.95, textstr_sim, transform=axes[1].transAxes, fontsize=10,  
              verticalalignment='top', bbox=props)  

 axes[1].grid(lw=2, ls=':', axis='y')  
 axes[0].grid(lw=2, ls=':', axis='y')  

 plt.tight_layout()  
 plt.show()

3、 Friedman检验

Friedman检验是重复测量设计中的非参数检验方法,其作用等同于参数检验中的重复测量方差分析。该方法主要用于评估在相同实验单元(或区组)上实施多种处理时,不同处理之间是否存在显著差异。

应用场景分析:

运动科学研究:评估同一组运动员在不同训练方案下的长期表现变化。

免疫学研究:分析同一患者群体在不同治疗方案下或不同时间点的免疫应答变化。

金融分析:在多个时间窗口内对比评估同一时间序列数据的不同预测模型性能。

实验设计包含两种对照情况:

显著差异情况:三种处理方法产生统计上显著不同的效果。

无显著差异情况:三种处理方法产生统计上相似的效果。

实验代码实现:

 importnumpyasnp  
 fromscipy.statsimportfriedmanchisquare  
 importmatplotlib.pyplotasplt  

 np.random.seed(456)  

 # 构造显著差异数据  
 method_A1=np.random.normal(loc=50, scale=5, size=10)  
 method_B1=np.random.normal(loc=60, scale=5, size=10)  
 method_C1=np.random.normal(loc=70, scale=5, size=10)  
 stat1, pval1=friedmanchisquare(method_A1, method_B1, method_C1)  

 # 构造无显著差异数据  
 method_A2=np.random.normal(loc=50, scale=5, size=10)  
 method_B2=np.random.normal(loc=51, scale=5, size=10)  
 method_C2=np.random.normal(loc=49.5, scale=5, size=10)  
 stat2, pval2=friedmanchisquare(method_A2, method_B2, method_C2)  

 fig, axes=plt.subplots(1, 2, figsize=(20, 7))  

 axes[0].boxplot([method_A1, method_B1, method_C1], labels=["A", "B", "C"])  
 axes[0].set_title("Scenario 1: Significant Difference")  
 textstr1=f"Test statistic: {stat1:.4f}\nP-value: {pval1:.4f}"  
 props=dict(boxstyle='square', facecolor='wheat', alpha=0.5)  
 axes[0].text(0.05, 0.95, textstr1, transform=axes[0].transAxes, fontsize=10,  
              verticalalignment='top', bbox=props)  

 axes[1].boxplot([method_A2, method_B2, method_C2], labels=["A", "B", "C"])  
 axes[1].set_title("Scenario 2: No Significant Difference")  
 textstr2=f"Test statistic: {stat2:.4f}\nP-value: {pval2:.4f}"  
 axes[1].text(0.05, 0.95, textstr2, transform=axes[1].transAxes, fontsize=10,  
              verticalalignment='top', bbox=props)  

 axes[0].grid(lw=2, ls=':', axis='y')  
 axes[1].grid(lw=2, ls=':', axis='y')  

 plt.tight_layout()  
 plt.show()

实验结果分析:

  • 显著差异组:检验结果表明组间存在统计显著性差异,体现为较低的p值和明显的中位数差异。
  • 无显著差异组:数据分布呈现大量重叠,p值较高,未能拒绝无差异的原假设。

4、Theil-Sen估计方法

Theil-Sen估计器是一种用于线性关系估计的稳健统计方法。与传统最小二乘法(OLS)相比,该方法基于所有数据点对之间斜率的中位数进行估计,因此对异常值具有较强的抗干扰能力。

主要应用领域:

  • 金融数据分析:在存在市场异常波动的情况下估计资产价格趋势。
  • 免疫学研究:分析TCR频率或抗体水平的时间序列变化趋势,即使存在个别异常测量值。
  • 运动科学研究:在剔除极端表现影响的情况下评估运动员的进步趋势。

方法验证实验

实验设计包含两种典型场景:

常规数据场景:数据点呈现规律的线性关系。

异常值场景:数据中包含显著偏离主要趋势的异常观测值。

实验代码实现:

 importnumpyasnp  
 importmatplotlib.pyplotasplt  
 fromsklearn.linear_modelimportLinearRegression, TheilSenRegressor  

 np.random.seed(789)  
 X=np.linspace(0, 10, 50)  
 y=3*X+np.random.normal(0, 1, 50)  

 # 构造常规数据场景  
 X1=X.reshape(-1, 1)  
 y1=y.copy()  
 lr1=LinearRegression().fit(X1, y1)  
 ts1=TheilSenRegressor().fit(X1, y1)  

 y_pred_lr1=lr1.predict(X1)  
 y_pred_ts1=ts1.predict(X1)  

 # 构造异常值场景  
 X2=X.reshape(-1, 1)  
 y2=y.copy()  
 y2[10] +=20   # 引入正向异常值  
 y2[25] -=15   # 引入负向异常值  
 lr2=LinearRegression().fit(X2, y2)  
 ts2=TheilSenRegressor().fit(X2, y2)  

 y_pred_lr2=lr2.predict(X2)  
 y_pred_ts2=ts2.predict(X2)  

 fig, axes=plt.subplots(1, 2, figsize=(20, 10))  

 axes[0].scatter(X1, y1, color='grey', label='Data')  
 axes[0].plot(X1, y_pred_lr1, color='red', label='Linear Regression')  
 axes[0].plot(X1, y_pred_ts1, color='green', label='Theil-Sen')  
 axes[0].set_title("No Outliers")  
 axes[0].set_xlabel("X")  
 axes[0].set_ylabel("Y")  
 axes[0].legend()  

 axes[1].scatter(X2, y2, color='grey', label='Data (with outliers)')  
 axes[1].plot(X2, y_pred_lr2, color='red', label='Linear Regression')  
 axes[1].plot(X2, y_pred_ts2, color='green', label='Theil-Sen')  
 axes[1].set_title("With Outliers")  
 axes[1].set_xlabel("X")  
 axes[1].set_ylabel("Y")  
 axes[1].legend()  

 axes[0].grid(lw=2, ls=':', axis='both')  
 axes[1].grid(lw=2, ls=':', axis='both')  

 plt.tight_layout()  
 plt.show()

实验结果显示了Theil-Sen估计器在处理异常值时的优越性,特别是在保持整体趋势估计稳定性方面表现出明显优势。

5、Anderson-Darling检验

Anderson-Darling检验是一种高效的拟合优度检验方法,主要用于验证数据是否符合特定的理论分布(通常为正态分布)。该方法的特点是对分布尾部的偏差具有较高的敏感度,这一特性使其在某些应用场景下比传统的Shapiro-Wilk检验更具优势。

应用价值分析:

  • 金融数据分析:验证资产收益率分布的正态性假设,这对于风险管理和投资决策具有重要意义。
  • 免疫学研究:评估TCR/BCR多样性指标的分布特征。
  • 运动科学研究:在应用参数统计方法前验证性能数据的分布假设。

方法验证实验

实验设计对比两种典型情况:

  1. 正态分布数据:符合正态分布假设的标准数据集。
  2. 非正态分布数据:采用指数分布生成的偏态数据。

实验代码实现:

 importnumpyasnp  
 fromscipy.statsimportanderson  
 importmatplotlib.pyplotasplt  

 np.random.seed(101)  

 # 生成正态分布数据  
 normal_data=np.random.normal(loc=0, scale=1, size=200)  
 result_normal=anderson(normal_data, dist='norm')  

 # 生成非正态分布数据(指数分布)  
 non_normal_data=np.random.exponential(scale=1.0, size=200)  
 result_non_normal=anderson(non_normal_data, dist='norm')  

 # 数据可视化分析  
 fig, axes=plt.subplots(1, 2, figsize=(20, 8))  

 axes[0].hist(normal_data, bins=20, color='blue', alpha=0.7)  
 axes[0].set_title("Scenario 1: Normal Data")  

 textstr_normal='\n'.join((  
     f"Statistic: {result_normal.statistic:.4f}",  
     "Critical Values / Significance Levels:",  
     *[f" - {sl}% level: CV = {cv:.4f}"forcv, slinzip(result_normal.critical_values, result_normal.significance_level)]  
 ))  
 props=dict(boxstyle='round', facecolor='wheat', alpha=0.5)  
 axes[0].text(0.05, 0.95, textstr_normal, transform=axes[0].transAxes, fontsize=10,  
              verticalalignment='top', bbox=props)  

 axes[1].hist(non_normal_data, bins=20, color='orange', alpha=0.7)  
 axes[1].set_title("Scenario 2: Non-Normal Data")  

 textstr_non_normal='\n'.join((  
     f"Statistic: {result_non_normal.statistic:.4f}",  
     "Critical Values / Significance Levels:",  
     *[f" - {sl}% level: CV = {cv:.4f}"forcv, slinzip(result_non_normal.critical_values, result_non_normal.significance_level)]  
 ))  
 axes[1].text(0.25, 0.95, textstr_non_normal, transform=axes[1].transAxes, fontsize=10,  
              verticalalignment='top', bbox=props)  

 axes[0].grid(lw=2, ls=':', axis='y')  
 axes[1].grid(lw=2, ls=':', axis='y')  

 plt.tight_layout()  
 plt.show()

实验结果分析:

  • 正态分布数据:检验统计量低于临界值,表明数据符合正态分布假设。
  • 非正态分布数据:检验统计量显著高于临界值,特别是在分布尾部表现出明显的偏离。

总结

本文详细介绍的五种统计检验方法,虽然在应用频率上不及t检验或方差分析,但在特定研究场景中具有独特的优势,尤其是在处理非正态分布、异常值频现、以及重复测量等复杂数据情况时:

  • Mann-Kendall检验:为时间序列趋势分析提供稳健的非参数方法。
  • Mood中位数检验:在不要求正态性假设的情况下实现多组中位数的比较。
  • Friedman检验:为重复测量数据提供可靠的非参数分析方案。
  • Theil-Sen估计:提供对异常值具有高度稳健性的趋势估计方法。
  • Anderson-Darling检验:在验证分布假设时提供对尾部偏差更敏感的检验方案。

这些方法为研究人员在TCR库分析、金融数据研究和运动科学等领域提供了有力的统计工具。尽管数据分析本质上具有挑战性,但这些方法的合理应用可以帮助研究者获得更可靠的分析结果。

https://avoid.overfit.cn/post/0cd451e923b749669db3a62f5dcd988f

作者:Thomas Konstantinovsky

目录
相关文章
|
2月前
|
数据采集 监控 并行计算
基于MCMC的贝叶斯营销组合模型评估方法论: 系统化诊断、校准及选择的理论框架
贝叶斯营销组合建模(Bayesian Marketing Mix Modeling,MMM)作为一种先进的营销效果评估方法,其核心在于通过贝叶斯框架对营销投资的影响进行量化分析。
62 3
基于MCMC的贝叶斯营销组合模型评估方法论: 系统化诊断、校准及选择的理论框架
|
8月前
|
数据采集 机器学习/深度学习 算法
多维因素与学生辍学风险预测
多维因素与学生辍学风险预测
|
6月前
|
机器学习/深度学习 Python
贝叶斯分析与决策理论:用于确定分类问题决策点的应用
在分类问题中,一个常见的难题是决定输出为数字时各类别之间的切分点
73 9
贝叶斯分析与决策理论:用于确定分类问题决策点的应用
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
基于聚类和回归分析方法探究蓝莓产量影响因素与预测模型研究附录
k均值聚类模型多元线性回归模型随机森林模型在数据分析项目中,选择合适的模型是至关重要的。本项目中,我们采用了三种不同的模型来分析蓝莓的生长条件和产量,以确保从不同角度全面理解数据。一、K均值聚类模型K均值聚类模型是一种无监督学习方法,用于根据数据的相似性将样本分成不同的组。在这个项目中,我们使用K均值聚类模型来识别具有相似特征的蓝莓品种。通过聚类分析,我们将蓝莓分为4个类别,每个类别代表了不同的生长条件和产量特性。这种分类有助于我们理解在不同环境条件下,哪些因素对蓝莓产量有显著影响。
基于聚类和回归分析方法探究蓝莓产量影响因素与预测模型研究附录
|
8月前
|
机器学习/深度学习 算法
R语言分类回归分析考研热现象分析与考研意愿价值变现
R语言分类回归分析考研热现象分析与考研意愿价值变现
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
基于聚类和回归分析方法探究蓝莓产量影响因素与预测模型研究
k均值聚类模型多元线性回归模型随机森林模型在数据分析项目中,选择合适的模型是至关重要的。本项目中,我们采用了三种不同的模型来分析蓝莓的生长条件和产量,以确保从不同角度全面理解数据。一、K均值聚类模型K均值聚类模型是一种无监督学习方法,用于根据数据的相似性将样本分成不同的组。在这个项目中,我们使用K均值聚类模型来识别具有相似特征的蓝莓品种。通过聚类分析,我们将蓝莓分为4个类别,每个类别代表了不同的生长条件和产量特性。这种分类有助于我们理解在不同环境条件下,哪些因素对蓝莓产量有显著影响。
|
8月前
|
机器学习/深度学习 算法 数据可视化
数据报告分享|WEKA贝叶斯网络挖掘学校在校人数影响因素数据分类模型
数据报告分享|WEKA贝叶斯网络挖掘学校在校人数影响因素数据分类模型
|
8月前
|
数据采集 数据挖掘
多维因素与学生辍学风险预测附录
多维因素与学生辍学风险预测附录
|
8月前
|
机器学习/深度学习 数据可视化 数据挖掘
SPSS用K均值聚类KMEANS、决策树、逻辑回归和T检验研究通勤出行交通方式选择的影响因素调查数据分析
SPSS用K均值聚类KMEANS、决策树、逻辑回归和T检验研究通勤出行交通方式选择的影响因素调查数据分析
|
8月前
R语言估计多元标记的潜过程混合效应模型(lcmm)分析心理测试的认知过程
R语言估计多元标记的潜过程混合效应模型(lcmm)分析心理测试的认知过程