为什么R密度函数在区间[from,to]之外返回非零值?
我已经输入了密度函数的R代码,我注意到以下奇怪的行:为什么R密度函数在区间[from,to]之外返回非零值?,r,kernel-density,R,Kernel Density,我已经输入了密度函数的R代码,我注意到以下奇怪的行: lo <- from - 4 * bw up <- to + 4 * bw 惊奇:f(-0.01)不是零! 它还意味着[0,1]上的f积分不是1: integrate(f, 0, 1) # 0.8787954 integrate(f, -0.1, 1.1) # 0.997002 那么为什么密度函数是这样写的(这是一个bug吗?),我能做些什么来避免这种行为(在这个例子中是f(-0.01)=0),而不会在f上失去任何质量(在这个
lo <- from - 4 * bw
up <- to + 4 * bw
惊奇:f(-0.01)
不是零!
它还意味着[0,1]
上的f
积分不是1
:
integrate(f, 0, 1) # 0.8787954
integrate(f, -0.1, 1.1) # 0.997002
那么为什么密度函数是这样写的(这是一个bug吗?),我能做些什么来避免这种行为(在这个例子中是f(-0.01)=0
),而不会在f
上失去任何质量(在这个例子中是积分(f,0,1)
大约等于1
)
谢谢
编辑:我对示例中使用的值做了一些更改 “为什么”在
from
、to
和cut
参数的文档中进行了解释。这不是一个错误。我认为,出于明显的原因,如果不做一些调整,就很难获得略低于0的beta分布的密度估计值。请记住,密度
只是一个估计值。调整带宽会使估计值更快地降到零,但由于其他原因,这可能不可取。否则,您可以始终将函数包装在硬编码值超出特定范围的内容中。为什么要使用rule=2
?@确实,这可能比我的漫谈更切题。@joran我相信您的漫谈在这里更相关。polmath,还请注意,文档建议设置bw=“SJ”
。您编写了“为什么密度函数是这样写的?”,我将其理解为“为什么密度定义为lo和up的这种方式?”原因如文档中所述:“这允许估计密度在极端情况下下降到大约为零。”。您的抱怨似乎是,使用默认值时,估计值下降到0的速度不够快,无法满足您的口味。因此,我的意见是,贝塔分布的端点是一种边缘情况估计。如果你想要一个通用的密度估计器工作,你需要自己手动调整结果。
integrate(f, 0, 1) # 0.8787954
integrate(f, -0.1, 1.1) # 0.997002