如何在 Python 中绘制置信区间?

Lui*_*405 17 python confidence-interval python-3.x

我最近开始使用 Python,但我无法理解如何绘制给定数据(或一组数据)的置信区间。我已经有一个函数,根据我传递给它的置信水平,给定一组测量值,计算上限和下限,但我不知道如何使用这两个值来绘制置信区间。我知道这里已经有人问过这个问题,但我没有找到有用的答案。

Fou*_*ier 37

有几种方法可以完成您的要求:

仅使用 matplotlib

from matplotlib import pyplot as plt
import numpy as np

#some example data
x= np.linspace(0.1, 9.9, 20)
y = 3.0 * x
#some confidence interval
ci = 1.96 * np.std(y)/np.mean(y)

fig, ax = plt.subplots()
ax.plot(x,y)
ax.fill_between(x, (y-ci), (y+ci), color='b', alpha=.1)
Run Code Online (Sandbox Code Playgroud)

fill_between做你正在寻找的。有关如何使用此函数的更多信息,请参阅:https : //matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.fill_between.html

输出

在此处输入图片说明

或者,seaborn使用lineplot或支持此方法regplot,请参阅:https : //seaborn.pydata.org/generated/seaborn.lineplot.html


And*_*per 10

import matplotlib.pyplot as plt
import statistics
from math import sqrt


def plot_confidence_interval(x, values, z=1.96, color='#2187bb', horizontal_line_width=0.25):
    mean = statistics.mean(values)
    stdev = statistics.stdev(values)
    confidence_interval = z * stdev / sqrt(len(values))

    left = x - horizontal_line_width / 2
    top = mean - confidence_interval
    right = x + horizontal_line_width / 2
    bottom = mean + confidence_interval
    plt.plot([x, x], [top, bottom], color=color)
    plt.plot([left, right], [top, top], color=color)
    plt.plot([left, right], [bottom, bottom], color=color)
    plt.plot(x, mean, 'o', color='#f44336')

    return mean, confidence_interval


plt.xticks([1, 2, 3, 4], ['FF', 'BF', 'FFD', 'BFD'])
plt.title('Confidence Interval')
plot_confidence_interval(1, [10, 11, 42, 45, 44])
plot_confidence_interval(2, [10, 21, 42, 45, 44])
plot_confidence_interval(3, [20, 2, 4, 45, 44])
plot_confidence_interval(4, [30, 31, 42, 45, 44])
plt.show()
Run Code Online (Sandbox Code Playgroud)
  • x:输入的 x 值。
  • values:包含与 x 值相对应的 y 重复值(通常是测量值)的数组。
  • z:z 分布的临界值。使用1.96对应于 的临界值95%

结果:

代码输出


ome*_*agy 8

让我们假设我们有三个类别以及跨这三个类别的某个估计量的置信区间的上下限:

data_dict = {}
data_dict['category'] = ['category 1','category 2','category 3']
data_dict['lower'] = [0.1,0.2,0.15]
data_dict['upper'] = [0.22,0.3,0.21]
dataset = pd.DataFrame(data_dict)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码绘制每个类别的置信区间:

for lower,upper,y in zip(dataset['lower'],dataset['upper'],range(len(dataset))):
    plt.plot((lower,upper),(y,y),'ro-',color='orange')
plt.yticks(range(len(dataset)),list(dataset['category']))
Run Code Online (Sandbox Code Playgroud)

结果如下图:

跨三个类别的估计量的置信区间