Максимизируйте логарифмическую вероятность получения оценок GARCH в python - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть некоторые данные об обменных курсах, и я хочу оценить модель 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
...