get_kernel {dsmmR}R Documentation

Obtain the Drifting semi-Markov kernel

Description

This is a generic method that computes and returns the drifting semi-Markov kernel.

Usage

get_kernel(obj, t, u, v, l, klim = 100)

Arguments

obj

An object that inherits from the S3 classes dsmm, dsmm_fit_parametric, or dsmm_fit_nonparametric, dsmm_nonparametric or dsmm_parametric.

t

Optional, but recommended. Positive integer specifying the instance t of the visited states.

u

Optional. Can be either of the two options below:

  • Character specifying the previous state u, e.g. u = "a".

  • Positive integer, specifying a state in the state space E. For example, if E = \{a, c, g, t\} and u = 1, it corresponds to the state a, if u = 2, it corresponds to the state c.

v

Optional. Can be either of the two options below:

  • Character specifying the next state v, e.g. v = "c".

  • Positive integer, specifying a state in the state space E. For example, if E = \{a, c, g, t\} and v = 3, it corresponds to the state c, if v = 4, it corresponds to the state t.

l

Optional. Positive integer specifying the sojourn time l that is spent in the previous state u.

klim

Optional. Positive integer. Used only when obj inherits from the S3 classes dsmm_parametric or dsmm_fit_parametric. Specifies the time horizon used to approximate the d + 1 sojourn time distributions if f is drifting, or just 1 sojourn time distribution if f is not drifting. Default value is 100.

A larger value will result in a considerably larger kernel, which has dimensions of s \times s \times klim \times (n + 1), which will increase the memory requirements and will slow down considerably the simulate.dsmm() method. However, this will lead to better estimations through fit_dsmm(). (dsmm_parametric, fit_dsmm, simulate.dsmm)

Details

The drifting semi-Markov kernel is given as the probability that, given at the instance t the previous state is u, the next state state v will be reached with a sojourn time of l:

q_{\frac{t}{n}}(u,v,l) = P(J_{t}=v,X_{t}=l|J_{t-1}=u),

where n is the model size, defined as the length of the embedded Markov chain (J_{t})_{t\in \{0,\dots,n\}} minus the last state, J_t is the visited state at the instant t and X_{t} = S_{t}-S_{t-1} is the sojourn time of the state J_{t-1}. Specifically, it is given as the sum of a linear combination:

q_{\frac{t}{n}}(u,v,l)= \sum_{i = 0}^{d}A_{i}(t)\ q_{\frac{i}{d}}(u,v,l),

where A_i, i = 0, \dots, d are d + 1 polynomials with degree d that satisfy certain conditions (see dsmmR) and q_{\frac{i}{d}}(u,v,l), i = 0, \dots, d are d + 1 semi-Markov kernels. Three possible model specifications are described below. We will use the exponentials (1), (2), (3) to distinguish between the drifting semi-Markov kernel q_\frac{t}{n} and the semi-Markov kernels q_\frac{i}{d} used in Model 1, Model 2 and Model 3.

Model 1

In this case, both p and f are "drifting" between d + 1 fixed points of the model, hence the "drifting" in drifting semi-Markov models. Therefore, the semi-Markov kernels q_{\frac{i}{d}}^{\ (1)} are equal to:

q_{\frac{i}{d}}^{\ (1)}(u,v,l) = {p_{\frac{i}{d}}(u,v)}{f_{\frac{i}{d}}(u,v,l)},

where for i = 0, \dots, d we have d + 1 Markov Transition matrices p_{\frac{i}{d}}(u,v), and d + 1 sojourn time distributions f_{\frac{i}{d}}(u,v,l), where d is the polynomial degree.

Thus, the drifting semi-Markov kernel will be equal to:

q_{\frac{t}{n}}^{\ (1)}(u,v,l) = \sum_{i = 0}^{d} A_i(t)\ q_{\frac{i}{d}}^{\ (1)}(u,v,l) = \sum_{i = 0}^{d} A_i(t)\ p_{\frac{i}{d}}(u,v)f_{\frac{i}{d}}(u,v,l)

Model 2

In this case, p is drifting and f is not drifting. Therefore, the semi-Markov kernels q_{\frac{i}{d}}^{\ (2)} are equal to:

q_{\frac{i}{d}}^{\ (2)}(u,v,l)={p_{\frac{i}{d}}(u,v)}{f(u,v,l)}.

Thus, the drifting semi-Markov kernel will be equal to:

q_{\frac{t}{n}}^{\ (2)}(u,v,l) = \sum_{i = 0}^{d} A_i(t)\ q_{\frac{i}{d}}^{\ (2)}(u,v,l) = \sum_{i = 0}^{d} A_i(t)\ p_{\frac{i}{d}}(u,v)f(u,v,l)

Model 3

In this case, f is drifting and p is not drifting.

Therefore, the semi-Markov kernels q_{\frac{i}{d}}^{\ (3)} are now described as:

q_{\frac{i}{d}}^{\ (3)}(u,v,l)={p(u,v)}{f_{\frac{i}{d}}(u,v,l)}.

Thus, the drifting semi-Markov kernel will be equal to:

q_{\frac{t}{n}}^{\ (3)}(u,v,l) = \sum_{i = 0}^{d} A_i(t)\ q_{\frac{i}{d}}^{\ (3)}(u,v,l) = \sum_{i = 0}^{d} A_i(t)\ p(u,v)f_{\frac{i}{d}}(u,v,l)

Value

An array with dimensions of s \times s \times k_{max} \times (n + 1), giving the value of the drifting semi-Markov kernel q_{\frac{t}{n}}(u,v,l) for the corresponding (u,v,l,t). If any of u,v,l or t are specified, we obtain the element of the array for their given value.

See Also

For the objects required to calculate this kernel: fit_dsmm, parametric_dsmm, nonparametric_dsmm.

For sequence simulation through this kernel: simulate.dsmm.

For the theoretical background of drifting semi-Markov models: dsmmR.

Examples

# Setup.
states <- c("Rouen", "Bucharest", "Samos", "Aigio", "Marseille")
emc <- create_sequence(states, probs = c(0.3, 0.1, 0.1, 0.3, 0.2))
obj_model_2 <- fit_dsmm(
    sequence = emc,
    states = states,
    degree = 3,
    f_is_drifting = FALSE,
    p_is_drifting = TRUE
)

# Get the kernel.
kernel_model_2 <- get_kernel(obj_model_2)
cat(paste0("If no further arguments are made, kernel has dimensions ",
           "for all u, v, l, t:\n",
           "(s, s, k_max, n + 1) = (",
           paste(dim(kernel_model_2), collapse = ", "), ")"))

# Specifying `t`.
kernel_model_2_t <- get_kernel(obj_model_2, t = 100)
# kernel_model_2_t[ , , , t = 100]
cat(paste0("If we specify t, the kernel has dimensions for ",
           "all the remaining u, v, l:\n(s, s, k_max) = (",
           paste(dim(kernel_model_2_t), collapse = ", "), ")"))

# Specifying `t` and `u`.
kernel_model_2_tu <- get_kernel(obj_model_2, t = 2, u = "Aigio")
# kernel_model_2_tu["Aigio", , , t = 2]
cat(paste0("If we specify t and u, the kernel has dimensions for ",
           "all the remaining v, l:\n(s, k_max) = (",
           paste(dim(kernel_model_2_tu), collapse = ", "), ")"))

# Specifying `t`, `u` and `v`.
kernel_model_2_tuv <- get_kernel(obj_model_2, t = 3,
                                 u = "Rouen", v = "Bucharest")
# kernel_model_2_tuv["Rouen", "Bucharest", , t = 3]
cat(paste0("If we specify t, u and v, the kernel has dimensions ",
           "for all l:\n(k_max) = (",
           paste(length(kernel_model_2_tuv), collapse = ", "), ")"))

# It is possible to ask for any valid combination of `u`, `v`, `l` and `t`.

[Package dsmmR version 1.0.5 Index]