Garch

R 中的 MLE 錯誤:“vmmin”中的初始值不是有限的

  • March 21, 2019

我正在嘗試擬合 ARIMA(1,1)-GARCH(1,1) 模型。我改變了很多起始值,但仍然返回相同的錯誤。下面是我的程式碼,其中包含兩個函式LL,即概似計算器和call_mle呼叫LL

phi1``si1是 AR(1) 和 MA(1) 參數,是alpha1GARCH beta1(1,1) 參數。是 ARIMA 和 GARCH 常數constomega

在概似函式中,R[]是殘差,sigmasq[]是 sigma squared,並且sigmasqrt是 sigma 的平方根:

LL <- function(const, phi1 ,si1 , alpha1 ,beta1,omega , mu , sigma)
{
 R    = c()
 R[1] = mean(abs(train.data))

 ### ARIMA terms      
 for( i in 2:length(train.data))
 { 
   R[i] = train.data[i] - const -  phi1*train.data[i-1] - si1*R[i-1]
 }


 ### GARCH terms    
 sigmasq    = c()
 sigmasq[1] = sd(train.data)
 for(i in 2:length(train.data))
 {
   sigmasq[i] = alpha1*sigmasq[i-1] + beta1*(R[i-1])^2 + omega
 }
 sigmasqrt = sqrt(sigmasq)

 logL = suppressWarnings(-sum(dnorm(R , mu , sigmasqrt , log = TRUE)))  
 return( logL)
}

caller_mle = function()
{
 start_params = list(const = 0 ,phi1 =0.00,si1 = 0.00 ,alpha1 = 0.00 ,beta1 = 0.0 ,omega = 0, mu =0  , sigma =1)
 fixed_params = list(mu = 0  , const = 0)
 fit = mle(LL , start = start_params , fixed = fixed_params)
 return(fit)
}

你能提出什麼問題嗎?另外alpha1 + beta1 < 1,你能推荐一些其他的優化工具來解決這個問題嗎?

編輯:我使用 fgarch 包中的“garchfit”函式來模擬模型。它工作並給了我參數值。我使用這些參數作為我的對數概似的起始值,並在執行一些迭代後產生: optim(start, f, method = method, hessian = TRUE, …) 中的錯誤:非有限有限差分值

$$ 6 $$. 有人可以建議如何進一步進行還是我應該使用預定義的庫?

Edit2:非有限 - 差異是因為 sigmasqrt 變成 Nan(負數的 sqrt)。如果發生這種情況,我可以在我的概似函式中寫一個條件來嘗試下一個值嗎?會不會影響估計的準確性。

我可以使用類似的程序來確保 alpha1 + beta1 <1 嗎?

Edit3:試過這個,它永遠不會收斂。我收到以下錯誤:solve.default(oout$hessian) 中的錯誤:Lapack 常式 dgesv:系統完全是奇異的:U

$$ 1,1 $$= 0 任何人都可以建議接下來的步驟嗎?

我追踪了錯誤。這是一個用 R 實現的 C 語言常式,似乎在功能上已經過時,所以它被其他常式呼叫,但我不認為它仍然作為自己的常式實現。有關它的一些資訊位於<ftp://cran.r-project.org/pub/R/doc/manuals/r-devel/R-exts.html>

鑑於基礎數學,可能存在三個問題之一。

第一個是真實分佈要麼缺少第零個或第一個以上的矩。沒有定義的均值和變異數,或者沒有變異數,但有一個均值。像柯西這樣的重尾分佈會導致這種情況。在現實世界的情況下,分佈永遠不會穩定,因為總會有一個更高的點。不存在會產生有效答案的平方最小化常式。

第二種可能性是您的模型嚴重錯誤指定,因為您可能具有正確的一般分佈,但不是術語,因此您正在尋找一個非常遙遠的概似函式的 MLE。這並不是說你的模型不在球場上。它不在同一個城市、州或地區。

第三是參數的真實值在數據的邊緣附近,並且常式,這是一個爬山常式,一直在上坡,從不停止。想像一下,你在堪薩斯城,要步行到北美的全球最高點,但它在麥金利山上。距離大陸中心如此遙遠,以至於正常投降並說“我放棄”。

如果您要嘗試保持相同的通用算​​法,那麼我將手動建構算法並視覺化點估計器的聯合密度,其高度等於概似。切換標準包很容易導致兩個同樣糟糕的結果。

首先是您收到相同類別的消息。第二個是你應該得到相同類別的消息,但沒有提供警告,你得到非常錯誤的參數估計。

引用自:https://quant.stackexchange.com/questions/44098