Source code for hippounit.scores.score_ZScore_backpropagatingAP

from __future__ import division
from builtins import str
from builtins import range

from sciunit import Score
import numpy
from sciunit.utils import assert_dimensionless
import collections

[docs]class ZScore_backpropagatingAP(Score): """ Average of Z scores. A float indicating the average of standardized difference from reference means for back-propagating AP amplitudes. """ def __init__(self, score, related_data={}): if not isinstance(score, Exception) and not isinstance(score, float): raise InvalidScoreError("Score must be a float.") else: super(ZScore_backpropagatingAP,self).__init__(score, related_data=related_data)
[docs] @classmethod def compute(cls, observation, prediction, distances): """Computes average of z-scores from observation and prediction for back-propagating AP amplitudes""" errors = collections.OrderedDict() for i in range (0, len(distances)): if 'mean_AP1_amp_strong_propagating_at_'+str(distances[i])+'um' in list(observation.keys()) or 'mean_AP1_amp_weak_propagating_at_'+str(distances[i])+'um' in list(observation.keys()): p_value = prediction['model_AP1_amp_at_'+str(distances[i])+'um']['mean'] o_mean = observation['mean_AP1_amp_strong_propagating_at_'+str(distances[i])+'um'] o_std = observation['std_AP1_amp_strong_propagating_at_'+str(distances[i])+'um'] try: error = abs(p_value - o_mean)/o_std error = assert_dimensionless(error) except (TypeError,AssertionError) as e: error = e errors['AP1_amp_strong_propagating_at_'+str(distances[i])] = error o_mean = observation['mean_AP1_amp_weak_propagating_at_'+str(distances[i])+'um'] o_std = observation['std_AP1_amp_weak_propagating_at_'+str(distances[i])+'um'] try: error = abs(p_value - o_mean)/o_std error = assert_dimensionless(error) except (TypeError,AssertionError) as e: error = e errors['AP1_amp_weak_propagating_at_'+str(distances[i])] = error else: p_value = prediction['model_AP1_amp_at_'+str(distances[i])+'um']['mean'] o_mean = observation['mean_AP1_amp_at_'+str(distances[i])+'um'] o_std = observation['std_AP1_amp_at_'+str(distances[i])+'um'] try: error = abs(p_value - o_mean)/o_std error = assert_dimensionless(error) except (TypeError,AssertionError) as e: error = e errors['AP1_amp_at_'+str(distances[i])] = error for i in range (0, len(distances)): # to keep better order: first all AP1, then all APlast p_value_l = prediction['model_APlast_amp_at_'+str(distances[i])+'um']['mean'] o_mean_l = observation['mean_APlast_amp_at_'+str(distances[i])+'um'] o_std_l = observation['std_APlast_amp_at_'+str(distances[i])+'um'] try: error_l = abs(p_value_l - o_mean_l)/o_std_l error_l = assert_dimensionless(error_l) except (TypeError,AssertionError) as e: error_l = e errors['APlast_amp_at_'+str(distances[i])] = error_l score_strong_propagating = [] score_weak_propagating = [] for key, value in errors.items(): if 'strong' not in key: # everything except 'strong' score_weak_propagating.append(value) for key, value in errors.items(): if 'weak' not in key: score_strong_propagating.append(value) score_avg_weak_propagating = numpy.nanmean(score_weak_propagating) score_avg_strong_propagating = numpy.nanmean(score_strong_propagating) if score_avg_weak_propagating < score_avg_strong_propagating: cls.strong = False elif score_avg_weak_propagating > score_avg_strong_propagating: cls.strong = True elif score_avg_weak_propagating == score_avg_strong_propagating: cls.strong = None return [score_avg_strong_propagating, score_avg_weak_propagating], errors
def __str__(self): if ZScore_backpropagatingAP.strong: return 'Z_score_avg_STRONG_propagating = %.2f' % self.score elif ZScore_backpropagatingAP.strong is False: return 'Z_score_avg_WEAK_propagating = %.2f' % self.score elif ZScore_backpropagatingAP.strong is None: return 'Z_score_avg = %.2f' % self.score ''' if self.score_l[0] < self.score_l[1]: self.score = self.score_l[0] return 'Z_score_avg_STRONG_propagating = %.2f' % self.score_l[0] elif self.score_l[1] < self.score_l[0]: self.score = self.score_l[1] return 'Z_score_avg_WEAK_propagating = %.2f' % self.score_l[1] elif self.score_l[1] == self.score_l[0]: self.score = self.score_l[0] return 'Z_score_avg = %.2f' % self.score_l[0] '''