Seaborn Distplot:数据与概率不匹配

时间:2018-08-28 09:12:04

标签: python pandas seaborn

我使用以下代码生成了Seaborn累积distplot:

*newTab = A;
*(newTab + 1) = B;

该图的x轴范围是-2到+2。但是,当我调查数据时,最小值为-1,最大值为+1。因此,我尝试使用以下方法限制轴:

AlphaGraphCum = sns.distplot(dfControl["alpha"],
             hist_kws={'cumulative': True},
             kde_kws={'cumulative': True}, rug=False, hist=False); 
sns.distplot(dfGoal["alpha"],
             hist_kws={'cumulative': True},
             kde_kws={'cumulative': True, 'linestyle':'--'}, rug=False, hist=False); 
sns.distplot(dfGraph["alpha"],
             hist_kws={'cumulative': True},
             kde_kws={'cumulative': True, 'linestyle':':'}, rug=False, hist=False); 
sns.distplot(dfGoalGraph["alpha"],
             hist_kws={'cumulative': True},
             kde_kws={'cumulative': True, 'linestyle':'-.'}, rug=False, hist=False)


AlphaGraphCum.set(xlabel='Alpha')
AlphaGraphCum.set(ylabel='Cumulative Probability')

#AlphaGraphCum.set_xlim(-1,1)

我在上面的示例中将其注释掉。然后将x轴正确限制在-1和+1之间。但是,对于x = + 1,没有一行显示y值为1.0,因为+1是最大值,所以应该显示该值,因此累积概率应等于1.0。

有人知道为什么不是这样吗?任何提示将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

Seaborn中的

distplot使用kde (Kernel density estimation)为您提供了近似的数据集密度,其中假设数据点周围有小的“微内核”,并将它们加起来以创建“宏内核”整体上。因此,minmax周围的内核肯定会越过边界,因为边缘(minmax)上的数据点是“微内核”的中心。 (注意:“微型/宏内核”一词是我在这里用来解释的内容。)

假设我们的数据范围从-1010,如下所示。

import numpy as np
import pandas as pd

df = pd.DataFrame().assign(a=np.random.randint(-10, 11, 100))
print(df.a.min(), df.a.max())

Out:
-10 10

如果我们使用默认设置(其中distplotkde)绘制True

import seaborn as sns
sns.distplot(df.a)

它既显示了histogram-10之间的10,也显示了该直方图的近似值kde(当然也显示了{{1 }}由于上述原因越过了kdemin的限制。

现在,如果要获取累积密度,则max会根据distplot进行如下计算:

kde

此时,请注意,第一张图中的sns.distplot(df.a, kde_kws={'cumulative': True}) (蓝线)和第二张图中的kde(蓝线)的两条尾巴都对应。

您可能会想知道尾部是否完全对应,因为第一和第二张图的y比例不同,所以如果我们放大第二张图的y轴,则如下图所示。

cumulative kde

enter image description here

现在第一张和第三张图看起来很相似,但是唯一的区别是第一张图是import matplotlib.pyplot as plt sns.distplot(df.a, kde_kws={'cumulative': True}) plt.ylim([0, 0.07]) ,而第三张图是kde

长话短说,您要绘制的是基于cumulative kde的“近似累积密度”。这就是为什么分布(和累积分布)比实际数据(直方图)更广泛的原因。

希望这会有所帮助。


编辑:添加了kdecumulative kde

cumulative hist

enter image description here