【发布时间】:2020-05-12 22:13:03
【问题描述】:
我使用核估计来获得非参数概率密度函数。然后,我想使用 Kullback-leiber 散度比较两个连续变量的内核分布之间的尾部“距离”。我试过以下代码:
kl_l <- function(x,y) {
integrand <- function(x,y) {
f.x <- fitted(density(x, bw="nrd0"))
f.y <- fitted(density(y, bw="nrd0"))
return((log(f.x)-log(f.y))*f.x)
}
return(integrate(integrand, lower=-Inf,upper=quantile(density(x, bw="nrd0"),0.25))$value)
#the Kullback-leiber equation
}
当我为 a, b = 19 个连续变量运行 kl_l(a,b) 时,它会返回警告
Error in density(y, bw = "nrd0") : argument "y" is missing, with no default
有什么方法可以计算出来吗?
(如果有人想查看实际方程式:https://www.bankofengland.co.uk/-/media/boe/files/working-paper/2019/attention-to-the-tails-global-financial-conditions-and-exchange-rate-risks.pdf第 13 页。)
【问题讨论】:
-
你可以看看LaplacesDemon包中的
KLD函数 -
感谢您的建议。但是,我只想研究分布的尾部,这意味着我需要一个函数来指定积分的边界(例如,从分布的第 25 个分位数的值到 -inf 的积分)。检查方程式:bankofengland.co.uk/-/media/boe/files/working-paper/2019/… 第 13 页
-
R 中还有其他可用的这种分歧的实现,但也许您已经检查过它们。在上面的代码中,我认为问题在于
integrate与 1 变量的函数一起使用,或者至少与积分在第一个变量上但第二个变量取常数值的函数一起使用。在任何情况下,您都没有传递y参数。 -
非常感谢您的帮助。我去看看。
标签: r