期刊文章配图:斯皮尔曼相关系数热图反应非线性变量相关性

火山方舟大模型机器学习

picture.image

背景

picture.image

这张图展示了文献中使用的斯皮尔曼相关系数矩阵热图,以揭示各变量之间的相关性。但是相对于来说较为简洁,于是接下来对这种斯皮尔曼相关系数矩阵热图进行美化扩展

斯皮尔曼相关系数

斯皮尔曼相关系数(Spearman's Rank Correlation Coefficient)是用于衡量两个变量之间的单调关系的一种非参数统计方法,它基于排名数据,不需要数据满足正态分布,因此适合于非线性关系的数据分析

斯皮尔曼相关系数的计算步骤

  • 将原始数据进行排名:对两个变量的所有数据分别按大小进行排名,得到两个排名序列 和

  • 计算差值 :对于每个样本点,计算排名之间的差值

  • 计算斯皮尔曼相关系数:用以下公式计算斯皮尔曼相关系数 :

其中, 是排名差值, 是数据的样本量

斯皮尔曼相关系数的取值范围

斯皮尔曼相关系数 的取值范围在-1到1之间:

  • 表示两个变量的排名完全一致,即完全正相关
  • 表示两个变量的排名完全相反,即完全负相关
  • 表示两个变量之间无相关性

应用场景

斯皮尔曼相关系数适用于以下情况:

  • 变量之间的关系不是线性关系但呈现单调性
  • 数据为分类数据或非正态分布的连续数据
  • 数据存在异常值,使用斯皮尔曼相关系数可以减少异常值的影响

代码实现

数据读取


          
import pandas as pd
          
import numpy as np
          
import matplotlib.pyplot as plt
          
import warnings
          
warnings.filterwarnings("ignore")
          
plt.rcParams['font.family'] = 'Times New Roman'
          
plt.rcParams['axes.unicode_minus'] = False
          
df = pd.read_excel('2024-10-28-公众号Python机器学习AI.xlsx')
      

设置图形参数、读取 Excel 文件数据并抑制警告,为后续数据分析和可视化做好准备

绘图形式1


          
# 创建斯皮尔曼相关系数矩阵
          
corr = df.corr(method='spearman')
          
# 创建图形
          
fig, ax = plt.subplots(figsize=(10, 8), dpi=1200)
          
cmap = plt.cm.viridis
          
norm = plt.Normalize(vmin=-1, vmax=1)
          
# 初始化一个空2024-10-28-公众号Python机器学习AI的可绘制对象用于颜色条
          
scatter_handles = []
          
# 循环绘制气泡图和数值
          
for i in range(len(corr.columns)):
          
for j in range(len(corr.columns)):
          
if i > j:  # 对角线左下部2024-10-28-公众号Python机器学习AI分,只显示气泡
          
            color = cmap(norm(corr.iloc[i, j]))  # 根据相关系数获取颜色
          
            scatter = ax.scatter(i, j, s=np.abs(corr.iloc[i, j]) * 1000, color=color, alpha=0.75)
          
            scatter_handles.append(scatter)  # 保存scatter对象用于颜色条
          
elif i < j:  # 对角2024-10-28-公众号Python机器学习AI线右上部分,只显示数值
          
            color = cmap(norm(corr.iloc[i, j]))  # 数值的颜色同样基于相关系数
          
            ax.text(i, j, f'{corr.iloc[i, j]:.2f}', ha='center', va='center', color=color, fontsize=10)
          
else:  # 对角线部分,显示空白
          
            ax.scatter(i, j, s=1, color='white')
          
# 设置坐标轴标签
          
ax.set_xticks(range(len(corr.columns)))
          
ax.set_xticklabels(corr.columns, rotation=45, ha='right', fontsize=10)
          
ax.set_yticks(range(len(corr.columns)))
          
ax.set_yticklabels(corr.columns, fontsize=10)
          
# 添加颜色条
          
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
          
sm.set_array([])  # 仅用于显示颜色条
          
fig.colorbar(sm, ax=ax, label='Correlation Coefficient')
          
# 添加标题和布局调整
          
plt.tight_layout()
          
plt.savefig("Bubble Heatmap with Color Mapping for Bubbles and Numbers.pdf", format='pdf', bbox_inches='tight')
          
#2024-10-28-公众号Python机器学习AI
          
plt.show()
      

picture.image

首先计算相关系数矩阵,然后以气泡大小和颜色表示左下角的相关性强度,同时在右上角显示具体数值,图例用颜色条表示相关系数范围

改进绘图形式1

picture.image

在原有气泡图的基础上增加了显著性分析,计算了每对变量之间的显著性水平(p 值),并在图中用星号标记出显著相关的变量对p < 0.05 表示 *,p < 0.01 表示 **),星号数量表示显著性强弱,使图表不仅展示相关系数的大小,还能识别哪些相关性具有统计上的显著性,从而提供更深入的数据解读,代码获取:如果您希望获取本文展示的改进版代码,请添加作者微信联系获取

绘图形式2


          
import seaborn as sns
          
# 计算斯皮尔曼相关系数矩阵
          
corr = df.corr(method='spearman')
          
# 创建 PairGrid
          
g = sns.PairGrid(df)
          
# 左下角绘制2024-10-28-公众号Python机器学习AI散点图
          
g.map_lower(sns.scatterplot)
          
# 对角线绘制直方图
          
g.map_diag(sns.histplot, kde=True)
          
# 右上角显示斯皮尔曼相关系数
          
for i, j in zip(*np.triu_indices_from(corr, 1)):
          
    g.axes[i, j].annotate(f'corr:{corr.iloc[i, j]:.2f}', (0.5, 0.5), 
          
                          textcoords='axes fraction', ha='center', va='center', fontsize=20)
          
# 保2024-10-28-公众号Python机器学习AI存并显示图表
          
plt.savefig("Spearman_Correlation_PairGrid.pdf", format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

使用Seaborn的PairGrid生成了一个多变量可视化图表,以展示数据集中各变量对的斯皮尔曼相关系数。左下角的图表显示各变量对的散点图,帮助观察变量间的分布趋势;对角线上绘制各变量的直方图,并添加核密度估计曲线,用于展示每个变量的分布形状;右上角则显示每对变量的相关系数值,以便于直观了解各变量之间的相关性强度

改进绘图形式2

picture.image

改进了多变量相关性可视化,通过在对角线上绘制直方图、下三角区域显示散点图、上三角区域展示相关系数热图,并添加全局色条,全面展示了数据的分布特征和变量间的斯皮尔曼相关性,增强了图表的直观性和解读性,代码获取:如果您希望获取本文展示的改进版代码,请添加作者微信联系获取

往期推荐

SCI图表复现:整合数据分布与相关系数的高级可视化策略

SCI图表:基于相关性和标准差的多模型评价——泰勒图解析

SCI图表复现:利用小提琴图折线图综合展示训练集、验证集、测试集模型性能对比

复现SCI文章 SHAP 依赖图可视化以增强机器学习模型的可解释性

SCI图表复现:优化SHAP特征贡献图展示更多模型细节

复现 Nature 图表——基于PCA的高维数据降维与可视化实践及其扩展

复现 Nature 图表可视化——基于模型残差分析与显著性检验的模型解释

SCI图表复现:特征相关性气泡热图展示

picture.image

picture.image

picture.image

微信号|deep_ML

欢迎添加作者微信进入Python、ChatGPT群

进群请备注Python或AI进入相关群

无需科学上网、同步官网所有功能、使用无限制

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论