R中

2011-03-09 30 views
3

的KL-距离,我想用R.R中

enter image description here

这里计算从两个伽玛分布的KL距离是我的R-代码:

theta1 <- 0.2 
theta2 <- 2 

f <- function(u) 
{ 
    dgamma(u, shape=1/theta1, scale=theta1) * 
     (dgamma(u, shape=1/theta1, scale=theta1, log=TRUE) - 
     dgamma(u, shape=1/theta2, scale=theta2, log=TRUE)) 
} 

f <- Vectorize(f) 
integrate(f, lower=0, upper=Inf) 

你对我的R代码有任何评论?你认为这是计算KL距离的好方法吗?

任何建议将理解的,

THX, 马科

+1

不知道是否能对你有用,但有一个'KL.dist'功能在'FNN'包在CRAN:HTTP: //cran.r-project.org/web/packages/FNN/index.html – juba 2011-03-09 08:50:56

+0

我会尝试我的运气在交叉验证(提及你是交叉发布,不跨过一些人):http:// stats。 stackexchange.com/ – 2011-03-09 09:39:02

+0

谢谢你的评论 – Marco 2011-03-09 09:55:47

回答

2

我将定义在所述功能中使用的所有参数。我的意思是:

my.theta1 <- 0.2 
my.theta2 <- 2 

f <- function(u, theta1, theta2) 
{ 
    dgamma(u, shape=1/theta1, scale=theta1) * 
     (dgamma(u, shape=1/theta1, scale=theta1, log=TRUE) - 
     dgamma(u, shape=1/theta2, scale=theta2, log=TRUE)) 
} 


f <- Vectorize(f) 
integrate(f, lower=0, upper=Inf, theta1 = my.theta1, theta2 = my.theta2) 

作为更加明确防止“意外”,因为你的函数搜索theta1和较高的(全球)环境(这会导致混乱,如果你有这个功能深埋程序内)theta2

+0

是的,这是一个好主意! Thx – Marco 2011-03-09 09:56:15