问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

整合数据分布+拟合线+置信区间+相关系数的皮尔逊相关可视化

创作时间:
作者:
@小白创作中心

整合数据分布+拟合线+置信区间+相关系数的皮尔逊相关可视化

引用
1
来源
1.
https://explinks.com/blog/wx-integrating-data-distribution-fitting-line-confidence-interval-and-pearson-correlation-visualization/

在数据分析中,探索特征之间的相关性是非常重要的一步。本文将介绍如何整合皮尔逊相关系数、散点图、线性模型及其置信区间,以实现更全面的数据可视化分析。

背景

在数据分析中,探索特征之间的相关性是非常重要的一步,皮尔逊相关系数、散点图以及线性模型是最常用的三种方法,它们各具优势,通过将这三种方法整合到一个可视化图表中,可以帮助更全面地判断特征之间是否存在线性相关趋势。

皮尔逊相关系数

散点图

  • 直观呈现两个特征之间的分布趋势,帮助发现是否存在线性模式
  • 除了线性关系,散点图还能揭示非线性关系或异常值

线性模型(拟合线及其置信区间)

  • 在每个散点图中叠加线性模型的拟合直线及其95%的置信区间,可进一步直观验证特征间的线性关系
  • 拟合线清晰展示了两特征之间的趋势方向,置信区间则为关系的可靠性提供统计学支持
  • 如果拟合线及其置信区间能很好描述数据分布,说明特征之间的线性关系较强

通过整合皮尔逊相关系数及其显著性水平(p值)、散点图结合线性回归拟合线及置信区间、以及对角线的单变量直方图,用一个矩阵可视化全面展示数据特征间的相关性和分布趋势。

代码实现

基础相关性热图绘制

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
import seaborn as sns
warnings.filterwarnings("ignore")
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel('2024-12-4-公众号Python机器学习AI.xlsx')
# 计算皮尔逊相关系数矩阵
corr = df.corr()
plt.figure(figsize=(10, 8))
# 使用 Seaborn 绘制热图
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", square=True, cbar_kws={"shrink": .8})
plt.title("Correlation Matrix Heatmap")
plt.savefig("Correlation Matrix Heatmap.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()

这是一个基础的热图绘制,通过计算数据框的皮尔逊相关系数矩阵,利用Seaborn库的heatmap函数可视化各特征间的相关性,热图通过颜色深浅直观展示相关性强弱,是分析特征间关系的简单且常用的方法。

如何绘制带拟合线及其置信区间的散点图

基础散点图绘制

plt.figure(figsize=(8, 6))
plt.scatter(df["Variable_1"], df["Variable_2"], alpha=0.7, edgecolor='k')
plt.title("Scatter Plot of Variable_1 vs Variable_2", fontsize=14)
plt.xlabel("Variable_1", fontsize=12)
plt.ylabel("Variable_2", fontsize=12)
plt.grid(alpha=0.3)
plt.savefig("1.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()

通过plt.scatter() 绘制了一个基础散点图,展示df[“Variable_1”]和df[“Variable_2”]之间的关系,直观反映数据的分布情况。为了进一步分析,可以在此基础上利用statsmodels库拟合线性模型,添加拟合线和置信区间,以可视化两变量之间的线性趋势及其统计可靠性,从而实现更深入的数据洞察。

添加拟合线及其置信区间

import statsmodels.api as sm
# 拟合线性模型
X = sm.add_constant(df["Variable_1"])  # 添加常数项以适应截距
model = sm.OLS(df["Variable_2"], X).fit()  # 使用最小二乘法拟合
predictions = model.get_prediction(X)  # 获取预测结果
confidence_intervals = predictions.conf_int(alpha=0.05)  # 获取95%置信区间
# 为拟合线生成 x 和 y 值
x_values = np.linspace(df["Variable_1"].min(), df["Variable_1"].max(), 100)
X_pred = sm.add_constant(x_values)
predicted_means = model.predict(X_pred)
conf_int_pred = model.get_prediction(X_pred).conf_int()
# 绘制散点图和拟合线
plt.figure(figsize=(8, 6))
plt.scatter(df["Variable_1"], df["Variable_2"], alpha=0.7, edgecolor='k', label="Data Points")  # 数据点
plt.plot(x_values, predicted_means, color='red', label=f"Fit Line: y = {coefficients[0]:.2f}x + {coefficients[1]:.2f}")  # 拟合线
# 绘制置信区间
plt.fill_between(
    x_values,
    conf_int_pred[:, 0],  # 置信区间下界
    conf_int_pred[:, 1],  # 置信区间上界
    color='blue',
    alpha=0.2,
    label="95% Confidence Interval"
)
plt.title("Scatter Plot of Variable_1 and Variable_2 with Fit Line and Confidence Interval", fontsize=14)
plt.xlabel("Variable_1", fontsize=12)
plt.ylabel("Variable_2", fontsize=12)
plt.grid(alpha=0.3)
plt.legend(fontsize=10, loc='best')
plt.savefig("3.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()

通过拟合线性模型绘制散点图、拟合线以及95%的置信区间,展示Variable_1和Variable_2之间的线性关系及其统计可靠性。

接下来,可以将这逻辑整合到相关系数热图中:上三角保留相关系数热图和显著性标记,下三角绘制散点图并叠加拟合线和置信区间,对角线保留特征的分布直方图,实现全面分析特征间的关系。

进阶相关性热图1

构建一个带有多种形式可视化的相关系数可视化,用于全面分析数据特征之间的关系,对角线展示每个特征的直方图和核密度估计 (KDE),直观反映单变量的分布形态;下三角绘制散点图并叠加线性拟合线及95%置信区间,呈现特征间的线性趋势和统计置信度;上三角显示皮尔逊相关系数热图,通过颜色深浅和数字注释量化特征间的相关性强弱。

进阶相关性热图2

增强对特征间线性关系可靠性的统计检验解读,使得相关性分析更具科学性和直观性。



© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号