我估计正常的逆高斯最大似然。optim()
我得到后
“错误 в 积分(f2,下 = 0,上 = 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(不是数字而是符号)将 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