我估计正常的反高斯最大似然。在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
答案 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
也会f2
,int2
的回复价值K1 <- exp(-zval)*sqrt(pi/2*zval)*int2(zval)/gamma
也将会混淆integrate
。
答案 2 :(得分:1)
要将int2应用于矢量参数,您可以引入新函数int2vec
并在公式中使用它而不是int2
:
int2vec<-function(t) sapply(t,int2)