python绘制置信椭圆

news2024/12/23 10:09:53

置信椭圆

置信椭圆(Confidence Ellipse)是一种用来表示二维数据的置信区域的统计工具。它是多元统计分析中常用的图形,通过它可以表示两个变量之间的协方差关系以及同时包含两个变量的可能取值范围。置信椭圆一般用于描述一组二维数据的散布范围,并在一定置信度下包含样本的可能区域。

置信椭圆的形状由两个关键因素决定:

均值向量( μ x , μ y ):表示二维数据的中心位置。协方差矩阵( Σ ):描述两个变量之间的关系。协方差矩阵的特征值和特征向量决定了椭圆的大小和方向。 均值向量(\mu_x, \mu_y):表示二维数据的中心位置。 协方差矩阵(\Sigma):描述两个变量之间的关系。协方差矩阵的特征值和特征向量决定了椭圆的大小和方向。 均值向量(μx,μy):表示二维数据的中心位置。协方差矩阵(Σ):描述两个变量之间的关系。协方差矩阵的特征值和特征向量决定了椭圆的大小和方向。

置信椭圆的大小和形状是根据给定的置信水平(如95%、99%)来计算的,置信水平越高,椭圆的范围越大。

置信椭圆应用场景

置信椭圆通常适用于以下情况:

1.	多元正态分布:当数据服从二维正态分布或接近正态分布时,置信椭圆能够很好地表示数据的分布区域。
2.	两变量的相关性分析:适合用于分析两个变量之间的相关性,如散点图中表示两变量之间的置信区域。
3.	数据集中性可视化:可以帮助判断数据点是否存在极端值或离群点,通过查看数据点是否落在椭圆区域内来评估。

置信椭圆的用途

1.	数据分布的概述:置信椭圆在散点图中可以帮助我们直观理解数据的分布趋势,展示数据点的集中区域。
2.	异常点检测:通过置信椭圆的边界,我们可以识别数据中的异常点,尤其是在高置信水平(如99%)下的数据点。
3.	估计参数置信区间:在双变量模型中,可以用置信椭圆来表示估计值的置信区域,从而了解参数估计的可靠性。

Python代码示例

以下是一个绘制置信椭圆的示例代码。假设我们有一组二维数据点,我们将计算这些数据的均值和协方差矩阵,并使用它们来绘制置信椭圆。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse


def confidence_ellipse(x, y, ax, n_std=2.0, facecolor='none', **kwargs):
    """
    绘制一个置信椭圆,表示数据的分布范围。
    x, y: 数据点的坐标。
    ax: matplotlib的轴对象。
    n_std: 置信范围倍数,2.0对应95%的置信度。
    facecolor: 椭圆的填充颜色。
    kwargs: 其他可选参数,用于定制椭圆。
    """
    # 计算数据的均值和协方差矩阵
    if x.size != y.size:
        raise ValueError("x 和 y 必须具有相同的长度")
    cov = np.cov(x, y)
    mean_x = np.mean(x)
    mean_y = np.mean(y)

    # 特征值和特征向量
    eigvals, eigvecs = np.linalg.eigh(cov)
    order = eigvals.argsort()[::-1]
    eigvals, eigvecs = eigvals[order], eigvecs[:, order]

    # 计算椭圆的宽度和高度
    width, height = 2 * n_std * np.sqrt(eigvals)
    angle = np.degrees(np.arctan2(*eigvecs[:, 0][::-1]))

    # 创建椭圆对象
    ellipse = Ellipse(xy=(mean_x, mean_y), width=width, height=height, angle=angle, facecolor=facecolor, **kwargs)

    # 添加到ax对象
    ax.add_patch(ellipse)
    return ellipse


# 生成随机数据
np.random.seed(0)
x = np.random.normal(0, 1, 100)
y = 2 * x + np.random.normal(0, 1, 100)

# 绘制散点图和置信椭圆
fig, ax = plt.subplots(figsize=(6, 6))
ax.scatter(x, y, s=10, label="Data points")
confidence_ellipse(x, y, ax, n_std=2, edgecolor='red', linewidth=2, label="95% Confidence Ellipse")

# 图形设置
ax.set_xlabel("X-axis")
ax.set_ylabel("Y-axis")
ax.legend()
plt.title("Scatter plot with 95% Confidence Ellipse")
plt.grid(True)
plt.show()

结果展示:
可以看到大部分点都落在置信区间为95%的置信椭圆内,两变量的相关性很好。
(注:当需要分析两个变量之间的关系时,置信椭圆可以帮助识别变量之间的相关性。如果椭圆形状接近圆形,则表明两个变量几乎不相关;如果椭圆拉得很长,则表明变量之间有较强的线性关系。)在这里插入图片描述
现在我想绘制1σ、2σ和3σ的置信椭圆,可以在图中调用confidence_ellipse函数三次,分别传入不同的 n_std 值。这样可以显示出不同置信水平的椭圆,例如:

•	1σ 对应约68%的置信度。
•	2σ 对应约95%的置信度。
•	3σ 对应约99.7%的置信度。

下面是修改后的代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

def confidence_ellipse(x, y, ax, n_std=1.0, facecolor='none', **kwargs):
    """
    绘制一个置信椭圆,表示数据的分布范围。
    x, y: 数据点的坐标。
    ax: matplotlib的轴对象。
    n_std: 置信范围倍数,1.0对应68%的置信度,2.0对应95%的置信度,3.0对应99.7%的置信度。
    facecolor: 椭圆的填充颜色。
    kwargs: 其他可选参数,用于定制椭圆。
    """
    # 计算数据的均值和协方差矩阵
    if x.size != y.size:
        raise ValueError("x 和 y 必须具有相同的长度")
    cov = np.cov(x, y)
    mean_x = np.mean(x)
    mean_y = np.mean(y)
    
    # 特征值和特征向量
    eigvals, eigvecs = np.linalg.eigh(cov)
    order = eigvals.argsort()[::-1]
    eigvals, eigvecs = eigvals[order], eigvecs[:, order]
    
    # 计算椭圆的宽度和高度
    width, height = 2 * n_std * np.sqrt(eigvals)
    angle = np.degrees(np.arctan2(*eigvecs[:, 0][::-1]))

    # 创建椭圆对象
    ellipse = Ellipse(xy=(mean_x, mean_y), width=width, height=height, angle=angle, facecolor=facecolor, **kwargs)
    
    # 添加到ax对象
    ax.add_patch(ellipse)
    return ellipse

# 生成随机数据
np.random.seed(0)
x = np.random.normal(0, 1, 100)
y = 2 * x + np.random.normal(0, 1, 100)

# 绘制散点图和置信椭圆
fig, ax = plt.subplots(figsize=(6, 6))
ax.scatter(x, y, s=10, label="Data points")

# 绘制不同置信水平的椭圆
confidence_ellipse(x, y, ax, n_std=1, edgecolor='blue', linewidth=2, label="1σ (68%) Confidence Ellipse")
confidence_ellipse(x, y, ax, n_std=2, edgecolor='red', linewidth=2, label="2σ (95%) Confidence Ellipse")
confidence_ellipse(x, y, ax, n_std=3, edgecolor='green', linewidth=2, label="3σ (99.7%) Confidence Ellipse")

# 图形设置
ax.set_xlabel("X-axis")
ax.set_ylabel("Y-axis")
ax.legend()
plt.title("Scatter plot with 1σ, 2σ, and 3σ Confidence Ellipses")
plt.grid(True)
plt.show()

结果展示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具,与Python相结合,可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值,不仅可以极大地提高工作效率,减少重复劳动,还能增强数据处理流程的…

轴承故障全家桶更新 | 基于时频图像的分类算法

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

001-Kotlin界面开发之Jetpack Compose Desktop学习路径

Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建,因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括,Kotlin是一种现代的、静态类型的编程语言,它结合…

阳振坤:云时代数据库的思考 | OceanBase发布会实录

在2024 OceanBase 年度发布会中,OceanBase 的创始人与首席科学家阳振坤进行了《云时代数据库的思考》的主题分享。本文为演讲实录。 亲爱的朋友们,衷心感谢各位莅临今天的发布会现场。今天是一个云的时代,我想与大家分享,我对于云…

JavaScript语法基础(函数,对象,常用类Array,String,Math和Date)【超详细!!!新手入!!!】

一、函数 1、函数的定义 函数指的是一段可被重复调用的代码块。函数与变量不同,需要先定义再调用。 定义函数的语法格式为: function 函数名(参数1,参数2,...) { 语句; …

OpenGL入门004——使用EBO绘制矩形

本节将利用EBO来绘制矩形 文章目录 一些概念EBO 实战简介utilswindowFactory.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 EBO 概述: Element Buffer Object 用于存储顶点的索引数据,以便在绘制图形时可以重用顶点数…

linux之网络子系统-用户层接收数据包之同步阻塞方案

一、前言 之前讲述了网络包是如何从网卡送到协议栈的,接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。 进程与内核配合有多种方案,这里我们这分析两种典型的…

高效消防应急:RFID技术救援装备的快速管理

基层应急救援消防设施管理面临着一个既复杂又迫切的挑战。通常,受限的资源和专业人才的短缺导致应对突发事件的反应迟缓,处理结果不理想。同时,消防团队的人员结构和技术能力也在一定程度上决定了应急救援的成效和效率。在数字化浪潮下&#…

TMDOG的Gin学习笔记_01——初识Gin框架

TMDOG的Gin学习笔记_01——初识Gin框架 博客地址:[TMDOG的博客](https://blog.tmdog114514.icu) 作者自述: 停更太久了,是因为开学了课太多了,并且我一直在准备上篇文章的内容正在coding,就先搁置了更新博客QAQ&…

【ROS的TF系统】

系列文章目录 TF系统简介 前面的章节实现了SLAM节点的建图功能: 激光雷达节点—> /scan话题 —>hector_mapping节点—> 地图数据话题/map 本期来实现SLAM节点的定位功能: TF(TransForm)主要描述的是两个坐标系的空间关…

Pandas JSON学习

1.JSON简介 JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。JSON 比 XML 更小、更快,更易解析,Pandas 可以很方便的处理 JSON 数据。 [{"…

SQL Server身份验证模式

SQL Server是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQL Server身份验证。理解这些身份验证方式的概念与更改方式的操作,对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何…

DC-9靶机通关

这是这个系列的最后一个靶机了!!!经过前面的锻炼和学习,这次我的目标是尽量不借助任何教程或者提示来拿下这个靶机!!!下面我们看能不能成功!!! 1.实验环境 攻…

百度SEO分析实用指南 提升网站搜索排名的有效策略

内容概要 在数字化时代,搜索引擎优化(SEO)已经成为提升网站曝光度的关键工具。本指南将带您了解SEO的基本知识,帮助您在复杂的网络环境中立足。我们将从关键词优化开始,重点讲解如何选择合适的关键词来提高搜索引擎排…

ML2001-1 机器学习/深度学习 Introduction of Machine / Deep Learning

图片说明来自李宏毅老师视频的学习笔记,如有侵权,请通知下架 影片参考 【李宏毅】3.第一节 - (上) - 机器学习基本概念简介_哔哩哔哩_bilibili 1. 机器学习的概念与任务类型 概念:机器学习近似于寻找函数,用于处理不同类型的任…

用Python打造媒体管理播放器:从零到全功能GUI应用

背景 在日常生活中,我们经常需要管理和播放大量媒体文件。市面上的音频播放器可能功能单一,或者界面复杂。作为一名程序员,我决定使用Python自己打造一个简单yet强大的媒体管理播放器。 C:\pythoncode\new\playsong.py 全部代码 import os…

Cisco Packet Tracer 8.0 路由器静态路由配置

文章目录 静态路由简介一、定义与特点二、配置与命令三、优点与缺点四、应用场景 一,搭建拓扑图二,配置pc IP地址三,pc0 ping pc1 timeout四,配置路由器Router0五,配置路由器Router1六,测试 静态路由简介 …

【HarmonyOS】鸿蒙系统

文章目录 前言一、鸿蒙OS概述1. 定义与特性2. 核心技术理念3. 技术架构设计1. 应用层2. 框架层3. 系统服务层4. 内核层 二、分布式架构分布式架构的核心理念分布式能力的实现关键技术 三、 总结 前言 鸿蒙OS是由华为推出的一款开源操作系统,旨在满足智能终端设备的…

《双指针篇》---移动零

题目传送门 这道题可以归类为 数组划分/数组分块 。 题目制定了一个规则,我们可以在这个规则下,将数组划分为若干个区间。 这道题让我们把所有非零元素移动到左边。所有零元素移动到右边。 将数组划分为: 左区间非0; 右区间&…

网络编程项目之UDP聊天室

项目要求 利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址? UDP客户端不会直接互连,所以不会获知其它客户端地址…