绘制 95% 置信区间 errorbar python pandas dataframes

新手上路,请多包涵

我想用 Python pandas、matpolib 显示 95% 的置信区间……但我坚持了下来,因为对于通常的 .std() 我会这样做:

 import pandas as pd
import numpy as np

import matplotlib

matplotlib.use('Agg')

import matplotlib.pyplot as plt
import math

data = pd.read_table('output.txt',sep=r'\,', engine='python')
Ox = data.groupby(['Ox'])['Ox'].mean()
Oy = data.groupby(['Ox'])['Oy'].mean()
std = data.groupby(['Ox'])['Oy'].std()

plt.plot(Ox, Oy , label = 'STA = '+ str(x))
plt.errorbar(Ox, Oy, std, label = 'errorbar', linewidth=2)

plt.legend(loc='best', prop={'size':9.2})

plt.savefig('plot.pdf')
plt.close()

但是我还没有在 pandas 方法中找到可以帮助我的东西。有人知道吗?

原文由 user7040867 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

使用 2 * std 估计 95% 区间

在正态分布中,区间 [μ - 2σ, μ + 2σ] 覆盖 95.5%,因此您可以使用 2 * std 来估计 95% 区间:

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame()
df['category'] = np.random.choice(np.arange(10), 1000, replace=True)
df['number'] = np.random.normal(df['category'], 1)

mean = df.groupby('category')['number'].mean()
std = df.groupby('category')['number'].std()

plt.errorbar(mean.index, mean, xerr=0.5, yerr=2*std, linestyle='')
plt.show()

结果:

结果

使用百分位数

如果您的分布偏斜,最好使用不对称误差线并从百分位数中获取 95% 的区间。

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import skewnorm

df = pd.DataFrame()
df['category'] = np.random.choice(np.arange(10), 1000, replace=True)
df['number'] = skewnorm.rvs(5, df['category'], 1)

mean = df.groupby('category')['number'].mean()
p025 = df.groupby('category')['number'].quantile(0.025)
p975 = df.groupby('category')['number'].quantile(0.975)

plt.errorbar(
    mean.index,
    mean,
    xerr=0.5,
    yerr=[mean - p025, p975 - mean],
    linestyle='',
)
plt.show()

结果:

在此处输入图像描述

原文由 MaxNoe 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于正态分布,约 95% 的值位于均值周围 4 个标准差的窗口内,换句话说,95% 的值在均值正/负 2 个标准差内。参见,例如 68–95–99.7-rule

plt.errorbaryerr 参数指定单边误差条的长度。从而采取

plt.errorbar(x,y,yerr=2*std)

其中 std 是标准偏差,显示 95% 置信区间的误差线。

原文由 ImportanceOfBeingErnest 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题