-3

对我来说一个挑战是使用 Java 获得泊松分布分位数(一个整数)。

由于我是Java新手,所以我搜索了很多并编写了一些代码,不确定这是否正确,有人可以帮助我吗?

根据泊松分布pdf函数泊松分布

(pr = k) = pow((lambda), k) * pow(e, (-lambda)) / k!

其中 k 是出现次数, lambda 是分布平均值(预期出现次数)。

我的代码:

// quantile function calculate pdf for each i, sum it until it hits probability threshold pr; finally output i as distribution quantile; it calls the second function which aims to obtain i!;

private int quantile(double pr, double mean){ 

    int n = (long) 3 * mean;  
    double prev = 0;

    for (int i = 0; i < n; i++) {

    double curr = math.pow(mean, i) * math.exp(-mean) / factorialLoop(i);

    prev = curr; 
    curr = prev + curr; 

    if (curr < pr) {
        continue;
    }

    else {
        break;
    }
    }

    return i;
}

// The following function will return result for i!;

private static long factorialLoop(int n) {

if (n < 0) {
    return -1;
    }

    if (n == 0) {
    return 1;
    }

long result = 1;
for (int i = n; i > 0; i--) {
    result *= i;
}

return result;
}

代码会返回 i(泊松分布的分位数输出)吗?谢谢!

4

1 回答 1

0
// Poisson Distribution Quantile function: pr and mean are two parameters. Aims to return i for the quantile function as output。
// pr and mean are two parameters; pr is probability threshold and mean is expected occurence. 

private int quantile(double pr, double mean){ 

    int n = (long) 3 * mean;  
    double prev = 0;

    for (int i = 0; i < n; i++) {

        double curr = math.pow(mean, i) * math.exp(-mean) / factorialRecursive(i);

        double summ = curr + prev;

        if (summ >= pr) {
            break;
        }

        prev = summ; 

        }

    return i;

}


private static long factorialRecursive(int n) {

    if (n < 0) {
        return -1;
    }

    if (n == 0) {
        return 1;
    }


    if (n < 2)
        return n * 1;

    return n * factorialRecursive(n - 1);
}

根据泊松分布 pdf 函数(p = k) = (lambda) k * e (-lambda) / k!

k 是发生率,lambda 是分布均值。

于 2018-09-04T02:22:04.513 回答