如何根据R中的参数集成功能?

时间:2012-06-22 12:53:47

标签: r integral integrate

我估计正常的反高斯最大似然。在optim()之后我得到了

  

“错误 - 积分(f2,lower = 0,upper = Inf,z = z):函数评估给出了错误长度的结果”。

带有错误的代码部分是

f2 <- function (t, z) {
    exp(-t)*t^(1-1/2)*(1+t/2*z)^(1-1/2)
}
int2 <- function (z) { 
    integrate(f2,  lower=0, upper=Inf, z=z)$value 
}

R网站上的类似推荐仍有同样的错误:

int2 <- function (z) { 
    integrate(f2,  lower=0, upper=Inf, z=z) 
}

所以问题是如何根据R中的参数z(不是数字而不是符号)将f2与t进行整合?

整个代码在

之下
#NIG
library(stats) 
unibubble_nig_ur <- function(x){
    #mu
    x1 <- x[1]
    #nu
    x2 <- x[2]
    #alpha
    x3 <- x[3]
    #beta
    x4 <- x[4]
    #kappa
    k <- x[5]
    #sigma_sq
    x6 <- x[6]
    H <- log((x3^x4+t2^x4)/(x3^x4+t1^x4))
    #mu_t
    x7 <- x1+(x2-x2^2/2)*H*k
    #alpha_t
    x8 <- sqrt(1/((x6-x2^2*H))*k+1/4)
    #beta_t
    x9<--c(1/2)
    #delta_t
    x10 <- sqrt((x6-x2^2*H)/k)
    zval <- x8*sqrt(x10^2+(yobs-x7^2))

    f = function (t) exp(-t)*(1)^(t-1)
    gamma = integrate(f, lower=0, upper=Inf)

    #Bessel function of 2nd kind
    f2 <- function (t, z) {
        exp(-t)*t^(1-1/2)*(1+t/2*z)^(1-1/2)
    }
    int2 <- function (z) { 
        integrate(f2,  lower=0, upper=Inf, z=z)$value 
    }

    K1 <- exp(-zval)*sqrt(pi/2*zval)*int2(zval)/gamma
    n <- length(logprice)
    t1 <- seq(1, n-1)
    t2 <- 1+t1
    yobs <- diff(logprice,1)

    # Probability Density Function 
    dnig <- x8*x10*exp(x10*sqrt(x8^2-x9^2)+x9*(yobs-x7))/(pi*sqrt(x10^2+(yobs-x7^2)))
    loglklhd<--sum(log(dnig))
    loglklhd
}

out_nig_ur <- optim(unibubble_nig_ur, p=c(60,40,80,80,80,80), hessian=TRUE)
out_nig_ur

3 个答案:

答案 0 :(得分:4)

例如:

F2 <- function(z){
    f2 <- function(t){
       exp(-t)*t^(1-1/2)*(1+t/2*z)^(1-1/2)
   }
return(f2)
}
int2 <- function (z) { 
    integrate(F2(z),  lower=0, upper=Inf)$value 
}
> int2(1)
[1] 1.156935

答案 1 :(得分:1)

如果yobs的长度大于1,那么zval也会f2int2的回复价值K1 <- exp(-zval)*sqrt(pi/2*zval)*int2(zval)/gamma也将会混淆integrate

答案 2 :(得分:1)

要将int2应用于矢量参数,您可以引入新函数int2vec并在公式中使用它而不是int2

int2vec<-function(t) sapply(t,int2)
相关问题