Trovare il MLE per un processo esponenziale univariato di Hawkes


16

Il processo esponenziale univariato di Hawkes è un processo a punti autoeccitante con un tasso di arrivo dell'evento di:

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

dove sono gli orari di arrivo dell'evento.t1,..tn

La funzione di verosimiglianza log è

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

che può essere calcolato in modo ricorsivo:

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

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

R(1)=0

Quali metodi numerici posso usare per trovare l'MLE? Qual è il metodo pratico più semplice da implementare?


1
μαββα<β

1
curioso, qual è la forma corretta della funzione λ (t) usando i valori di R (i) invece di riprendere ad ogni passo?
corvo,

Risposte:


7

L'algoritmo simplex Nelder-Mead sembra funzionare bene .. È implementato in Java dalla libreria Math di Apache Commons su https://commons.apache.org/math/ . Ho anche scritto un articolo sui processi Hawkes presso Point Process Models per dati spaziati irregolarmente ad alta frequenza multivariati .

felix, usando le trasformazioni exp / log sembra garantire la positività dei parametri. Per quanto riguarda la piccola cosa alfa, cerca in arxiv.org un documento chiamato "teoremi limite per processi di hawkes quasi instabili"


1
Benvenuto nel sito, @StephenCrowley. Se hai una tua domanda, ti preghiamo di non pubblicarla come (/ come parte di) una risposta. Fai clic sul pulsante grigio "RICHIEDI DOMANDA" nella parte superiore della pagina e chiedilo lì. Se hai una domanda per chiarimenti dal PO, dovresti farla in un commento al post della domanda sopra. (Anche se frustrante, non puoi farlo fino a quando non raggiungi 50 ripetizioni.)
Gung - Ripristina Monica

3

Ho risolto questo problema usando la libreria nlopt . Ho trovato una serie di metodi convergenti abbastanza rapidamente.


1
Presumo che tu abbia familiarità con T. Ozaki (1979), Stima della massima verosimiglianza dei processi di auto-eccitazione di Hawkes , Ann. Inst. Statist. Matematica. , vol. 31, n. 1, 145-155.
cardinale il

1
Potresti fornire maggiori dettagli di ciò che hai fatto? Sembra che ci sia un problema con l'impostazione dei vincoli e anche che la beta di grandi dimensioni è indistinguibile dallo zero alpha (entrambi sembrano Poisson).
Felix,

3

Potresti anche fare una semplice massimizzazione. In 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)

Come assicurate che mu, alpha e beta non siano impostati su valori negativi?
Felix,

È possibile impostare i parametri lowere uppernella optimchiamata.
assunto normale

Non per Nelder-Mead non riesci a capire qual è l'impostazione predefinita? (Vedi stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html ). Inoltre, non penso che ci sia un modo per distinguere l'enorme beta dallo zero alpha, quindi un'ottimizzazione generale sembra destinata a fallire.
Felix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.