我正在尝试了解如何在 tsplot 中计算误差带。显示了错误带的示例 here .
当我绘制一些简单的东西时
sns.tsplot(np.array([[0,1,0,1,0,1,0,1], [1,0,1,0,1,0,1,0], [.5,.5,.5,.5,.5,.5,.5,.5]]))
如预期的那样,我在 y=0.5
处得到了一条垂直线。顶部误差带也是 y=0.665
附近的垂直线,底部误差带也是 y=0.335
附近的垂直线。谁能解释一下这些是如何得出的?
最佳答案
编辑:这个问题和这个答案指的是 Seaborn 的旧版本,与新版本无关。请参阅下面的@CGFoX 评论。
我不是统计学家,但我通读了 seaborn 代码以了解到底发生了什么。分为三个步骤:
Bootstrap 重采样。Seaborn 创建数据的重采样版本。每一个都是 一个像你的 3x8 矩阵,但每一行都是从 三行你的输入。例如,一个可能是:
[[ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5] [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5] [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]]
另一个可能是:
[[ 1. 0. 1. 0. 1. 0. 1. 0. ] [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5] [ 0. 1. 0. 1. 0. 1. 0. 1. ]]
它创建
n_boot
个(默认为 10000 个)。集中趋势估计。Seaborn 对数据的 10000 个重采样版本中的每一个的每一列运行一个函数。因为您没有指定此参数(
estimator
),它会将列提供给均值函数(numpy.mean
withaxis=0
) . Bootstrap 迭代中的许多列的平均值将是 0.5,因为它们将是 [0, 0.5, 1]、[0.5, 1, 0]、[0.5, 0.5, 0.5] 等,但是您还会有一些 [1,1,0] 甚至一些 [1,1,1],这将导致更高的均值。确定置信区间。对于每一列,seaborn 对根据每个重新采样的数据版本计算的均值的 1000 个估计值从小到大排序,并选择代表较高的那些和较低的 CI。默认情况下,它使用 68% 的置信区间,因此如果您排列所有 1000 个平均估计值,那么它将选择第 160 个和第 840 个。 (840-160 = 680,或 1000 的 68%)。
一些注意事项:
实际上只有 3^3 或 27 个可能的数组重采样版本,如果您使用诸如 mean 之类的函数,其中顺序无关紧要,那么只有 3! 或 6 个。所以所有 10000 次引导迭代将与这 27 个版本中的一个相同,或者在无序情况下为 6 个版本。这意味着在这种情况下进行 10000 次迭代可能是愚蠢的。
显示为置信区间的均值 0.3333... 和 0.6666... 是 [1,1,0] 和 [1,0,0] 或它们的重新排列版本的均值。
关于python - Seaborn tsplot中的 "error bands"是怎么计算出来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481134/