我正在使用严格的正观察向量(它们是距离度量)。
我使用ksdensity
这个向量来感受密度函数,令人惊讶的是它包含负值。这意味着存在观察所有负值区间的正概率。
这是不正确的,因为我知道我的观察结果都是正面的。
为什么ksdensity
要这样做?我觉得它在假设连续可微性的情况下完成了曲线。这是一个正确的假设吗?
有没有什么选项可以让 Matlab 不猜测而只给出经验累积函数的“导数”?
我正在使用严格的正观察向量(它们是距离度量)。
我使用ksdensity
这个向量来感受密度函数,令人惊讶的是它包含负值。这意味着存在观察所有负值区间的正概率。
这是不正确的,因为我知道我的观察结果都是正面的。
为什么ksdensity
要这样做?我觉得它在假设连续可微性的情况下完成了曲线。这是一个正确的假设吗?
有没有什么选项可以让 Matlab 不猜测而只给出经验累积函数的“导数”?
返回的概率密度估计ksdensity
基于正常核函数的假设。如果您的数据的值接近于零,那么当各个内核相加时,您自然会得到一些负数重叠:
(图片来源)
直方图不会有这个问题,因为它只显示实际存在的值。要纠正错误,您可以指定不同的分布(Mathworks 将其称为“内核平滑器”),甚至可以添加自定义分布。例如:
[f,xi] = ksdensity(x,pts,'kernel','epanechnikov')
用 epanechnikov 替换正态分布。
编辑:
...并证明您应该始终首先阅读文档,我刚刚发现您可以将内核密度估计限制为仅正值:
x = gamrnd(5,7,1000,1);
[f,xi] = ksdensity(x,'support','positive');
figure
plot(xi,f,'linewidth',2)