python - Seaborn tsplot中的 "error bands"是怎么计算出来的?

标签 python statistics seaborn

我正在尝试了解如何在 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 代码以了解到底发生了什么。分为三个步骤:

  1. 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 个)。

  2. 集中趋势估计。Seaborn 对数据的 10000 个重采样版本中的每一个的每一列运行一个函数。因为您没有指定此参数(estimator),它会将列提供给均值函数(numpy.mean with axis=0) . Bootstrap 迭代中的许多列的平均值将是 0.5,因为它们将是 [0, 0.5, 1]、[0.5, 1, 0]、[0.5, 0.5, 0.5] 等,但是您还会有一些 [1,1,0] 甚至一些 [1,1,1],这将导致更高的均值。

  3. 确定置信区间。对于每一列,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/

相关文章:

graph - 绘制置信区间图(尤其是在 Minitab 或 e-view 中)

python - 监控节点集群

python - 从 Pandas 数据框的两列创建矩形热图

python - 如何绘制 pandas 数据框列,其中 x 轴由另外两个列定义,给出起始值和结束值?

python - 如何从 sqlite 表填充 Kivy TreeView

java - 在滑动窗口上重复有效地计算线性回归模型

python - 如何使用 pandas 编写包含以下列表的 txt?

python - 如何使用facet创建条形图并使用seaborn添加标签

python - 为什么断言没有大量使用?

python - django 形式的动态表