Localizando o MLE para um processo exponencial univariado de Hawkes


16

O processo exponencial univariado de Hawkes é um processo de ponto emocionante com uma taxa de chegada de eventos de:

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

onde são os horários de chegada do evento.t1,..tn

A função de probabilidade do log é

−tnμ+αβ∑(e−β(tn−ti)−1)+∑i<jln⁡(μ+αe−β(tj−ti))

que pode ser calculado recursivamente:

−tnμ+αβ∑(e−β(tn−ti)−1)+∑ln⁡(μ+αR(i))

R(i)=e−β(ti−ti−1)(1+R(i−1))

R(1)=0

Quais métodos numéricos posso usar para encontrar o MLE? Qual é o método prático mais simples de implementar?


1
μαββα<β

1
curioso, qual é a forma correta da função λ (t) usando os valores de R (i) em vez de retomar a cada etapa?
— corvo

Respostas:


7

O algoritmo simplex Nelder-Mead parece funcionar bem. Ele é implementado em Java pela biblioteca de matemática Apache Commons em https://commons.apache.org/math/ . Também escrevi um artigo sobre os processos de Hawkes no Point Process Models para dados multivariados de alta frequência e espaçamento irregular de irregularidade .

felix, o uso de transformadas exp / log parece garantir a positividade dos parâmetros. Quanto à pequena coisa alfa, pesquise no arxiv.org um artigo chamado "teoremas dos limites para processos de hawkes quase instáveis"


1
Bem-vindo ao site, @StephenCrowley. Se você tiver sua própria pergunta, não a publique como (/ como parte de) uma resposta. Clique no botão cinza "PERGUNTAR PERGUNTA" na parte superior da página e pergunte lá. Se você tiver uma pergunta para esclarecimento do OP, faça um comentário na postagem de pergunta acima. (Embora frustrantemente, você não pode fazer isso até atingir 50 representantes.)
— gung - Restabelecer Monica

3

Resolvi esse problema usando a biblioteca nlopt . Encontrei vários métodos convergentes rapidamente.


1
Suponho que você esteja familiarizado com T. Ozaki (1979), Estimativa de máxima probabilidade dos processos pontuais auto-excitantes de Hawkes , Ann. Inst. Statist. Matemática. vol. 31, n. 1, 145-155.
— cardeal

1
Você poderia dar mais detalhes do que fez? Parece que há um problema ao definir restrições e também que beta grande é indistinguível de zero alfa (ambos parecem Poisson).
— Felix

3

Você também pode fazer uma maximização simples. Em 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)

Como você garante que mu, alpha e beta não estejam configurados com valores negativos?
— Felix #

Você pode definir os parâmetros lowere upperna optimchamada.
— assumednormal

Não para Nelder-Mead, você não pode, qual é o padrão? (Consulte stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html ). Além disso, não acho que exista alguma maneira de distinguir beta enorme de zero alfa, portanto uma otimização geral parece condenada.
— Felix
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.