R中如何根据参数集成函数?

问题描述 投票:0回答:3

我估计正态逆高斯最大似然。

optim()
之后我得到

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

有 bug 的代码部分是

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(不是数字而是符号)对 t 对 f2 进行积分?

完整代码如下

#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
r numerical-integration integral
3个回答
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
投票

如果

yobs
的长度大于 1,
zval
也会大于 1,并且在
f2
行中调用
int2
K1 <- exp(-zval)*sqrt(pi/2*zval)*int2(zval)/gamma
的返回值也会大于 1,这会弄乱
integrate


1
投票

要将 int2 应用于向量参数,您可以引入新函数

int2vec
并在公式中使用它代替
int2

int2vec<-function(t) sapply(t,int2)
© www.soinside.com 2019 - 2024. All rights reserved.