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β(tti)

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

A função de probabilidade do log é

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

que pode ser calculado recursivamente:

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

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

R(1)=0

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

Dave Anderson
fonte
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"

Corvo
fonte
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.

Dave Anderson
fonte
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)
assumido normal
fonte
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