View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.math4.legacy.stat.interval;
18  
19  import org.apache.commons.math4.legacy.exception.MathIllegalArgumentException;
20  import org.apache.commons.math4.legacy.exception.util.LocalizedFormats;
21  
22  /**
23   * Represents an interval estimate of a population parameter.
24   *
25   * @since 3.3
26   */
27  public class ConfidenceInterval {
28  
29      /** Lower endpoint of the interval. */
30      private double lowerBound;
31  
32      /** Upper endpoint of the interval. */
33      private double upperBound;
34  
35      /**
36       * The asserted probability that the interval contains the population.
37       * parameter
38       */
39      private double confidenceLevel;
40  
41      /**
42       * Create a confidence interval with the given bounds and confidence level.
43       * <p>
44       * Preconditions:
45       * <ul>
46       * <li>{@code lower} must be strictly less than {@code upper}</li>
47       * <li>{@code confidenceLevel} must be strictly between 0 and 1 (exclusive)</li>
48       * </ul>
49       *
50       * @param lowerBound lower endpoint of the interval
51       * @param upperBound upper endpoint of the interval
52       * @param confidenceLevel coverage probability
53       * @throws MathIllegalArgumentException if the preconditions are not met
54       */
55      public ConfidenceInterval(double lowerBound, double upperBound, double confidenceLevel) {
56          checkParameters(lowerBound, upperBound, confidenceLevel);
57          this.lowerBound = lowerBound;
58          this.upperBound = upperBound;
59          this.confidenceLevel = confidenceLevel;
60      }
61  
62      /**
63       * @return the lower endpoint of the interval
64       */
65      public double getLowerBound() {
66          return lowerBound;
67      }
68  
69      /**
70       * @return the upper endpoint of the interval
71       */
72      public double getUpperBound() {
73          return upperBound;
74      }
75  
76      /**
77       * @return the asserted probability that the interval contains the
78       *         population parameter
79       */
80      public double getConfidenceLevel() {
81          return confidenceLevel;
82      }
83  
84      /**
85       * @return String representation of the confidence interval
86       */
87      @Override
88      public String toString() {
89          return "[" + lowerBound + ";" + upperBound + "] (confidence level:" + confidenceLevel + ")";
90      }
91  
92      /**
93       * Verifies that (lower, upper) is a valid non-empty interval and confidence
94       * is strictly between 0 and 1.
95       *
96       * @param lower lower endpoint
97       * @param upper upper endpoint
98       * @param confidence confidence level
99       */
100     private void checkParameters(double lower, double upper, double confidence) {
101         if (lower >= upper) {
102             throw new MathIllegalArgumentException(LocalizedFormats.LOWER_BOUND_NOT_BELOW_UPPER_BOUND, lower, upper);
103         }
104         if (confidence <= 0 || confidence >= 1) {
105             throw new MathIllegalArgumentException(LocalizedFormats.OUT_OF_BOUNDS_CONFIDENCE_LEVEL, confidence, 0, 1);
106         }
107     }
108 }