Я пытаюсь создать огромный вложенный цикл (оптимизация будет оставлена на потом), чтобы он подходил для всех моделей GARCH, доступных с rugarch
.
Это мой MWE, который воспроизводит ошибку:
library(rugarch)
## Small parameter space to search over
AR_terms = c(0,1,2)
I_terms = c(0,1)
MA_terms = c(0,1,2)
garch_p_terms = c(0,1,2)
garch_q_terms = c(0,1,2)
## Models to search over
var_models = c("sGARCH","eGARCH","gjrGARCH","apARCH","iGARCH","csGARCH")
for (x in var_models) {
if (x == 'fGARCH') {
for (y in sub_var_models) {
for (AR in AR_terms) {
for (MA in MA_terms) {
for (I in I_terms) {
for (p in garch_p_terms) {
for (q in garch_q_terms) {
cat(y)
spec = spec_creator('fGARCH', y, MA, AR, I, p, q)
garch = ugarchfit(spec = spec, data = apple['A'], solver = 'hybrid', solver.control = list(trace=0))
cat('Fit Success')
}
}
}
}
}
}
next ## To skip evaluating fGARCH as its own model with not submodel below.
}
for (AR in AR_terms) {
for (MA in MA_terms) {
for (I in I_terms) {
for (p in garch_p_terms) {
for (q in garch_q_terms) {
cat(x)
spec = spec_creator(x, 'null', MA, AR, I, p, q)
garch = ugarchfit(spec = spec, data = apple['A'], solver = 'hybrid', solver.control = list(trace=0))
cat('Fit Success')
}
}
}
}
}
}
)
с определенной здесь функцией spec_creator
: (модель fGARCH
допускает семейство подмоделей, что является причиной большей части избыточного кода)
## Function to create the specs, purely to make the for loop area more readable.
spec_creator = function(model, sub_model, AR_term, I_term, MA_term, garch_p_term, garch_q_term) {
require(rugarch)
if (sub_model == 'null') {
spec = ugarchspec(variance.model = list(model = model,
garchOrder = c(garch_p_term, garch_q_term),
submodel = NULL,
external.regressors = NULL,
variance.targeting = FALSE),
mean.model = list(armaOrder = c(AR_term, I_term, MA_term)))
}
else {
spec = ugarchspec(variance.model = list(model = 'fGARCH',
garchOrder = c(garch_p_term, garch_q_term),
submodel = sub_model,
external.regressors = sub_model,
variance.targeting = FALSE),
mean.model = list(armaOrder = c(AR_term, I_term, MA_term)))
}
}
Когда я запускаю вышеупомянутое, я получаю успешные сообщения для многих sGARCH
моделей, но в итоге получаю эту ошибку: Error: $ operator is invalid for atomic vectors
, с трассировкой, указывающей на ugarchfit()
и функцией hessian()
.
Я предполагаю, что это какая-то проблема сходимости, но понятия не имею, что именно.
РЕДАКТИРОВАТЬ: это мои данные (хотя эта же ошибка возникает и с другими наборами данных),
A
28.57223993
28.30616607
28.2447644
28.29934366
28.39485735
28.80420177
29.29541506
29.42504079
29.31588228
29.51373208
30.25737443
28.94747231
28.85195861
28.72915529
29.17943414
29.12485489
29.04298601
28.96111712
27.95822332
28.5381279
28.68822085
28.12878349
27.96504572
29.32952709
30.31877609
30.1345711
29.629713
30.01859019
30.71447569
30.55756033
29.09756526
29.72522669
29.96401093
29.96401093
28.98840675
27.59663575
28.07420423
28.89971546
28.70868807
27.75355111
28.28569885
29.21354618
31.89475207
31.29438027
31.36260434
31.41718359