Trouver le MLE pour un processus Hawkes exponentiel univarié


16

Le processus exponentiel univarié de Hawkes est un processus ponctuel auto-excitant avec un taux d'arrivée d'événements de:

λ(t)=μ+ti<tαeβ(tti)

où sont les heures d'arrivée des événements.t1,..tn

La fonction de vraisemblance logarithmique est

tnμ+αβ(eβ(tnti)1)+i<jln(μ+αeβ(tjti))

qui peut être calculé récursivement:

tnμ+αβ(eβ(tnti)1)+ln(μ+αR(i))

R(i)=eβ(titi1)(1+R(i1))

R(1)=0

Quelles méthodes numériques puis-je utiliser pour trouver le MLE? Quelle est la méthode pratique la plus simple à mettre en œuvre?


1
J'ai réussi à ajuster et α en maximisant l'implémentation MLE et LBFGS dans scipy. Cependant, la log-vraisemblance n'est pas concave dans β , j'ai donc simplement itéré sur une plage de valeurs β et choisi celle avec la probabilité maximale. Notez que α < β est requis pour la stationnarité du processus. μαββα<β
Emaad Ahmed Manzoor

1
curieux, quelle est la forme correcte de la fonction λ (t) en utilisant les valeurs de R (i) au lieu de reprendre à chaque étape?
corbeau

Réponses:


7

L'algorithme simplex Nelder-Mead semble bien fonctionner. Il est implémenté en Java par la bibliothèque Apache Commons Math à https://commons.apache.org/math/ . J'ai également écrit un article sur les processus Hawkes dans les modèles de processus ponctuels pour les données multivariées à haute fréquence et irrégulièrement espacées .

Felix, l'utilisation des transformations exp / log semble assurer la positivité des paramètres. En ce qui concerne la petite chose alpha, recherchez sur arxiv.org un article intitulé "Théorèmes limites pour les processus de hawkes presque instables"


1
Bienvenue sur le site, @StephenCrowley. Si vous avez votre propre question, veuillez ne pas la poster comme (/ comme partie de) réponse. Cliquez sur le bouton gris "POSER UNE QUESTION" en haut de la page et posez-le là. Si vous avez une question à clarifier de la part du PO, vous devez la poser dans un commentaire à la question ci-dessus. (Bien que frustrant, vous ne pouvez pas le faire avant d'avoir atteint 50 répétitions.)
gung - Réinstallez Monica

3

J'ai résolu ce problème en utilisant la bibliothèque nlopt . J'ai trouvé qu'un certain nombre de méthodes ont convergé assez rapidement.


1
Je suppose que vous connaissez T. Ozaki (1979), Estimation du maximum de vraisemblance des processus ponctuels auto-excitants de Hawkes , Ann. Inst. Statist. Math. , vol. 31, non. 1, 145-155.
Cardinal

1
Pourriez-vous donner plus de détails sur ce que vous avez fait? Il semble qu'il y ait un problème avec la définition des contraintes et aussi que le grand bêta ne se distingue pas de zéro alpha (ils ont tous les deux l'air de Poisson).
felix

3

Vous pouvez également effectuer une simple maximisation. Dans R:

neg.loglik <- function(params, data, opt=TRUE) {
  mu <- params[1]
  alpha <- params[2]
  beta <- params[3]
  t <- sort(data)
  r <- rep(0,length(t))
  for(i in 2:length(t)) {
    r[i] <- exp(-beta*(t[i]-t[i-1]))*(1+r[i-1])
  }
  loglik <- -tail(t,1)*mu
  loglik <- loglik+alpha/beta*sum(exp(-beta*(tail(t,1)-t))-1)
  loglik <- loglik+sum(log(mu+alpha*r))
  if(!opt) {
    return(list(negloglik=-loglik, mu=mu, alpha=alpha, beta=beta, t=t,
                r=r))
  }
  else {
    return(-loglik)
  }
}

# insert your values for (mu, alpha, beta) in par
# insert your times for data
opt <- optim(par=c(1,2,3), fn=neg.loglik, data=data)

Comment vous assurez-vous que mu, alpha et beta ne sont pas définis sur des valeurs négatives?
felix

Vous pouvez définir les paramètres loweret upperdans l' optimappel.
supposé normal

Pas pour Nelder-Mead, vous ne pouvez pas, quelle est la valeur par défaut? (Voir stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html ). De plus, je ne pense pas qu'il existe un moyen de distinguer l'énorme bêta de zéro alpha, donc une optimisation générale semble vouée à l'échec.
felix
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.