changeset 86:f03ec4697a09

corrected discrete distribution
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 19 Apr 2011 02:01:09 -0400
parents 7f1e54234f96
children f234154207d4
files python/utils.py
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/python/utils.py	Mon Apr 18 19:31:53 2011 -0400
+++ b/python/utils.py	Tue Apr 19 02:01:09 2011 -0400
@@ -31,17 +31,17 @@
 class EmpiricalDiscreteDistribution(EmpiricalDistribution):
     '''Class to represent a sample of a distribution for a discrete random variable
     '''
+    from numpy.core.fromnumeric import sum
+
     def __init__(self, categories, counts):
         self.categories = categories
         self.counts = counts
 
     def mean(self):
-        from numpy.core.fromnumeric import sum
         result = [float(x*y) for x,y in zip(self.categories, self.counts)]
         return sum(result)/self.nSamples()
 
     def var(self, mean = None):
-        from numpy.core.fromnumeric import sum
         if not mean:
             m = self.mean()
         else:
@@ -50,6 +50,12 @@
         squares = [float((x-m)*(x-m)*y) for x,y in zip(self.categories, self.counts)]
         return sum(squares)/(self.nSamples()-1)
 
+    def referenceCounts(self, probability):
+        '''probability is a function that returns the probability of the random variable for the category values'''
+        refProba = [probability(c) for c in self.categories]
+        refProba[-1] = 1-sum(refProba[:-1])
+        refCounts = [r*self.nSamples() for r in refProba]
+        return refCounts, refProba
 
 class EmpiricalContinuousDistribution(EmpiricalDistribution):
     '''Class to represent a sample of a distribution for a continuous random variable