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)
wherem
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()
, calculatesn_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]])