R 中的 MLE 錯誤:“vmmin”中的初始值不是有限的
我正在嘗試擬合 ARIMA(1,1)-GARCH(1,1) 模型。我改變了很多起始值,但仍然返回相同的錯誤。下面是我的程式碼,其中包含兩個函式
LL
,即概似計算器和call_mle
呼叫LL
。
phi1``si1
是 AR(1) 和 MA(1) 參數,是alpha1
GARCHbeta1
(1,1) 參數。是 ARIMA 和 GARCH 常數const
。omega
在概似函式中,
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。這並不是說你的模型不在球場上。它不在同一個城市、州或地區。
第三是參數的真實值在數據的邊緣附近,並且常式,這是一個爬山常式,一直在上坡,從不停止。想像一下,你在堪薩斯城,要步行到北美的全球最高點,但它在麥金利山上。距離大陸中心如此遙遠,以至於正常投降並說“我放棄”。
如果您要嘗試保持相同的通用算法,那麼我將手動建構算法並視覺化點估計器的聯合密度,其高度等於概似。切換標準包很容易導致兩個同樣糟糕的結果。
首先是您收到相同類別的消息。第二個是你應該得到相同類別的消息,但沒有提供警告,你得到非常錯誤的參數估計。