频率直方图的ks密度

时间:2015-08-12 13:19:28

标签: matlab plot distribution

我想在一张图上绘制多个频率直方图,但是,我的频率图是锯齿状的而不是很漂亮。如下图所示:

mmin = min([Data]);
mmax = max([Data]);
figure(1);n = hist(Data, x);
f = n/sum(n);
plot(x,f,'r','LineWidth',3)

enter image description here

为了顺利进行,我调查了ksdensity并根据以下代码创建了下图:

[f,xi] = ksdensity(data);
figure(1)
plot(xi,f);

enter image description here

然而,我注意到我的图表不再在y轴上绘制频率。无论如何使用ksdensity更正此更改?我真的很喜欢图表看起来与我的频率直方图相反,并希望继续使用ksdensity,除非有更好的建议。

谢谢!

数据样本: https://www.dropbox.com/s/4ax2cuvugvqxjh6/splicing_attempt2_normalized_combined.txt?dl=0

1 个答案:

答案 0 :(得分:2)

这里的诀窍是我不认为你在直方图中正确计算频率。你忽略了箱宽。您的频率应该是每个位置的SNP数量,这需要除以每个容器的(可能是分数)位置的数量。

试试这个:

Data = rand(1, 1e4);

figure(1);
[n, c] = hist(Data, 20);
dc = abs(c(2) - c(1));

f = n./(dc * sum(n));
plot(c,f,'r','LineWidth',3)

[~,f_kde,xi] = kde(Data);
line(xi,f_kde);

我没有统计工具箱,所以我使用的是文件交换kde功能,但两者的工作方式相同。

如果第一张图确实是你所追求的,那么做一点代数,而不是将直方图值除以bin宽度,而是将kdensity值乘以相同的bin宽度。

正如我在其他histogram answer中提到的,有很多方法可以为直方图选择最佳的bin宽度。为了方便起见,我在这里选择了20个。