Source code for lib5c.operators.modeling

from scipy import stats

from lib5c.operators.base import InteractionMatrixOperator


[docs]class EmpiricalPvalueOperator(InteractionMatrixOperator): """ Operator for assigning empirical right-tail p-values to all interactions in an InteractionMatrix. """
[docs] def apply_inplace(self, target, **kwargs): """ Transform the target InteractionMatrix, setting its interactions to their emprical right-tail p-values. Parameters ---------- target : InteractionMatrix The InteractionMatrix object to transform. kwargs : other keyword arguments To be utilized by subclasses. Returns ------- InteractionMatrix The transformed InteractionMatrix. Notes ----- This transformation uses the ``kind='strict'`` kwarg of ``scipy.stats.percentileofscore()``, which means the resulting values represent the fraction of all the values that are greater than or equal to the value at that position. Examples -------- >>> import numpy as np >>> from lib5c.core.interactions import InteractionMatrix >>> from lib5c.operators.modeling import EmpiricalPvalueOperator >>> X = np.arange(16, dtype=float).reshape((4, 4)) >>> im = InteractionMatrix(X + X.T) >>> print(im) InteractionMatrix of size 4 [[ 0. 5. 10. 15.] [ 5. 10. 15. 20.] [10. 15. 20. 25.] [15. 20. 25. 30.]] >>> epo = EmpiricalPvalueOperator() >>> result = epo.apply(im) >>> print(result) InteractionMatrix of size 4 [[1. 0.9 0.8 0.6] [0.9 0.8 0.6 0.4] [0.8 0.6 0.4 0.2] [0.6 0.4 0.2 0.1]] >>> result.print_log() InteractionMatrix created transformed to empirical p-values """ # log target.log_event('transformed to empirical p-values') # operate flattened_values = target.flatten() for i in range(target.size()): for j in range(i + 1): target[i, j] = 1 - stats.percentileofscore( flattened_values, target[i, j], kind='strict') / 100 return target