R (Rstudio) 控制台中 nlminb 的 NA/NaN 函数评估警告消息

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

我想使用 Analytic_t 方法(基于 Students-t 分布)获得 99% 水平的风险价值估计值。

我有代码:

load("stocks.Rdata")
plot(S,main="stock prices")
loss.returns <- -diff(log(S)) ## loss returns
plot(loss.returns,main="loss returns")

Analytic_t <- function(L,RM,p){
  input_check(RM,p)
  ## estimation of model parameters
  require(fGarch)
  std_par <- stdFit(L)$par
  nu <- std_par[3]
  mu <- std_par[1]
  s <- std_par[2] * sqrt((nu-2)/nu)
  ## calculation of risk measure 
  q <- qt(p,df=nu)
  if (RM=="VaR") return(mu + s * q)
  if (RM=="ES") return(mu + s * dt(q,df=nu) * (nu+q^2)/(nu-1)/(1-p)) 
}

if (T){
  set.seed(123)
  i <- sample(1:5,1)  
  L <- loss.returns[,i]
}
plot(L)

VaR_t <- Analytic_t(L, "VaR",0.99)

但是,当我跑步时

VaR_t <- Analytic_t(L, "VaR",0.99)

我收到以下警告:

警告信息: 1: 在 nlminb(start = start, Objective = loglik, lower = c(-Inf, 0, : NA/NaN 函数评估 2: 在 nlminb(start = start, Objective = loglik, lower = c(-Inf, 0, : NA/NaN 函数评估

如果我在控制台中输入

VaR_t
,我仍然可以获得一个值,但是我想摆脱警告。
L
中没有丢失数据,那么这个警告的原因可能是什么?我该如何解决它? 谢谢!

r rstudio
1个回答
0
投票

代码中的某些内容(可能在

stdFit()
中)调用
nlminb()
函数,该函数执行数值优化。优化器提出没有意义的参数值是很常见的,然后他们正在优化的函数返回
NA
NaN
。就您而言,这只是一个警告,因此功能主要在工作。如果它总是返回那些错误的值,您会收到错误。

对此问题的最佳解决方法是追踪它并确保您的函数永远不会返回这些值。这通常很困难,在您的情况下更是如此,因为看起来您没有编写最小化的函数,它是由

stdFit()
的作者编写的。

您可以通过拨打电话来抑制警告消息

VaR_t <- suppressWarnings(Analytic_t(L, "VaR",0.99))

但这通常是一个坏主意,因为有时警告会告诉您一些有用的信息。我的建议是允许显示警告,但忽略它,除非它显示

nlminb()
消息以外的内容。 (可以只抑制那个警告,但 R 并不容易,所以我不会费心去尝试。)

© www.soinside.com 2019 - 2024. All rights reserved.