R语言对高频交易订单流进行建模分析 2

一、实验介绍--hawkes过程参数估计

1.1 实验知识点

  • hawkes过程模拟加速
  • 最大似然估计 hawkes 最优参数

1.2 实验环境

  • R 3.4.1
  • Rstudio

二、Hawkes 过程参数估计

2.1 指数核 Hawkes 过程模拟优化

在上一章中,我们对指数核函数的 Hawkes 过程进行了模拟 , 但是当我们把 事件个数调大时,比如从 100 调到 1000 时,可以发现程序运行的时间大大增加了, 这是由于在算时刻对应的强度时需要调用前面所有的事件时刻,所以复杂度是 O(N^2).

所以可以根据这个性质把计算复杂度降低到 O(N):

set.seed(728)
n <- 100000
params <- c(0.5 , 0.3 , 1.2)
mu <- params[1]
alpha <- params[2]
beta <- params[3]
# recursively update intensity
event_time <- numeric(n)
last_kernel_sum <- numeric(n)

for (i in 1:n) {
  if (i==1) {
    lambda_star <- mu
    event_time[1] <- rexp(1 , rate=lambda_star)
  }
  else {
    lambda_last <- mu + last_kernel_sum[i-1]
    lambda_star <- lambda_last + alpha

    event_time[i] <- event_time[i-1] + rexp(1 , rate=lambda_star)
    last_kernel_sum[i] <- (last_kernel_sum[i-1]+alpha) * exp(-beta*(event_time[i] - event_time[i-1]))
    lambda_this <- mu + last_kernel_sum[i]

    while ( runif(1) > lambda_this / lambda_star) {
      # thinning procedure , delete this point and make new 
      lambda_star <- lambda_this

      event_time[i] <- event_time[i] + rexp(1 , rate=lambda_star)
      last_kernel_sum[i] <- (last_kernel_sum[i-1]+alpha) * exp(-beta*(event_time[i] - event_time[i-1]))
      lambda_this <- mu + last_kernel_sum[i]
    }
  }
}

2.2 Hawkes 过程参数估计

我们可以将公式转化为代码:

log_likelihood <- function(params , event) {
  mu = params[1]
  alpha = params[2]
  beta = params[3]

  n = length(event)
  t_n = event[n]

  kernel_sum <- numeric(n)

  for (i in 2:n) {
    kernel_sum[i] = (kernel_sum[i-1]+alpha) * exp(-beta*(event[i] - event[i-1]))
  }

  lambda <- kernel_sum + mu

  L = sum( log(lambda) ) - mu * t_n - alpha*n/beta + alpha/beta*sum(exp(-beta*(t_n-event)))

  #print(L)
  -L
}

因为后面的函数 nlminb 所做的是使函数的值最小化 , 上面的似然函数中我们输入的是负的似然函数。

nlminb(c(1,1,1) , log_likelihood ,event= event_time)
## $par
## [1] 0.4983477 0.3057706 1.2047607
## 
## $objective
## [1] 136883.5
## 
## $convergence
## [1] 0
## 
## $iterations
## [1] 24
## 
## $evaluations
## function gradient 
##       37       93 
## 
## $message
## [1] "relative convergence (4)"


经过优化得到的参数非常接近我们的真实参数(0.5,0.3,1.2) , 这说明极大似然估计非常有效。

Hawkes 过程的核函数可以指定多种形式 , 除了指数核函数以外 , 还可以使用幂律核函数 ,甚至不指定核函数的具体形式, 使用非参数的方法求取核函数 。

下一节我们将使用真实的高频订单流数据开始我们的旅程。

你可能感兴趣的:(实验楼课程,R,机器学习)