【问题标题】:Relative Entropy function in RR中的相对熵函数
【发布时间】:2015-10-26 07:09:11
【问题描述】:

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

以下尝试有效:

    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

不正确

【问题讨论】:

  • 请显示数据示例。您会收到哪条错误消息?
  • 我不明白你D(a,b) 的结果。我尝试了您对D 的定义以及abD(a,b) 的数据给出:[1] 0.09458187

标签: r function vector


【解决方案1】:

这行得通:

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

【讨论】:

  • 谢谢,所以为了澄清我需要在定义函数之前定义参数的形式?为什么 D 只在指定 x,y 的形式后才起作用?
  • D(c(p1, p2, 1 - p1 - p2), c(q1, q2, 1 - q1 - q2)) 也可以。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多