У меня есть некоторые данные об обменных курсах, и я хочу оценить модель GARCH. Я не уверен, что это правильно, что я сделал, и я получаю две ошибки.
У меня есть список курсов валют, из которого я взял журнал разниц. Кроме того, я вычел среднее значение, чтобы получить эпсилоны. Теперь я хочу оценить параметры из модели GARCH. Я сделал это, минимизировав логарифмическую вероятность. Но я получаю две ошибки:
RuntimeWarning: в журнале обнаружено недопустимое значение
RuntimeWarning: переполнение, обнаруженное в double_scalars
Но я не вижу никаких отрицательных значений в сигме. Как я могу решить эти предупреждения? Кроме того, я получаю следующее
выход:
x: array([ 0.04881267, 0.17925725, 0.73315972])
Я узнал, что обычные значения в большинстве случаев около 0,0001, 0,05 и 0,9. Здесь это не так. Что-то не так?
def main():
S = data[:,1]
R = np.zeros(len(S)-1)
for i in range(len(S)-1):
R[i] = np.log(S[i+1] / S[i]) * 100
eps = R - np.mean(R)
vP0 = (0.1, 0.05, 0.92)
a = minimize(garch_loglike, vP0, eps, bounds = ((0.0001, None), (0.0001, None), (0.0001, None)), options={'disp':True})
print(a)
def garch_filter(omega, alpha, beta, eps):
iT = len(eps)
sigma_2 = np.zeros(iT)
for i in range(iT):
if i==0:
sigma_2[i] = omega/(1-alpha-beta)
else:
sigma_2[i] = omega + alpha*eps[i-1]**2 + beta*sigma_2[i-1]
return sigma_2
def garch_loglike(vP, eps):
iT = len(eps)
omega = vP[0]
alpha = vP[1]
beta = vP[2]
sigma_2 = garch_filter(omega, alpha, beta, eps)
logL = -np.sum(-np.log(sigma_2) - eps**2/sigma_2)
return logL