【发布时间】:2015-07-20 08:50:18
【问题描述】:
我正在尝试将 R 中的 optim 函数用于三个变量的 MLE,但我不断收到错误消息: optim 中的错误(fn = logL_geotest5_test,par = c(0.2, 1.5, 0.3), I = I, : L-BFGS-B 需要 'fn' 的有限值
我试图了解此错误背后的原因,它似乎与超过 .Machine$double.xmax 的对数似然的最大值有关。
本代码是 Pelletier &Wei 提供的geometricVaR Backtesting Method 的一部分,我可以为您提供对数似然。但是,优化之前有效(有时没有),所以我认为这不是问题。如果你愿意,我可以为你提供 LL 的公式,但它是一个很长的代码(我想让这篇文章尽可能短)。
感谢您的任何建议和想法。
V 是一个包含 250 个值的向量。
N<-100
iTest<-mat.or.vec(250,N)
iTest<-replicate(n=N,rbinom(n= 250, size=1, prob = 0.01))
LL_H0<-mat.or.vec(1,N)
for(i in 1:N){
I<-iTest[,i]
logL_gtest<-function(Omega,I,VaR){
a=Omega[1]; b=Omega[2]; z=Omega[3]
logL(I,a,b,z,VaR)
}
lower_boundary<- c(1e-8,0,0); upper_boundary<-rep(1,2,2)
LL_H0help <- optim(fn=logL_gtest, par=c(0.2, 1.5,0.3), I=I,VaR=VaR, lower=lower_boundary, upper=upper_boundary, method= "L-BFGS-B")
LL_H0[,i] <- LL_H0help$value
}
编辑1: 感谢您迄今为止的建议。我仍在寻找插入浏览器功能的正确位置。同时,我会给你 LL 函数:
logL<-function(I,a,b,z,VaR){
m <- sum(I)
v<-which(I == 1)
v<-c(0,v,250)
d<-c(diff(v))
if(a<0 | a>=1 | b<0 | b>1 | z<0 | (m-1)<3){logL<-NA
}else{
s<-rep(0,length(d))
f<-rep(0,length(d))
for(i in 1:length(d)){
lambda<-mat.or.vec(length(d),1)
lambda<- function(a, b, z, d, VaR){
lambda <- a*ds^(b-1)*(exp(-z*(VaR1)))
return(lambda)
}
VaR1<-VaR[(v[i]+1):v[i+1]]
ds<-seq(1:d[i])
lhelp<-lambda(a, b, z, ds, VaR1)
lhelp<-na.omit(lhelp)
lf<-c(1-lhelp[1:(length(lhelp)-1)], lhelp[length(lhelp)])
f[i]<-prod(lf)
ls<-c(1-lhelp[1:(length(lhelp)-1)])
s[i]<-prod(ls)
}
part1 <- ifelse(d[1]>0,log(s[1]), log(f[1]) )
part2 <- sum(log(f[2:(length(d)-1)]))
part3 <- ifelse(d[length(d)]<250,log(s[length(d)]), log(f[length(d)]))
logL <- part1 + part2 + part3
return(-logL)
}
}
Edit2:忘了提到 V 是风险价值计算的向量,因此值很小,约为 -0.02。 Edit3:感谢您迄今为止的建议。我用 VaR 替换了任何 V,用 z 替换了 c。 VaR 是一个长度为 250 的计算风险价值向量。所有值大致在 -0.018 到 -0.024 左右。
【问题讨论】:
-
您似乎在
logL()和optim()中有浮点溢出,无法处理Inf,-Inf。没有logL(),我们只能猜测问题。 -
请更新您的代码以使其可重现——重要的是我们可以运行您的代码并复制您的错误。阅读更多stackoverflow.com/questions/5963269/…
-
不要给
c赋值,尤其是当你想使用c()时。也找不到V。关注 josilber 的评论。 -
谢谢您,我尝试在编辑中操作您的建议。不幸的是,我仍然遇到错误
-
@Simon 添加对数似然函数
logL很有帮助,我们仍然无法重现您的错误。运行发布的代码会产生:Error: object 'VaR' not found。请更新示例以使其可重现。
标签: r optimization mathematical-optimization