【发布时间】: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的定义以及a和b和D(a,b)的数据给出:[1] 0.09458187。