kaplan_meier_discrete
- mdtools.dtrj.kaplan_meier_discrete(*args, **kwargs)[source]
Estimate the state survival function using the Kaplan-Meier estimator resolved with respect to the states in a second discrete trajectory.
Take a discrete trajectory and calculate the probability that a compound is still in the new state at time \(t_0 + \Delta t\) given that a state transition has occurred at time \(t_0\) and given that the compound 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:
sf (
numpy.ndarray
) – Array of shape(m, f)
where m` is the number of different states in the second discrete trajectory. The ij-element of sf is the probability that a compound is still in the new state j frames after it has entered the state, given that the compound was in state i of the second discrete trajectory at time \(t_0\).sf_var (
numpy.ndarray
) – Array of the same shape as sf containing the corresponding variance values of the survival function calculated using Greenwood’s formula.
See also
mdtools.dtrj.kaplan_meier()
Estimate the state survival function using the Kaplan-Meier estimator
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.trans_rate_per_state()
Calculate the transition rate for each state averaged over all compounds
mdtools.dtrj.lifetimes_per_state()
Calculate the state lifetimes for each state
Notes
See
mdtools.dtrj.kaplan_meier()
for more information about the survival function and the Kaplan-Meier estimator.Examples
>>> # 0 detectable leaves, 1 left-truncation, 1 right-censoring. >>> dtrj = np.array([2, 2, 5, 5, 5, 5, 5]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[nan, nan, nan, nan, nan, nan, nan], [ 1., 1., 1., 1., 1., 1., nan]]) >>> sf_var 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]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[ 1., 1., 1., nan, nan, nan, nan], [ 1., 1., 1., 0., nan, nan, nan]]) >>> sf_var array([[ 0., 0., 0., nan, nan, nan, nan], [ 0., 0., 0., 0., nan, nan, nan]]) >>> # 2 detectable leaves, 1 left-truncation, 1 right-censoring. >>> dtrj = np.array([1, 3, 3, 3, 1, 2, 2]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[ 1., 0., nan, nan, nan, nan, nan], [ 1., 1., 1., nan, nan, nan, nan], [ 1., 1., 1., 0., nan, nan, nan]]) >>> sf_var array([[ 0., 0., nan, nan, nan, nan, nan], [ 0., 0., 0., nan, nan, nan, nan], [ 0., 0., 0., 0., nan, nan, nan]]) >>> dtrj = np.array([1, 3, 3, 3, 2, 2, 1]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[ 1., 1., nan, nan, nan, nan, nan], [ 1., 1., 0., nan, nan, nan, nan], [ 1., 1., 1., 0., nan, nan, nan]]) >>> sf_var array([[ 0., 0., nan, nan, nan, nan, nan], [ 0., 0., 0., nan, nan, nan, nan], [ 0., 0., 0., 0., nan, nan, nan]]) >>> dtrj = np.array([3, 3, 3, 1, 2, 2, 1]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[1. , 0.5, nan, nan, nan, nan, nan], [1. , 1. , 0. , nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan]]) >>> sf_var array([[0. , 0.125, nan, nan, nan, nan, nan], [0. , 0. , 0. , 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]]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[1. , 0.5, nan, nan, nan, nan, nan], [1. , 1. , 0.5, nan, nan, nan, nan], [1. , 1. , 1. , 0. , nan, nan, nan], [1. , 1. , 1. , 1. , 1. , 1. , nan]]) >>> sf_var array([[0. , 0.0625, nan, nan, nan, nan, nan], [0. , 0. , 0.0625, nan, nan, nan, nan], [0. , 0. , 0. , 0. , 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]]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete(dtrj, dtrj) >>> sf array([[1. , 0.5 , nan, nan, nan, nan], [1. , 1. , 0.66666667, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan]]) >>> sf_var array([[0. , 0.125 , nan, nan, nan, nan], [0. , 0. , 0.07407407, nan, nan, nan], [0. , 0. , 0. , 0.07407407, 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]]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj ... ) >>> sf array([[1. , 0.66666667, nan, nan, nan, nan], [1. , 1. , 0.66666667, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan]]) >>> sf_var array([[0. , 0.07407407, nan, nan, nan, nan], [0. , 0. , 0.07407407, nan, nan, nan], [0. , 0. , 0. , 0.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan]]) >>> sf_ns, sf_var_ns = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj, discard_neg_start=True ... ) >>> sf_ns array([[1. , 0.66666667, nan, nan, nan, nan], [1. , 1. , 0.66666667, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan]]) >>> sf_var_ns array([[0. , 0.07407407, nan, nan, nan, nan], [0. , 0. , 0.07407407, nan, nan, nan], [0. , 0. , 0. , 0.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan]]) >>> sf_an, sf_var_an = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj, discard_all_neg=True ... ) >>> sf_an array([[1. , 0.66666667, nan, nan, nan, nan], [1. , 1. , 0.66666667, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan]]) >>> sf_var_an array([[0. , 0.07407407, nan, nan, nan, nan], [0. , 0. , 0.07407407, nan, nan, nan], [0. , 0. , 0. , 0.07407407, 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]]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj ... ) >>> sf array([[1. , 1. , 0.66666667, nan, nan, nan], [1. , 1. , nan, nan, nan, nan], [1. , 0.5 , nan, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan]]) >>> sf_var array([[0. , 0. , 0.07407407, nan, nan, nan], [0. , 0. , nan, nan, nan, nan], [0. , 0.125 , nan, nan, nan, nan], [0. , 0. , 0. , 0.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan]]) >>> sf_ns, sf_var_ns = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj, discard_neg_start=True ... ) >>> sf_ns array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [1. , 0.5 , nan, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan]]) >>> sf_var_ns array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , 0.125 , nan, nan, nan, nan], [0. , 0. , 0. , 0.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan]]) >>> sf_an, sf_var_an = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj, discard_all_neg=True ... ) >>> sf_an array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [1. , 1. , nan, nan, nan, nan], [1. , 1. , 1. , 0.66666667, nan, nan], [1. , 1. , 1. , 1. , 1. , nan]]) >>> sf_var_an array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , 0. , nan, nan, nan, nan], [0. , 0. , 0. , 0.07407407, 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]]) >>> sf, sf_var = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj ... ) >>> sf array([[ nan, nan, nan, nan, nan, nan], [1. , 1. , 0.66666667, nan, nan, nan], [1. , 1. , nan, nan, nan, nan], [1. , 0.5 , nan, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan], [ nan, nan, nan, nan, nan, nan]]) >>> sf_var array([[ nan, nan, nan, nan, nan, nan], [0. , 0. , 0.07407407, nan, nan, nan], [0. , 0. , nan, nan, nan, nan], [0. , 0.125 , nan, nan, nan, nan], [0. , 0. , 0. , 0.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan], [ nan, nan, nan, nan, nan, nan]]) >>> sf_ns, sf_var_ns = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj, discard_neg_start=True ... ) >>> sf_ns array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [1. , 0.5 , nan, nan, nan, nan], [1. , 1. , 1. , 0.33333333, nan, nan], [1. , 1. , 1. , 1. , 0. , nan], [ nan, nan, nan, nan, nan, nan]]) >>> sf_var_ns array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , 0.125 , nan, nan, nan, nan], [0. , 0. , 0. , 0.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan], [ nan, nan, nan, nan, nan, nan]]) >>> sf_an, sf_var_an = mdt.dtrj.kaplan_meier_discrete( ... dtrj1=dtrj, dtrj2=dtrj, discard_all_neg=True ... ) >>> sf_an array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [1. , 1. , nan, nan, nan, nan], [1. , 1. , 1. , 0.66666667, nan, nan], [1. , 1. , 1. , 1. , 1. , nan], [ nan, nan, nan, nan, nan, nan]]) >>> sf_var_an 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.07407407, nan, nan], [0. , 0. , 0. , 0. , 0. , nan], [ nan, nan, nan, nan, nan, nan]])