def __init__(self, K, dt=1.0, dt_max=10.0, B=5, basis=None, sigma=np.inf, lmbda=0): """ Initialize a discrete time network Hawkes model with K processes. :param K: Number of processes :param dt: Time bin size :param dt_max: """ self.K = K self.dt = dt self.dt_max = dt_max self.sigma = sigma self.lmbda = lmbda # Initialize the basis if basis is None: self.B = B self.basis = CosineBasis(self.B, self.dt, self.dt_max, norm=True, allow_instantaneous=False) else: self.basis = basis self.B = basis.B # Initialize nodes self.nodes = \ [self._node_class(self.K, self.B, dt=self.dt, sigma=self.sigma, lmbda=self.lmbda) for _ in range(self.K)]
def __init__(self, K, dt=1.0, dt_max=10.0, B=5, basis=None, alpha=1.0, beta=1.0, allow_instantaneous=False, allow_self_connections=True): """ Initialize a discrete time network Hawkes model with K processes. :param K: Number of processes :param dt: Time bin size :param dt_max: """ self.K = K self.dt = dt self.dt_max = dt_max self.allow_self_connections = allow_self_connections # Initialize the basis if basis is None: self.B = B self.allow_instantaneous = allow_instantaneous self.basis = CosineBasis(self.B, self.dt, self.dt_max, norm=True, allow_instantaneous=allow_instantaneous) else: self.basis = basis self.allow_instantaneous = basis.allow_instantaneous self.B = basis.B assert not (self.allow_instantaneous and self.allow_self_connections), \ "Cannot allow instantaneous self connections" # Save the gamma prior assert alpha >= 1.0, "Alpha must be greater than 1.0 to ensure log concavity" self.alpha = alpha self.beta = beta # Initialize with sample from Gamma(alpha, beta) # self.weights = np.random.gamma(self.alpha, 1.0/self.beta, size=(self.K, 1 + self.K*self.B)) # self.weights = self.alpha/self.beta * np.ones((self.K, 1 + self.K*self.B)) self.weights = 1e-3 * np.ones((self.K, 1 + self.K*self.B)) if not self.allow_self_connections: self._remove_self_weights() # Initialize the data list to empty self.data_list = []