일 변량 지수 혹 프로세스의 MLE 찾기


16

단 변량 지수 혹 프로세스는 다음과 같은 이벤트 도달률을 갖는 자체 자극 포인트 프로세스입니다.

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

여기서, 은 이벤트 도착 시간입니다.t1,..tn

로그 우도 함수는

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

재귀 적으로 계산할 수 있습니다.

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

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

R(1)=0

What numerical methods can I use to find the MLE? What is the simplest practical method to implement?


1
I have had success fitting μ and α by maximizing the MLE the LBFGS implementation in scipy. The log-likelihood is not concave in β though, so I simply iterated over a range of β values and picked the one with the maximum likelihood. Note that α<β is required for stationarity of the process.
Emaad Ahmed Manzoor

1
curious, what is the correct form of the λ(t) function using the values of R(i) instead of resumming at each step?
crow

답변:


7

The Nelder-Mead simplex algorithm seems to work well.. It is implemented in Java by the Apache Commons Math library at https://commons.apache.org/math/ . I've also written a paper about the Hawkes processes at Point Process Models for Multivariate High-Frequency Irregularly Spaced Data .

felix, using exp/log transforms seems to ensure positivity of the parameters. As for the small alpha thing, search the arxiv.org for a paper called "limit theorems for nearly unstable hawkes processes"


1
Welcome to the site, @StephenCrowley. If you have your own question, please do not post it as ( / as part of) an answer. Click on the gray "ASK QUESTION" button at the top of the page & ask it there. If you have a question for clarification from the OP, you should ask it in a comment to the question post above. (Although frustratingly, you cannot do that until you reach 50 rep.)
gung - Reinstate Monica

3

I solved this problem using the nlopt library. I found a number of the methods converged quite quickly.


1
I assume you're familiar with T. Ozaki (1979), Maximum likelihood estimation of Hawkes' self-exciting point processes, Ann. Inst. Statist. Math., vol. 31, no. 1, 145-155.
cardinal

1
Could you give more details of what you did? It seems there is a problem with setting constraints and also that large beta is indistinguishable from zero alpha (they both look Poisson).
felix

3

You could also do a simple maximization. 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)

mu, alpha 및 beta가 음수 값으로 설정되지 않도록하려면 어떻게합니까?
felix

통화 에서 lowerupper매개 변수를 설정할 수 있습니다 optim.
정상

Nelder-Mead가 아닌 경우 기본값을 선택할 수 없습니다. ( stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html 참조 ). 또한 거대한 베타를 제로 알파와 구별 할 수있는 방법이 없다고 생각하므로 일반적인 최적화가 끝났습니다.
felix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.