【问题标题】:Java calculate confidence intervalJava计算置信区间
【发布时间】:2015-08-01 03:53:38
【问题描述】:

我正在寻找一些采用或不采用参数来计算置信区间的方法。
我不想要 apache 方法, 只是一个简单的方法或 som 类型的代码来执行此操作。

【问题讨论】:

  • 置信区间是什么意思
  • 展示你的作品——你想做什么,你尝试了什么,你不明白的具体是什么?
  • 不要因投反对票而气馁,慢慢来,为您面临的问题写一个适当的描述,并举例说明

标签: java confidence-interval


【解决方案1】:

我的知识是有限的,它基本上可以归结为针对一组预期的答案 (https://www.hackerrank.com/challenges/stat-warmup) 完成在线任务。

但是,据我阅读,给定答案中存在错误,我想更正这些。 我的来源几乎是维基百科https://en.wikipedia.org/wiki/Confidence_interval#Basic_Steps

/**
 *
 * @return int[]{lower, upper}, i.e. int array with Lower and Upper Boundary of the 95% Confidence Interval for the given numbers
 */
private static double[] calculateLowerUpperConfidenceBoundary95Percent(int[] givenNumbers) {

    // calculate the mean value (= average)
    double sum = 0.0;
    for (int num : givenNumbers) {
        sum += num;
    }
    double mean = sum / givenNumbers.length;

    // calculate standard deviation
    double squaredDifferenceSum = 0.0;
    for (int num : givenNumbers) {
        squaredDifferenceSum += (num - mean) * (num - mean);
    }
    double variance = squaredDifferenceSum / givenNumbers.length;
    double standardDeviation = Math.sqrt(variance);

    // value for 95% confidence interval, source: https://en.wikipedia.org/wiki/Confidence_interval#Basic_Steps
    double confidenceLevel = 1.96;
    double temp = confidenceLevel * standardDeviation / Math.sqrt(givenNumbers.length);
    return new double[]{mean - temp, mean + temp};
}

【讨论】:

【解决方案2】:

给你,这是计算置信区间的代码

/**
 *
 * @author alaaabuzaghleh
 */
public class TestCI {
    public static void main(String[] args) { 
        int maximumNumber = 100000;
        int num = 0;
        double[] data = new double[maximumNumber];

        // first pass: read in data, compute sample mean
        double dataSum = 0.0;
        while (num<maximumNumber) {
            data[num] = num*10;
            dataSum  += data[num];
            num++;
        }
        double ave = dataSum / num;


        double variance1 = 0.0;
        for (int i = 0; i < num; i++) {
            variance1 += (data[i] - ave) * (data[i] - ave);
        }
        double variance = variance1 / (num - 1);
        double standardDaviation= Math.sqrt(variance);
        double lower = ave - 1.96 * standardDaviation;
        double higher = ave + 1.96 * standardDaviation;

        // print results
        System.out.println("average          = " + ave);
        System.out.println("sample variance  = " + variance);
        System.out.println("sample standard daviation    = " + standardDaviation);
        System.out.println("approximate confidence interval");
        System.out.println("[ " + lower + ", " + higher + " ]");
}
}

【讨论】:

  • 据我所知,这个计算是错误的——应该是ave + 1.96 * standardDeviation / Math.sqrt(num - 1) resp ave - 1.96 * standardDeviation / Math.sqrt(num - 1)。此外,令人困惑的是,num 似乎比上述代码中的样本大小大一……而且拼写错误也无助于读者的理解!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2022-01-22
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多