Integrate-Function R:match.fun(f)

时间:2018-05-27 17:52:10

标签: r match integrate

用户,

当试图计算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函数只是正态分布的密度函数;

祝你好运 埃林

0 个答案:

没有答案