def argueWithoutSample(sample, conclusion): """ Builds an argument for conclusion (assumed to be passed in as a string, NOT a full conclusion (so no parameters can be attached to the conclusion, currently...), but this may change), after removing the given sample from the dataset. """ #first let's check that we need to remove samples arg = engine.buildArgument(conclusions.Conclusion(conclusion)) name = "can argue for '" + conclusion + "' without sample " + str(sample) if arg.getSingleConfidence().isStrongly(True): return SimResult(-arg.getSingleConfidence(), name, "good argument for '" + conclusion + "' before removing any samples", arg) savedSamples = samples.sampleList[:] samples.sampleList.remove(sample) arg = engine.buildArgument(conclusions.Conclusion(conclusion)) samples.sampleList = savedSamples return SimResult(arg.getSingleConfidence(), name, (arg.getSingleConfidence().isTrue() and 'valid' or 'invalid') + " argument for " + conclusion + " without " + str(sample), arg)
def centralAgreement(sample): """ Checks whether we can remove samples at the edges to get a reasonably large group with a single central tendency. Should pay attention to whether removed samples have similar ages to each other or not Also, this should be run once and the results saved, instead of being run again for every single sample... """ #first let's check that we need to remove samples arg = engine.buildArgument(conclusions.Conclusion("no process")) name = "removal of youngest and oldest samples allows argument for 'no process'" if arg.getSingleConfidence().isStrongly(True): return SimResult(-arg.getSingleConfidence(), name, "good argument for 'no process' before removing any samples", arg) savedSamples = samples.sampleList[:] samples.sampleList.sort(cmp = lambda x, y: cmp(x[__getAge()], y[__getAge()])) while len(samples.sampleList) > 0: mean = calculations.calcMean(__getAge()) younger = mean - samples.sampleList[0][__getAge()] older = samples.sampleList[-1][__getAge()] - mean if younger > older: del samples.sampleList[0] else: del samples.sampleList[-1] arg = engine.buildArgument(conclusions.Conclusion("no process")) if arg.getSingleConfidence().isStrongly(True): break if sample in samples.sampleList: res = SimResult(confidence.Confidence(confidence.Applic.cf, confidence.Validity.sound), name, str(sample) + " does not need to be removed to have good argument for 'no process'", arg) samples.sampleList = savedSamples return res reduction = len(samples.sampleList) / float(len(savedSamples)) #removed = len(savedSamples) - len(samples.sampleList) samples.sampleList = savedSamples conf = __getConfidence((.2, .35, .6, .8, .9), reduction, confidence.Validity.prob) #print reduction, conf #oldest n samples appear to be outliers return SimResult(conf, name, "removed " + str(100 - (reduction * 100)) + "% of samples before finding a good argument for 'no process'", arg)
def run(self, env): """ So this is different because we don't call some function and then do something with the result. Instead, we need to call the engine and construct a new, complete argument for the conclusion listed in name. """ self._useEnv(env) self.argument = engine.buildArgument(conclusions.Conclusion(self.name, self.useParams)) self.confidence = self.argument.getSingleConfidence()
def quantizedInheritance(): """ Checks whether we can remove only a small percentage of samples from the oldest end of the sample set and, in so doing, get a successful "no process" argument. """ #first let's check that we need to remove samples arg = engine.buildArgument(conclusions.Conclusion("no process")) name = "removal of groups of older samples allows argument for 'no process'" if arg.getSingleConfidence().isProbably(True): return SimResult(-arg.getSingleConfidence(), name, "good argument for 'no process' before removing any samples", arg) savedSamples = samples.sampleList[:] samples.sampleList.sort(cmp = lambda x, y: cmp(x[__getAge()], y[__getAge()])) while len(samples.sampleList) > 0: curMax = samples.sampleList[-1][__getAge()] - \ samples.sampleList[-1][__getAge() + ' uncertainty'] #delete in chunks, not one at a time samples.sampleList = [sample for sample in samples.sampleList if sample[__getAge()] < curMax] arg = engine.buildArgument(conclusions.Conclusion("no process")) if arg.getSingleConfidence().isProbably(True): break reduction = len(samples.sampleList) / float(len(savedSamples)) #removed = len(savedSamples) - len(samples.sampleList) samples.sampleList = savedSamples conf = __getConfidence((.1, .2, .4, .65, .80), reduction, confidence.Validity.accept) #oldest n samples appear to be outliers return SimResult(conf, name, "removed " + str(100 - (reduction * 100)) + "% of samples before finding a good argument for 'no process'", arg)