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?

Dave Anderson
la source
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"

corbeau
la source
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.

Dave Anderson
la source
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)
supposé normal
la source
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