Example #1
0
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)
Example #2
0
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)
Example #3
0
 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()
Example #4
0
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)