我有一组值,我想绘制高斯核密度估计值,但是我有两个问题:
以下是我迄今为止的情节: y轴的顺序实际上是相关的,因为它代表了每个细菌物种的系统发育。在
我想为每种颜色添加一个高斯kde覆盖,但到目前为止,我还不能利用seaborn或scipy来做到这一点。在
下面是使用python和matplotlib进行上述分组条形图的代码:
enterN = len(color1_plotting_values)
fig, ax = plt.subplots(figsize=(20,30))
ind = np.arange(N) # the x locations for the groups
width = .5 # the width of the bars
p1 = ax.barh(Species_Ordering.Species.values, color1_plotting_values, width, label='Color1', log=True)
p2 = ax.barh(Species_Ordering.Species.values, color2_plotting_values, width, label='Color2', log=True)
for b in p2:
b.xy = (b.xy[0], b.xy[1]+width)
谢谢!在
我已经在上面的评论中声明了我对将KDE应用于OP的分类数据的保留意见。基本上,由于物种间的系统发育距离不服从三角不等式,因此不可能有一个有效的核可以用来估计核密度。然而,还有一些密度估计方法不需要构造核。其中一种方法是k-最近邻inverse distance weighting,它只需要非负距离,而不需要满足三角形不等式(我认为甚至不需要对称)。以下概述了这种方法:
如何从柱状图开始绘制“KDE”
核密度估计协议需要底层数据。你可以想出一种新的方法,用经验pdf(即直方图)代替,但这样就不会是KDE分布。在
不过,并不是所有的希望都破灭了。首先从直方图中提取样本,然后对这些样本使用KDE,可以得到KDE分布的良好近似值。下面是一个完整的工作示例:
输出:
图中红色虚线和橙色线几乎完全重叠,表明通过重新采样直方图计算出的实际KDE和KDE非常一致。在
如果你的直方图真的很嘈杂(比如你在上面的代码中设置了
n = 10
),那么当你将重采样的KDE用于绘图以外的任何事情时,你应该谨慎一点:总的来说,真实和重采样的kde之间的一致性仍然很好,但是偏差是明显的。在
把你的分类数据整理成适当的形式
既然你还没有公布你的实际数据,我不能给你详细的建议。我认为你最好的办法就是按顺序给你的类别编号,然后用这个数字作为直方图中每个条的“x”值。在
简单的方法
现在,我将跳过任何关于在这种情况下使用内核密度的有效性的哲学争论。稍后会出现的。在
一个简单的方法是使用scikit learn
KernelDensity
:这些值就是在直方图上绘制内核密度所需的全部值。卡皮托?在
现在,在理论方面,如果X是一个范畴(*),无序变量,有c个可能值,那么对于0≤h<;1
是有效的内核。对于一个有序的X
其中
|x1-x2|
应该理解为x1和x2之间的距离。当h趋于零时,这两个都成为指标并返回相对频率计数。h通常被称为带宽。在(*)不需要在变量空间上定义距离。不需要是公制空间。在
Devroye, Luc and Gábor Lugosi (2001). Combinatorial Methods in Density Estimation. Berlin: Springer-Verlag.
相关问题 更多 >
编程相关推荐