[英]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.