如何正确绘制数据样本的概率密度函数

3
我知道这可能很基础,但是如果您知道一些样本数据来自某些流行分布(例如使用rnorm()rexp()生成),那么绘制PDF的正确和准确方法是什么?
我之所以问这个问题是因为我知道很多人使用density()函数,然后将其输入到plot()中,但是density()函数似乎太随意了,不够准确;例如,它在近似指数分布的负值数据时不准确,而指数分布不具有负值。
那么,有没有更精细调整的方法来绘制样本PDF呢?

1
一个类似的问题(或者至少是相关的)曾经被问及在[stats.se]上 - 我的answer解释了关于变量不可信的负值的部分。 - Gavin Simpson
2个回答

1
density函数执行核密度估计(KDE)。为了找到最适合您数据集的KDE,您应该调整带宽(参数bw)。这里有一篇论文讨论了KDE和带宽选择: http://www.stat.washington.edu/courses/stat527/s13/readings/Sheather_StatSci_2004.pdf 或者,您可以尝试不同的带宽方法来传递给bw,以获得更简单的方法: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/bandwidth.html 当前默认值“nrd0”是出于历史原因。我发现“ucv”和“bcv”对我的数据集效果更好。

1
如果您的数据值接近于0,除非带宽非常小,否则这些值仍将泄漏到负值中。 - Gavin Simpson

0

ggplot可以帮助处理不合适的负值。它可以以以下方式使用:

ggplot(df, 
       aes(x=contVar, fill = "green")) + 
  geom_density(alpha=.3)

我也建议看一下交叉验证中的这篇文章。


虽然我认为上面的回答以更技术和全面的方式回答了我的问题,但是你提供的链接是一个很好的资源,我想感谢你。 - Coolio2654

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接