【问题标题】:"non-finite value supplied by optim" when using fitCopula使用 fitCopula 时“由 optim 提供的非有限值”
【发布时间】:2022-07-14 21:25:54
【问题描述】:

当我尝试对不同的 copula 进行 AIC 测试时,R 不断给我这个错误消息。

Error in optim(start, logL, lower = lower, upper = upper, method = optim.method,  : 
  non-finite value supplied by optim

但在我的代码中,我没有使用函数 optim 并且有些给出了其他警告。

Warning in fitCopula.ml(copula, u = data, method = method, start = start,  : possible convergence problem: optim() gave code=52

错误消息给出了 NA 结果,而警告消息给出了似乎在正确轨道上的数字。

这是我的代码。

 AIC.result <- function(EC,copulafunction){
 AIC<- matrix(nrow=length(colnames(EC)),ncol=length(colnames(EC)),byrow=T)
 for (i in 1:length(colnames(EC))) {
   for (j in 1:length(colnames(EC))) {
     if(i==j){
       AIC[i,j] <-1
     }else{
       u <- pobs(as.matrix(EC[,i]))
        v <- pobs(as.matrix(EC[,j]))  
       fit<- fitCopula(copulafunction, cbind(u,v),method="ml")
       AIC[i,j] <-AIC(fit)
     }
   }
 }
  mean((AIC-length(colnames(EC)))/2)
 }

EC是不同国家的回报,copulafunction是不同类型的copula。 Clayton copula 和旋转的 Clayton copula 给出了错误信息,而其余的则给出了警告信息。就我而言,最奇怪的是,EC 包含 7 个国家,而且运行顺利。当我向有 6 个国家的 DC 申请时,错误和警告来了。有人知道为什么吗?

【问题讨论】:

  • 嗨,欢迎来到 SO。您需要提供更多细节以增加获得有用答案的机会。 (i) 指明 (library(package)) 运行该功能所需的所有包; (ii) 描述(dput( )str( ))数据。

标签: r


【解决方案1】:

首先,如果您只想为您的模型找到 AIC,那么我认为fitCopula 函数默认将其返回给您。如果没有,那么简单直接的方法是使用BICopEst 函数RVineCopula。它返回AICBIC。错误消息可能是由于将错误的 copula 拟合到您的数据,这有时会导致函数不收敛,从而导致错误或警告。所以,你应该尝试另一个 copula 族。为您的数据选择最合适的 copula 的最佳方法是应用 VineCopula 包中的 BICselect() 函数。它将在基于 AIC 的大量列表中选择最好的双变量 copula。因此,它适用于您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多