用户,
当试图计算Kullback-Leibler-Divergence时,我遇到了R的积分函数的问题;对于我试图重现的公式,请参见此处:https://wikimedia.org/api/rest_v1/media/math/render/svg/526682a951093613fe4c721db57b68ec991bdf07
代替“p(x)”和“q(x)”我分别使用“f.1”和“f.2”。
以下是代码:
f.1 = function(x){
dis.t = dt(x,df.1)
return(dis.t)
}
f.2 = function(x){
dis.norm = (1/sqrt(2*pi*sigma.sq))*exp(-((x-mu)^2)/2*sigma.sq)
return(dis.norm)
}
test = function(x){
kld = f.1(x)*log(f.1(x)/f.2(x))
return(kld)
}
KLd = function(x){integrate(test(x),-Inf,Inf)}
它返回一个错误:“match.fun(f)中的错误:'test(x)'不是函数,字符或符号”; 如果我使用“is.function(test)”,则返回“TRUE”。
感谢您帮助您找出问题和解决方案;
附加信息:输入函数的x i是伪随机t分布样本: df.1 = 3 n = 25 rt(n,df.1)
f.2函数只是正态分布的密度函数;
祝你好运 埃林