Source code for hippounit.scores.score_P_Value_ObliqueIntegration

from __future__ import division
from builtins import range
from sciunit import Score
import numpy
from sciunit.utils import assert_dimensionless
from scipy import stats


[docs]class P_Value_ObliqueIntegration(Score): """ P valuee from t-test. Used in ObliqueIntegrationTest. """ def __init__(self, score, related_data={}): self.score_l=[] for i in range(0, len(score)): if not isinstance(score[i], Exception) and not isinstance(score[i], float): raise InvalidScoreError("Score must be a float.") else: super(P_Value_ObliqueIntegration,self).__init__(score[i], related_data=related_data) self.score_l.append(score[i])
[docs] @classmethod def ttest(cls, exp_mean, model_mean, exp_sd, model_sd, exp_n, model_n): m1 = exp_mean m2 = model_mean v1 = exp_sd**2 v2 = model_sd**2 n1 = exp_n n2 = model_n if n2 != 0 and v2 != 0: vn1 = v1 / n1 vn2 = v2 / n2 df = ((vn1 + vn2)**2) / ((vn1**2) / (n1 - 1) + (vn2**2) / (n2 - 1)) denom = numpy.sqrt(vn1 + vn2) d = m1 - m2 t = numpy.divide(d, denom) prob = stats.t.sf(numpy.abs(t), df) * 2 # use np.abs to get upper tail else: prob = float('NaN') return prob
[docs] @classmethod def ttest_calc(cls, observation, prediction): exp_means=[observation['mean_threshold'], observation['mean_prox_threshold'], observation['mean_dist_threshold'], observation['mean_peak_deriv'], observation['mean_nonlin_at_th'], observation['mean_nonlin_suprath'], observation['mean_amp_at_th'], observation['mean_time_to_peak'], observation['mean_async_nonlin']] exp_SDs=[observation['threshold_std'], observation['prox_threshold_std'], observation['dist_threshold_std'], observation['peak_deriv_std'], observation['nonlin_at_th_std'], observation['nonlin_suprath_std'], observation['amp_at_th_std'], observation['time_to_peak_std'], observation['async_nonlin_std']] exp_Ns=[observation['exp_n'], observation['prox_n'], observation['dist_n'], observation['exp_n'], observation['exp_n'], observation['exp_n'], observation['exp_n'], observation['exp_n'], observation['async_n']] model_means = [prediction['model_mean_threshold'], prediction['model_mean_prox_threshold'], prediction['model_mean_dist_threshold'], prediction['model_mean_peak_deriv'], prediction['model_mean_nonlin_at_th'], prediction['model_mean_nonlin_suprath'], prediction['model_mean_amp_at_th'], prediction['model_mean_time_to_peak'], prediction['model_mean_async_nonlin']] model_SDs = [prediction['model_threshold_std'], prediction['model_prox_threshold_std'], prediction['model_dist_threshold_std'], prediction['model_peak_deriv_std'], prediction['model_nonlin_at_th_std'], prediction['model_nonlin_suprath_std'], prediction['model_amp_at_th_std'], prediction['model_time_to_peak_std'], prediction['model_async_nonlin_std']] model_N= [prediction['model_n'], prediction['model_prox_n'], prediction['model_dist_n'], prediction['model_n'], prediction['model_n'], prediction['model_n'], prediction['model_n'], prediction['model_n'], prediction['model_n']] p_values=[] for i in range (0, len(exp_means)): try: ttest_result = cls.ttest(exp_means[i], model_means[i], exp_SDs[i], model_SDs[i], exp_Ns[i], model_N[i]) ttest_result = assert_dimensionless(ttest_result) p_values.append(ttest_result) except (TypeError,AssertionError) as e: ttest_result = e return p_values
def __str__(self): return '\n p_value_threshold = %.2f,\n p_value_prox_threshold = %.2f,\n p_value_dist_threshold = %.2f,\n p_value_peak_dV/dt_at_threshold = %.2f,\n p_value_nonlin_at_th = %.2f,\n p_value_suprath_nonlin = %.2f,\n p_value_amplitude_at_th = %.2f,\n p_value_time_to_peak_at = %.2f,\n p_value_nonlin_at_th_asynch = %.2f\n' % (self.score_l[0], self.score_l[1],self.score_l[2], self.score_l[3],self.score_l[4], self.score_l[5],self.score_l[6], self.score_l[7],self.score_l[8])