繁体   English   中英

R中的相对熵函数

[英]Relative Entropy function in R

我想构造一个函数来计算两个离散概率分布之间的相对熵。

以下尝试有效:

    H <- function(p1, p2, p3 = 1 - p1 - p2, q1, q2, q3 = 1 - q1 - q2) {
      p <- c(p1, p2, p3)
      q <- c(q1, q2, q3)
      return(sum(log(p^p) - log(q^p)))
}

但我想简化一下,以便参数只是向量:

D<-function(x,y){
  return(sum(log(x^x)-log(y^x)))
}

这不起作用。 这里有什么问题? 您不能用向量输入定义函数吗?

例:

a<-c(0.2,0.5,0.3)
b<-c(0.4,0.4,0.2)

然后

    H(0.2,0.5,0.3,0.4,0.4,0.2) 
 0.094

正确,但是:

D(a,b)
Inf

这是不正确的

这有效:

p1 <- 1
p2 <- 2
q1 <- 4
q2 <- 5

H <- function(p1, p2, q1, q2){
  p3 <- 1 - p1 - p2
  q3 <- 1 - q1 - q2
  p <- c(p1, p2, p3)
  q <- c(q1, q2, q3)
  return(sum(log(p^p) - log(q^p)))
}
H(p1, p2, q1, q2)
# [1] -0.4462871

x <- c(p1, p2, 1 - p1 - p2)
y <- c(q1, q2, 1 - q1 - q2)

D <- function(x, y){
  return(sum(log(x^x)-log(y^x)))
}
D(x, y)
# [1] -0.4462871

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM