DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=36215>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=36215

           Summary: [Math] HypergeometricDistributionImpl
                    cumulativeProbability calculation overflown
           Product: Commons
           Version: Nightly Builds
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Math
        AssignedTo: [email protected]
        ReportedBy: [EMAIL PROTECTED]


Hi, for all that might use this class:

several things I found when using this class to calculate the
cumulative probability. I attached my code FYI. three things:

1. when I used my code to calculate the cumulativeProbability(50) of
5000 200 100 (Population size, number of successes, sample size),
result was greater than 1 (1.0000000000134985);
2. when I calculated cumulativeProbability(50) and
cumulativeProbability(51) for the distribution 5000 200 100, I got the
same results, but it should have been different;
2. the cumulativeProbability(x) returns "for this distribution, X,
P(X<=x)", but most of the time (at least in my case) what I care about
is the upper tail (X>=x). based on the above findings, I can't simply
use 1-cumulativeProbability(x-1) to get what I want.

here's what I think might be related to the problem: since the
cumulativeProbability is calculating the lower tail (X<=x), a
distribution like above often has this probability very close to 1;
thus it's difficult to record a number that = 1-1E-50 'cause all you
can do is record sth like 0.9999..... and further digits will be
rounded. to avoid this, I suggest adding a new function to calculate
upper tail or change this to calculate x in a range like (n<=x<=m), in
addition to fix the overflow of the current function.

thank you for your patience to get here. I'm a newbie but I've asked
Java experts in our lab about this. looking into the source code really
isn't up for me......hope someone can fix it, :) BTW I'm using cygwin under
WinXP pro SP2, with Java SDK 1.4.2_09 build b05, and the commons-math I used is
both the 1.0 and the nightly build of 8-15-05. 

the code:
-------------------
import org.apache.commons.math.distribution.HypergeometricDistributionImpl;

class HyperGeometricProbability {

    public static void main(String args[]) {

        if(args.length != 4) {
            
            System.out.println("USAGE: java HyperGeometricProbabilityCalc 
[population]
[numsuccess] [sample] [overlap]");
            
        }
        else {
            
            String population = args[0];
            String numsuccess = args[1];
            String sample = args[2];
            String overlap = args[3];
            
            int populationI = Integer.parseInt(population);
            int numsuccessI = Integer.parseInt(numsuccess);
            int sampleI = Integer.parseInt(sample);
            int overlapI = Integer.parseInt(overlap);
            
            HypergeometricDistributionImpl hDist = new
HypergeometricDistributionImpl(populationI, numsuccessI, sampleI);
            
            double raw_probability = 1.0;
            double cumPro = 1.0;
            double real_cumPro = 1.0;

            try {
                if (0 < overlapI && 0 < numsuccessI && 0 < sampleI) {
                    raw_probability = hDist.probability(overlapI);
                    cumPro = hDist.cumulativeProbability(overlapI - 1.0);
                    real_cumPro = 1.0 - cumPro;
                        System.out.println("cumulative probability=" + cumPro + 
"\t" + "raw
probability=" + raw_probability + "\t" + "real cumulative probability=" + "\t" +
real_cumPro);
                    }
            }
            catch (Exception e) {
                System.err.println("BAD PROBABILITY CALCULATION");
            }
            
        }
        
    }
    
}
----------------------------------

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to