leave_prob_discrete

mdtools.dtrj.leave_prob_discrete(*args, **kwargs)[source]

Calculate the probability that a compound leaves its state after a lag time \(\Delta t\) given that it has entered the state at time \(t_0\) resolved with respect to the states in a second discrete trajectory.

Take a discrete trajectory and calculate the probability that a compound leaves its state at time \(t_0 + \Delta t\) given that it has entered the state at time \(t_0\) and given that it was in a specific state of another discrete trajectory at time \(t_0\).

States whose starting point \(t_0\) is not known (because the compound has already been in its state at the beginning of the trajectory) are discarded, because it is not known in which state of the second trajectory the compound was at time \(t_0\).

Parameters:

args, kwargs – This function takes the same parameters as mdtools.dtrj.n_leaves_vs_time_discrete(). See there for more information.

Returns:

prob (numpy.ndarray) – Array of shape (m, f) where m is the number of different states in the second discrete trajectory. The ij-element of prob is the probability that a compound leaves its state j frames after it has entered it, given that the compound was in state i of the second discrete trajectory at time \(t_0\).

See also

mdtools.dtrj.leave_prob()

Calculate the probability that a compound leaves its state after a lag time \(\Delta t\) given that it has entered the state at time \(t_0\)

mdtools.dtrj.n_leaves_vs_time_discrete()

Calculate the number of compounds that leave their state after a lag time \(\Delta t\) resolved with respect to the states in a second discrete trajectory

mdtools.dtrj.remain_prob_discrete()

Calculate the probability that a compound is still (or again) in the same state as at time \(t_0\) after a lag time \(\Delta t\) resolved with respect to the states in a second discrete trajectory

mdtools.dtrj.back_jump_prob_discrete()

Calculate the back-jump probability resolved with respect to the states in a second discrete trajectory

Notes

If you parse the same discrete trajectory to dtrj1 and dtrj2 you will get the probability that a compound leaves its state after a lag time \(\Delta t\) for each individual state of the input trajectory.

This function simply calls mdtools.dtrj.n_leaves_vs_time_discrete(), calculates n_leaves / n_risk and checks that the result lies within the interval \([0, 1]\).

Important

A leaving probability of zero means that no state leaving could be observed at the given lag time. However, this does not necessarily mean that there definitely are no state leavings at this lag time, because if the lag time coincides with a censoring time, we simply do not know what happens.

Examples

>>> # 0 detectable leaves, 1 left-truncation, 1 right-censoring.
>>> dtrj = np.array([2, 2, 5, 5, 5, 5, 5])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[nan, nan, nan, nan, nan, nan, nan],
       [ 0.,  0.,  0.,  0.,  0.,  0., nan]])
>>> # 1 detectable leave, 1 left-truncation, 1 right-censoring.
>>> dtrj = np.array([2, 2, 3, 3, 3, 2, 2])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[ 0.,  0.,  0., nan, nan, nan, nan],
       [ 0.,  0.,  0.,  1., nan, nan, nan]])
>>> # 2 detectable leaves, 1 left-truncation, 1 right-censoring.
>>> dtrj = np.array([1, 3, 3, 3, 1, 2, 2])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[ 0.,  1., nan, nan, nan, nan, nan],
       [ 0.,  0.,  0., nan, nan, nan, nan],
       [ 0.,  0.,  0.,  1., nan, nan, nan]])
>>> dtrj = np.array([1, 3, 3, 3, 2, 2, 1])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[ 0.,  0., nan, nan, nan, nan, nan],
       [ 0.,  0.,  1., nan, nan, nan, nan],
       [ 0.,  0.,  0.,  1., nan, nan, nan]])
>>> dtrj = np.array([3, 3, 3, 1, 2, 2, 1])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[0. , 0.5, nan, nan, nan, nan, nan],
       [0. , 0. , 1. , nan, nan, nan, nan],
       [nan, nan, nan, nan, nan, nan, nan]])
>>> dtrj = np.array([[2, 2, 5, 5, 5, 5, 5],
...                  [2, 2, 3, 3, 3, 2, 2],
...                  [1, 3, 3, 3, 1, 2, 2],
...                  [1, 3, 3, 3, 2, 2, 1],
...                  [3, 3, 3, 1, 2, 2, 1]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[0. , 0.5, nan, nan, nan, nan, nan],
       [0. , 0. , 0.5, nan, nan, nan, nan],
       [0. , 0. , 0. , 1. , nan, nan, nan],
       [0. , 0. , 0. , 0. , 0. , 0. , nan]])
>>> dtrj = np.array([[1, 2, 2, 3, 3, 3],
...                  [2, 2, 3, 3, 3, 1],
...                  [3, 3, 3, 1, 2, 2],
...                  [1, 3, 3, 3, 2, 2]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[0.        , 0.5       ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.33333333,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan]])

Discarding negative states:

>>> dtrj = np.array([[1, 2, 2, 3, 3, 3],
...                  [2, 2, 3, 3, 3, 1],
...                  [3, 3, 3, 1, 2, 2],
...                  [1, 3, 3, 3, 2, 2],
...                  [1, 4, 4, 4, 4, 1]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[0.        , 0.33333333,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.33333333,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj, discard_neg_start=True)
array([[0.        , 0.33333333,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.33333333,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj, discard_all_neg=True)
array([[0.        , 0.33333333,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.33333333,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan]])
>>> dtrj = np.array([[ 1, -2, -2,  3,  3,  3],
...                  [-2, -2,  3,  3,  3,  1],
...                  [ 3,  3,  3,  1, -2, -2],
...                  [ 1,  3,  3,  3, -2, -2],
...                  [ 1,  4,  4,  4,  4, -1]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[0.        , 0.        , 0.33333333,        nan,        nan,
               nan],
       [0.        , 0.        ,        nan,        nan,        nan,
               nan],
       [0.        , 0.5       ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj, discard_neg_start=True)
array([[       nan,        nan,        nan,        nan,        nan,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan],
       [0.        , 0.5       ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj, discard_all_neg=True)
array([[       nan,        nan,        nan,        nan,        nan,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan],
       [0.        , 0.        ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.33333333,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
               nan]])
>>> dtrj = np.array([[ 1, -2, -2,  3,  3,  3],
...                  [-2, -2,  3,  3,  3,  1],
...                  [ 3,  3,  3,  1, -2, -2],
...                  [ 1,  3,  3,  3, -2, -2],
...                  [ 1,  4,  4,  4,  4, -1],
...                  [ 6,  6,  6,  6,  6,  6],
...                  [-6, -6, -6, -6, -6, -6]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj)
array([[       nan,        nan,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.33333333,        nan,        nan,
               nan],
       [0.        , 0.        ,        nan,        nan,        nan,
               nan],
       [0.        , 0.5       ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj, discard_neg_start=True)
array([[       nan,        nan,        nan,        nan,        nan,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan],
       [0.        , 0.5       ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.66666667,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 1.        ,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan]])
>>> mdt.dtrj.leave_prob_discrete(dtrj, dtrj, discard_all_neg=True)
array([[       nan,        nan,        nan,        nan,        nan,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan],
       [0.        , 0.        ,        nan,        nan,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.33333333,        nan,
               nan],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
               nan],
       [       nan,        nan,        nan,        nan,        nan,
               nan]])