Python:怎么画出均值和置信区间的图

简介: 在统计学上,置信区间是从已观测到的数据中统计出来的一个估计。它给出了未知参数可能落在的区域。而通俗的讲,就是我们去估计一个参数(大部分情况是一个平均值或期望),但是估计一定会有误差,所以置信区间就告诉我们,这个平均值的误差范围。

1. 基础数学知识

1.1. 什么是置信区间(Confidence Interval, CI)

按照维基百科上说的是:在统计学上,置信区间是从已观测到的数据中统计出来的一个估计。它给出了未知参数可能落在的区域。

而通俗的讲,就是我们去估计一个参数(大部分情况是一个平均值或期望),但是估计一定会有误差,所以置信区间就告诉我们,这个平均值的误差范围。

比如 95% 置信区间,就是我们估计出来的平均值,会有 95% 的可能性落在这个区间。

1.2. 如何计算置信区间?

置信区间会用到标准误差,而标准误差会用到标准差,它们的计算如下:

总体标准差:

$$ \sigma=\sqrt{\frac{\sum_{i=i}^{n}(x_i-\bar{x})^2}{n}} $$

样本标准差:

$$ S = \sqrt{\frac{\sum_{i=i}^{n}(x_i-\bar{x})^2}{n-1}} $$

标准误差:

$$ \sigma_n=\frac{\sigma}{\sqrt{n}} \quad \text{or} \quad \sigma_n=\frac{S}{\sqrt{n}} $$

假设有一个随机变量 $X\sim \mathcal{N}(\mu,\sigma^2)$,其均值为 $\mu$,标准偏差为 $\sigma$,那么其期望 $\bar{X}\sim \mathcal{N}(\mu,\frac{\sigma^2}{n})$.

如果把 $\bar{X}$ 标准化,那么 $Z=\frac{\bar{X}-\mu}{\sqrt{\sigma^2/n}}\sim\mathcal{N}(0,1)$,令

$$ P\left\{ \left| \frac{\bar{X}-\mu}{\sqrt{\sigma^2/n}} \right| \le Z_{\frac{\alpha}{2}}\right\}=1-\alpha $$

这样得到了一个区间,$\left[\bar{X}-\frac{\sigma}{\sqrt{n}}Z_{\frac{\alpha}{2}},\bar{X}+\frac{\sigma}{\sqrt{n}}Z_{\frac{\alpha}{2}}\right]$。

那么我们就需要计算,随机变量的均值 $\bar{X}$,标准误差 $\sigma/\sqrt{n}$,并且当 $\alpha=0.05$ 的时候,$Z_{0.025}\approx 1.96$.

需要注意的是:$\alpha$ 是显著性水平,如果想要获得 95% 的置信度,那么 $\alpha=0.05$.

2. 在 Python 上画出置信区间

import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import scipy.stats as st
matplotlib.rcParams.update({'font.size': 12})

# generate dataset
data_points = 50
sample_points = 10000
Mu = (np.linspace(-5, 5, num=data_points)) ** 2
Sigma = np.ones(data_points) * 8
data = np.random.normal(loc=Mu, scale=Sigma, size=(100, data_points))

# predicted expect and calculate confidence interval
predicted_expect = np.mean(data, 0)
low_CI_bound, high_CI_bound = st.t.interval(0.95, data_points - 1,
                                            loc=np.mean(data, 0),
                                            scale=st.sem(data))

# plot confidence interval
x = np.linspace(0, data_points - 1, num=data_points)
plt.plot(predicted_expect, linewidth=3., label='estimated value')
plt.plot(Mu, color='r', label='grand truth')
plt.fill_between(x, low_CI_bound, high_CI_bound, alpha=0.5,
                label='confidence interval')
plt.legend()
plt.title('Confidence interval')
plt.show()

最终结果

在这里插入图片描述

目录
相关文章
|
6月前
|
数据可视化 数据挖掘 数据处理
python 盒装图纵坐标单位
【4月更文挑战第1天】
|
4月前
|
存储 程序员 Python
小白也能用的代码!1行Python,把PPT转成1张长图
大家好,我是程序员晚枫。今天介绍`python-office`库的新功能:仅用1行Python代码将PPT转为单张长图。
82 11
 小白也能用的代码!1行Python,把PPT转成1张长图
|
4月前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
【7月更文挑战第12天】Python进阶必学:DFS和BFS图遍历算法。理解图概念,用邻接表建无向图,实现DFS和BFS。DFS适用于查找路径,BFS解决最短路径。通过实例代码加深理解,提升编程技能。
38 4
|
4月前
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
65 3
|
4月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
40 1
|
4月前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
【7月更文挑战第10天】在Python中,图数据结构通过邻接矩阵、邻接表、边列表和邻接集来表示,用于社交网络分析和路径查找等。邻接矩阵用二维数组存储连接,邻接表仅存储每个节点的邻居,节省空间。边列表列出所有边,而邻接集用集合确保邻居唯一性。选择合适表示法能提升代码效率和可读性,展现编程技巧。
64 1
|
5月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:图神经网络(GNN)
使用Python实现深度学习模型:图神经网络(GNN)
266 1
|
5月前
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
5月前
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
4月前
|
数据可视化 Python
Python中绘制3D曲面图的艺术
【7月更文挑战第4天】使用Python的Matplotlib和mpl_toolkits.mplot3d库,可以轻松绘制3D曲面图。首先安装matplotlib,然后导入numpy和相关模块。通过定义函数和使用numpy的meshgrid生成数据,接着用`plot_surface`绘制曲面,可定制色彩映射、添加标签、标题、色标、透明度和阴影。通过自定义颜色映射和添加网格线,能进一步增强图形的解读性。这些技巧使3D数据可视化更具洞察力和吸引力。
88 0