KL-расстояние в R - PullRequest
       9

KL-расстояние в R

3 голосов
/ 09 марта 2011

Я хотел бы вычислить KL-расстояние из двух гамма-распределений, используя R.

enter image description here

Вот мой 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, Marco

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Я бы определил все аргументы, которые используются в функции. Я имею в виду:

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 в более высоких (глобальных) средах (которые могут запутаться, если эта функция зарыта глубоко внутри программы).

1 голос
/ 09 марта 2011

Проверьте явную формулу здесь:

http://en.wikipedia.org/wiki/Gamma_distribution#Kullback.E2.80.93Leibler_divergence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...