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.inference; 18 19 import java.util.Collection; 20 21 import org.apache.commons.rng.UniformRandomProvider; 22 import org.apache.commons.statistics.distribution.ContinuousDistribution; 23 import org.apache.commons.math4.legacy.exception.ConvergenceException; 24 import org.apache.commons.math4.legacy.exception.DimensionMismatchException; 25 import org.apache.commons.math4.legacy.exception.InsufficientDataException; 26 import org.apache.commons.math4.legacy.exception.MaxCountExceededException; 27 import org.apache.commons.math4.legacy.exception.NoDataException; 28 import org.apache.commons.math4.legacy.exception.NotPositiveException; 29 import org.apache.commons.math4.legacy.exception.NotStrictlyPositiveException; 30 import org.apache.commons.math4.legacy.exception.NullArgumentException; 31 import org.apache.commons.math4.legacy.exception.NumberIsTooSmallException; 32 import org.apache.commons.math4.legacy.exception.OutOfRangeException; 33 import org.apache.commons.math4.legacy.exception.ZeroException; 34 import org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary; 35 36 /** 37 * A collection of static methods to create inference test instances or to 38 * perform inference tests. 39 * 40 * @since 1.1 41 */ 42 public final class InferenceTestUtils { 43 44 /** Singleton TTest instance. */ 45 private static final TTest T_TEST = new TTest(); 46 47 /** Singleton ChiSquareTest instance. */ 48 private static final ChiSquareTest CHI_SQUARE_TEST = new ChiSquareTest(); 49 50 /** Singleton OneWayAnova instance. */ 51 private static final OneWayAnova ONE_WAY_ANANOVA = new OneWayAnova(); 52 53 /** Singleton G-Test instance. */ 54 private static final GTest G_TEST = new GTest(); 55 56 /** Singleton K-S test instance. */ 57 private static final KolmogorovSmirnovTest KS_TEST = new KolmogorovSmirnovTest(); 58 59 /** 60 * Prevent instantiation. 61 */ 62 private InferenceTestUtils() { 63 super(); 64 } 65 66 // CHECKSTYLE: stop JavadocMethodCheck 67 68 /** 69 * @param sample1 array of sample data values 70 * @param sample2 array of sample data values 71 * @return t statistic 72 * @see org.apache.commons.math4.legacy.stat.inference.TTest#homoscedasticT(double[], double[]) 73 */ 74 public static double homoscedasticT(final double[] sample1, final double[] sample2) 75 throws NullArgumentException, NumberIsTooSmallException { 76 return T_TEST.homoscedasticT(sample1, sample2); 77 } 78 79 /** 80 * @param sampleStats1 StatisticalSummary describing data from the first sample 81 * @param sampleStats2 StatisticalSummary describing data from the second sample 82 * @return t statistic 83 * @see org.apache.commons.math4.legacy.stat.inference.TTest#homoscedasticT(org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary) 84 */ 85 public static double homoscedasticT(final StatisticalSummary sampleStats1, 86 final StatisticalSummary sampleStats2) 87 throws NullArgumentException, NumberIsTooSmallException { 88 return T_TEST.homoscedasticT(sampleStats1, sampleStats2); 89 } 90 91 /** 92 * @param sample1 array of sample data values 93 * @param sample2 array of sample data values 94 * @param alpha significance level of the test 95 * @return true if the null hypothesis can be rejected with 96 * confidence 1 - alpha 97 * @see org.apache.commons.math4.legacy.stat.inference.TTest#homoscedasticTTest(double[], double[], double) 98 */ 99 public static boolean homoscedasticTTest(final double[] sample1, final double[] sample2, 100 final double alpha) 101 throws NullArgumentException, NumberIsTooSmallException, 102 OutOfRangeException, MaxCountExceededException { 103 return T_TEST.homoscedasticTTest(sample1, sample2, alpha); 104 } 105 106 /** 107 * @param sample1 array of sample data values 108 * @param sample2 array of sample data values 109 * @return p-value for t-test 110 * @see org.apache.commons.math4.legacy.stat.inference.TTest#homoscedasticTTest(double[], double[]) 111 */ 112 public static double homoscedasticTTest(final double[] sample1, final double[] sample2) 113 throws NullArgumentException, NumberIsTooSmallException, MaxCountExceededException { 114 return T_TEST.homoscedasticTTest(sample1, sample2); 115 } 116 117 /** 118 * @param sampleStats1 StatisticalSummary describing data from the first sample 119 * @param sampleStats2 StatisticalSummary describing data from the second sample 120 * @return p-value for t-test 121 * @see org.apache.commons.math4.legacy.stat.inference.TTest#homoscedasticTTest(org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary) 122 */ 123 public static double homoscedasticTTest(final StatisticalSummary sampleStats1, 124 final StatisticalSummary sampleStats2) 125 throws NullArgumentException, NumberIsTooSmallException, MaxCountExceededException { 126 return T_TEST.homoscedasticTTest(sampleStats1, sampleStats2); 127 } 128 129 /** 130 * @param sample1 array of sample data values 131 * @param sample2 array of sample data values 132 * @return t statistic 133 * @see org.apache.commons.math4.legacy.stat.inference.TTest#pairedT(double[], double[]) 134 */ 135 public static double pairedT(final double[] sample1, final double[] sample2) 136 throws NullArgumentException, NoDataException, 137 DimensionMismatchException, NumberIsTooSmallException { 138 return T_TEST.pairedT(sample1, sample2); 139 } 140 141 /** 142 * @param sample1 array of sample data values 143 * @param sample2 array of sample data values 144 * @param alpha significance level of the test 145 * @return true if the null hypothesis can be rejected with 146 * confidence 1 - alpha 147 * @see org.apache.commons.math4.legacy.stat.inference.TTest#pairedTTest(double[], double[], double) 148 */ 149 public static boolean pairedTTest(final double[] sample1, final double[] sample2, 150 final double alpha) 151 throws NullArgumentException, NoDataException, DimensionMismatchException, 152 NumberIsTooSmallException, OutOfRangeException, MaxCountExceededException { 153 return T_TEST.pairedTTest(sample1, sample2, alpha); 154 } 155 156 /** 157 * @param sample1 array of sample data values 158 * @param sample2 array of sample data values 159 * @return p-value for t-test 160 * @see org.apache.commons.math4.legacy.stat.inference.TTest#pairedTTest(double[], double[]) 161 */ 162 public static double pairedTTest(final double[] sample1, final double[] sample2) 163 throws NullArgumentException, NoDataException, DimensionMismatchException, 164 NumberIsTooSmallException, MaxCountExceededException { 165 return T_TEST.pairedTTest(sample1, sample2); 166 } 167 168 /** 169 * @param mu comparison constant 170 * @param observed array of values 171 * @return t statistic 172 * @see org.apache.commons.math4.legacy.stat.inference.TTest#t(double, double[]) 173 */ 174 public static double t(final double mu, final double[] observed) 175 throws NullArgumentException, NumberIsTooSmallException { 176 return T_TEST.t(mu, observed); 177 } 178 179 /** 180 * @param mu comparison constant 181 * @param sampleStats DescriptiveStatistics holding sample summary statitstics 182 * @return t statistic 183 * @see org.apache.commons.math4.legacy.stat.inference.TTest#t(double, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary) 184 */ 185 public static double t(final double mu, final StatisticalSummary sampleStats) 186 throws NullArgumentException, NumberIsTooSmallException { 187 return T_TEST.t(mu, sampleStats); 188 } 189 190 /** 191 * @param sample1 array of sample data values 192 * @param sample2 array of sample data values 193 * @return t statistic 194 * @see org.apache.commons.math4.legacy.stat.inference.TTest#t(double[], double[]) 195 */ 196 public static double t(final double[] sample1, final double[] sample2) 197 throws NullArgumentException, NumberIsTooSmallException { 198 return T_TEST.t(sample1, sample2); 199 } 200 201 /** 202 * @param sampleStats1 StatisticalSummary describing data from the first sample 203 * @param sampleStats2 StatisticalSummary describing data from the second sample 204 * @return t statistic 205 * @see org.apache.commons.math4.legacy.stat.inference.TTest#t(org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary) 206 */ 207 public static double t(final StatisticalSummary sampleStats1, 208 final StatisticalSummary sampleStats2) 209 throws NullArgumentException, NumberIsTooSmallException { 210 return T_TEST.t(sampleStats1, sampleStats2); 211 } 212 213 /** 214 * @param mu constant value to compare sample mean against 215 * @param sample array of sample data values 216 * @param alpha significance level of the test 217 * @return p-value 218 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(double, double[], double) 219 */ 220 public static boolean tTest(final double mu, final double[] sample, final double alpha) 221 throws NullArgumentException, NumberIsTooSmallException, 222 OutOfRangeException, MaxCountExceededException { 223 return T_TEST.tTest(mu, sample, alpha); 224 } 225 226 /** 227 * @param mu constant value to compare sample mean against 228 * @param sample array of sample data values 229 * @return p-value 230 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(double, double[]) 231 */ 232 public static double tTest(final double mu, final double[] sample) 233 throws NullArgumentException, NumberIsTooSmallException, 234 MaxCountExceededException { 235 return T_TEST.tTest(mu, sample); 236 } 237 238 /** 239 * @param mu constant value to compare sample mean against 240 * @param sampleStats StatisticalSummary describing sample data values 241 * @param alpha significance level of the test 242 * @return p-value 243 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(double, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, double) 244 */ 245 public static boolean tTest(final double mu, final StatisticalSummary sampleStats, 246 final double alpha) 247 throws NullArgumentException, NumberIsTooSmallException, 248 OutOfRangeException, MaxCountExceededException { 249 return T_TEST.tTest(mu, sampleStats, alpha); 250 } 251 252 /** 253 * @param mu constant value to compare sample mean against 254 * @param sampleStats StatisticalSummary describing sample data 255 * @return p-value 256 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(double, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary) 257 */ 258 public static double tTest(final double mu, final StatisticalSummary sampleStats) 259 throws NullArgumentException, NumberIsTooSmallException, 260 MaxCountExceededException { 261 return T_TEST.tTest(mu, sampleStats); 262 } 263 264 /** 265 * @param sample1 array of sample data values 266 * @param sample2 array of sample data values 267 * @param alpha significance level of the test 268 * @return true if the null hypothesis can be rejected with 269 * confidence 1 - alpha 270 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(double[], double[], double) 271 */ 272 public static boolean tTest(final double[] sample1, final double[] sample2, 273 final double alpha) 274 throws NullArgumentException, NumberIsTooSmallException, 275 OutOfRangeException, MaxCountExceededException { 276 return T_TEST.tTest(sample1, sample2, alpha); 277 } 278 279 /** 280 * @param sample1 array of sample data values 281 * @param sample2 array of sample data values 282 * @return p-value for t-test 283 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(double[], double[]) 284 */ 285 public static double tTest(final double[] sample1, final double[] sample2) 286 throws NullArgumentException, NumberIsTooSmallException, 287 MaxCountExceededException { 288 return T_TEST.tTest(sample1, sample2); 289 } 290 291 /** 292 * @param sampleStats1 StatisticalSummary describing sample data values 293 * @param sampleStats2 StatisticalSummary describing sample data values 294 * @param alpha significance level of the test 295 * @return true if the null hypothesis can be rejected with 296 * confidence 1 - alpha 297 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, double) 298 */ 299 public static boolean tTest(final StatisticalSummary sampleStats1, 300 final StatisticalSummary sampleStats2, 301 final double alpha) 302 throws NullArgumentException, NumberIsTooSmallException, 303 OutOfRangeException, MaxCountExceededException { 304 return T_TEST.tTest(sampleStats1, sampleStats2, alpha); 305 } 306 307 /** 308 * @param sampleStats1 StatisticalSummary describing data from the first sample 309 * @param sampleStats2 StatisticalSummary describing data from the second sample 310 * @return p-value for t-test 311 * @see org.apache.commons.math4.legacy.stat.inference.TTest#tTest(org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary, org.apache.commons.math4.legacy.stat.descriptive.StatisticalSummary) 312 */ 313 public static double tTest(final StatisticalSummary sampleStats1, 314 final StatisticalSummary sampleStats2) 315 throws NullArgumentException, NumberIsTooSmallException, 316 MaxCountExceededException { 317 return T_TEST.tTest(sampleStats1, sampleStats2); 318 } 319 320 /** 321 * @param observed array of observed frequency counts 322 * @param expected array of expected frequency counts 323 * @return chiSquare test statistic 324 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquare(double[], long[]) 325 */ 326 public static double chiSquare(final double[] expected, final long[] observed) 327 throws NotPositiveException, NotStrictlyPositiveException, 328 DimensionMismatchException { 329 return CHI_SQUARE_TEST.chiSquare(expected, observed); 330 } 331 332 /** 333 * @param counts array representation of 2-way table 334 * @return chiSquare test statistic 335 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquare(long[][]) 336 */ 337 public static double chiSquare(final long[][] counts) 338 throws NullArgumentException, NotPositiveException, 339 DimensionMismatchException { 340 return CHI_SQUARE_TEST.chiSquare(counts); 341 } 342 343 /** 344 * @param observed array of observed frequency counts 345 * @param expected array of expected frequency counts 346 * @param alpha significance level of the test 347 * @return true iff null hypothesis can be rejected with confidence 348 * 1 - alpha 349 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareTest(double[], long[], double) 350 */ 351 public static boolean chiSquareTest(final double[] expected, final long[] observed, 352 final double alpha) 353 throws NotPositiveException, NotStrictlyPositiveException, 354 DimensionMismatchException, OutOfRangeException, MaxCountExceededException { 355 return CHI_SQUARE_TEST.chiSquareTest(expected, observed, alpha); 356 } 357 358 /** 359 * @param observed array of observed frequency counts 360 * @param expected array of expected frequency counts 361 * @return p-value 362 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareTest(double[], long[]) 363 */ 364 public static double chiSquareTest(final double[] expected, final long[] observed) 365 throws NotPositiveException, NotStrictlyPositiveException, 366 DimensionMismatchException, MaxCountExceededException { 367 return CHI_SQUARE_TEST.chiSquareTest(expected, observed); 368 } 369 370 /** 371 * @param counts array representation of 2-way table 372 * @param alpha significance level of the test 373 * @return true iff null hypothesis can be rejected with confidence 374 * 1 - alpha 375 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareTest(long[][], double) 376 */ 377 public static boolean chiSquareTest(final long[][] counts, final double alpha) 378 throws NullArgumentException, DimensionMismatchException, 379 NotPositiveException, OutOfRangeException, MaxCountExceededException { 380 return CHI_SQUARE_TEST.chiSquareTest(counts, alpha); 381 } 382 383 /** 384 * @param counts array representation of 2-way table 385 * @return p-value 386 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareTest(long[][]) 387 */ 388 public static double chiSquareTest(final long[][] counts) 389 throws NullArgumentException, DimensionMismatchException, 390 NotPositiveException, MaxCountExceededException { 391 return CHI_SQUARE_TEST.chiSquareTest(counts); 392 } 393 394 /** 395 * @param observed1 array of observed frequency counts of the first data set 396 * @param observed2 array of observed frequency counts of the second data set 397 * @return chiSquare test statistic 398 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareDataSetsComparison(long[], long[]) 399 * 400 * @since 1.2 401 */ 402 public static double chiSquareDataSetsComparison(final long[] observed1, 403 final long[] observed2) 404 throws DimensionMismatchException, NotPositiveException, ZeroException { 405 return CHI_SQUARE_TEST.chiSquareDataSetsComparison(observed1, observed2); 406 } 407 408 /** 409 * @param observed1 array of observed frequency counts of the first data set 410 * @param observed2 array of observed frequency counts of the second data set 411 * @return p-value 412 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareTestDataSetsComparison(long[], long[]) 413 * 414 * @since 1.2 415 */ 416 public static double chiSquareTestDataSetsComparison(final long[] observed1, 417 final long[] observed2) 418 throws DimensionMismatchException, NotPositiveException, ZeroException, 419 MaxCountExceededException { 420 return CHI_SQUARE_TEST.chiSquareTestDataSetsComparison(observed1, observed2); 421 } 422 423 /** 424 * @param observed1 array of observed frequency counts of the first data set 425 * @param observed2 array of observed frequency counts of the second data set 426 * @param alpha significance level of the test 427 * @return true iff null hypothesis can be rejected with confidence 428 * 1 - alpha 429 * @see org.apache.commons.math4.legacy.stat.inference.ChiSquareTest#chiSquareTestDataSetsComparison(long[], long[], double) 430 * 431 * @since 1.2 432 */ 433 public static boolean chiSquareTestDataSetsComparison(final long[] observed1, 434 final long[] observed2, 435 final double alpha) 436 throws DimensionMismatchException, NotPositiveException, 437 ZeroException, OutOfRangeException, MaxCountExceededException { 438 return CHI_SQUARE_TEST.chiSquareTestDataSetsComparison(observed1, observed2, alpha); 439 } 440 441 /** 442 * @param categoryData <code>Collection</code> of <code>double[]</code> 443 * arrays each containing data for one category 444 * @return Fvalue 445 * @see org.apache.commons.math4.legacy.stat.inference.OneWayAnova#anovaFValue(Collection) 446 * 447 * @since 1.2 448 */ 449 public static double oneWayAnovaFValue(final Collection<double[]> categoryData) 450 throws NullArgumentException, DimensionMismatchException { 451 return ONE_WAY_ANANOVA.anovaFValue(categoryData); 452 } 453 454 /** 455 * @param categoryData <code>Collection</code> of <code>double[]</code> 456 * arrays each containing data for one category 457 * @return Pvalue 458 * @see org.apache.commons.math4.legacy.stat.inference.OneWayAnova#anovaPValue(Collection) 459 * 460 * @since 1.2 461 */ 462 public static double oneWayAnovaPValue(final Collection<double[]> categoryData) 463 throws NullArgumentException, DimensionMismatchException, 464 ConvergenceException, MaxCountExceededException { 465 return ONE_WAY_ANANOVA.anovaPValue(categoryData); 466 } 467 468 /** 469 * @param categoryData <code>Collection</code> of <code>double[]</code> 470 * arrays each containing data for one category 471 * @param alpha significance level of the test 472 * @return true if the null hypothesis can be rejected with 473 * confidence 1 - alpha 474 * @see org.apache.commons.math4.legacy.stat.inference.OneWayAnova#anovaTest(Collection,double) 475 * 476 * @since 1.2 477 */ 478 public static boolean oneWayAnovaTest(final Collection<double[]> categoryData, 479 final double alpha) 480 throws NullArgumentException, DimensionMismatchException, 481 OutOfRangeException, ConvergenceException, MaxCountExceededException { 482 return ONE_WAY_ANANOVA.anovaTest(categoryData, alpha); 483 } 484 485 /** 486 * @param observed array of observed frequency counts 487 * @param expected array of expected frequency counts 488 * @return G-Test statistic 489 * @see org.apache.commons.math4.legacy.stat.inference.GTest#g(double[], long[]) 490 * @since 3.1 491 */ 492 public static double g(final double[] expected, final long[] observed) 493 throws NotPositiveException, NotStrictlyPositiveException, 494 DimensionMismatchException { 495 return G_TEST.g(expected, observed); 496 } 497 498 /** 499 * @param observed array of observed frequency counts 500 * @param expected array of expected frequency counts 501 * @return p-value 502 * @see org.apache.commons.math4.legacy.stat.inference.GTest#gTest( double[], long[] ) 503 * @since 3.1 504 */ 505 public static double gTest(final double[] expected, final long[] observed) 506 throws NotPositiveException, NotStrictlyPositiveException, 507 DimensionMismatchException, MaxCountExceededException { 508 return G_TEST.gTest(expected, observed); 509 } 510 511 /** 512 * @param observed array of observed frequency counts 513 * @param expected array of expected frequency counts 514 * @return p-value 515 * @see org.apache.commons.math4.legacy.stat.inference.GTest#gTestIntrinsic(double[], long[] ) 516 * @since 3.1 517 */ 518 public static double gTestIntrinsic(final double[] expected, final long[] observed) 519 throws NotPositiveException, NotStrictlyPositiveException, 520 DimensionMismatchException, MaxCountExceededException { 521 return G_TEST.gTestIntrinsic(expected, observed); 522 } 523 524 /** 525 * @param observed array of observed frequency counts 526 * @param expected array of expected frequency counts 527 * @param alpha significance level of the test 528 * @return true iff null hypothesis can be rejected with confidence 1 - 529 * alpha 530 * @see org.apache.commons.math4.legacy.stat.inference.GTest#gTest( double[],long[],double) 531 * @since 3.1 532 */ 533 public static boolean gTest(final double[] expected, final long[] observed, 534 final double alpha) 535 throws NotPositiveException, NotStrictlyPositiveException, 536 DimensionMismatchException, OutOfRangeException, MaxCountExceededException { 537 return G_TEST.gTest(expected, observed, alpha); 538 } 539 540 /** 541 * @param observed1 array of observed frequency counts of the first data set 542 * @param observed2 array of observed frequency counts of the second data 543 * set 544 * @return G-Test statistic 545 * @see org.apache.commons.math4.legacy.stat.inference.GTest#gDataSetsComparison(long[], long[]) 546 * @since 3.1 547 */ 548 public static double gDataSetsComparison(final long[] observed1, 549 final long[] observed2) 550 throws DimensionMismatchException, NotPositiveException, ZeroException { 551 return G_TEST.gDataSetsComparison(observed1, observed2); 552 } 553 554 /** 555 * @param k11 number of times the two events occurred together (AB) 556 * @param k12 number of times the second event occurred WITHOUT the 557 * first event (notA,B) 558 * @param k21 number of times the first event occurred WITHOUT the 559 * second event (A, notB) 560 * @param k22 number of times something else occurred (i.e. was neither 561 * of these events (notA, notB) 562 * @return root log-likelihood ratio 563 * @see org.apache.commons.math4.legacy.stat.inference.GTest#rootLogLikelihoodRatio(long, long, long, long) 564 * @since 3.1 565 */ 566 public static double rootLogLikelihoodRatio(final long k11, final long k12, final long k21, final long k22) 567 throws DimensionMismatchException, NotPositiveException, ZeroException { 568 return G_TEST.rootLogLikelihoodRatio(k11, k12, k21, k22); 569 } 570 571 572 /** 573 * @param observed1 array of observed frequency counts of the first data set 574 * @param observed2 array of observed frequency counts of the second data 575 * set 576 * @return p-value 577 * @see org.apache.commons.math4.legacy.stat.inference.GTest#gTestDataSetsComparison(long[], long[]) 578 * @since 3.1 579 */ 580 public static double gTestDataSetsComparison(final long[] observed1, 581 final long[] observed2) 582 throws DimensionMismatchException, NotPositiveException, ZeroException, 583 MaxCountExceededException { 584 return G_TEST.gTestDataSetsComparison(observed1, observed2); 585 } 586 587 /** 588 * @param observed1 array of observed frequency counts of the first data set 589 * @param observed2 array of observed frequency counts of the second data 590 * set 591 * @param alpha significance level of the test 592 * @return true iff null hypothesis can be rejected with confidence 1 - 593 * alpha 594 * @see org.apache.commons.math4.legacy.stat.inference.GTest#gTestDataSetsComparison(long[],long[],double) 595 * @since 3.1 596 */ 597 public static boolean gTestDataSetsComparison(final long[] observed1, 598 final long[] observed2, 599 final double alpha) 600 throws DimensionMismatchException, NotPositiveException, 601 ZeroException, OutOfRangeException, MaxCountExceededException { 602 return G_TEST.gTestDataSetsComparison(observed1, observed2, alpha); 603 } 604 605 /** 606 * @param dist reference distribution 607 * @param data sample being evaluated 608 * @return Kolmogorov-Smirnov statistic \(D_n\) 609 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovStatistic(ContinuousDistribution, double[]) 610 * @since 3.3 611 */ 612 public static double kolmogorovSmirnovStatistic(ContinuousDistribution dist, double[] data) 613 throws InsufficientDataException, NullArgumentException { 614 return KS_TEST.kolmogorovSmirnovStatistic(dist, data); 615 } 616 617 /** 618 * @param dist reference distribution 619 * @param data sample being being evaluated 620 * @return the p-value associated with the null hypothesis that {@code data} is a sample from 621 * {@code distribution} 622 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovTest(ContinuousDistribution, double[]) 623 * @since 3.3 624 */ 625 public static double kolmogorovSmirnovTest(ContinuousDistribution dist, double[] data) 626 throws InsufficientDataException, NullArgumentException { 627 return KS_TEST.kolmogorovSmirnovTest(dist, data); 628 } 629 630 /** 631 * @param dist reference distribution 632 * @param data sample being being evaluated 633 * @param strict whether or not to force exact computation of the p-value 634 * @return the p-value associated with the null hypothesis that {@code data} is a sample from 635 * {@code distribution} 636 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovTest(ContinuousDistribution, double[], boolean) 637 * @since 3.3 638 */ 639 public static double kolmogorovSmirnovTest(ContinuousDistribution dist, double[] data, boolean strict) 640 throws InsufficientDataException, NullArgumentException { 641 return KS_TEST.kolmogorovSmirnovTest(dist, data, strict); 642 } 643 644 /** 645 * @param dist reference distribution 646 * @param data sample being being evaluated 647 * @param alpha significance level of the test 648 * @return true iff the null hypothesis that {@code data} is a sample from {@code distribution} 649 * can be rejected with confidence 1 - {@code alpha} 650 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovTest(ContinuousDistribution, double[], double) 651 * @since 3.3 652 */ 653 public static boolean kolmogorovSmirnovTest(ContinuousDistribution dist, double[] data, double alpha) 654 throws InsufficientDataException, NullArgumentException { 655 return KS_TEST.kolmogorovSmirnovTest(dist, data, alpha); 656 } 657 658 /** 659 * @param x first sample 660 * @param y second sample 661 * @return test statistic \(D_{n,m}\) used to evaluate the null hypothesis that {@code x} and 662 * {@code y} represent samples from the same underlying distribution 663 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovStatistic(double[], double[]) 664 * @since 3.3 665 */ 666 public static double kolmogorovSmirnovStatistic(double[] x, double[] y) 667 throws InsufficientDataException, NullArgumentException { 668 return KS_TEST.kolmogorovSmirnovStatistic(x, y); 669 } 670 671 /** 672 * @param x first sample dataset 673 * @param y second sample dataset 674 * @return p-value associated with the null hypothesis that {@code x} and {@code y} represent 675 * samples from the same distribution 676 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovTest(double[], double[]) 677 * @since 3.3 678 */ 679 public static double kolmogorovSmirnovTest(double[] x, double[] y) 680 throws InsufficientDataException, NullArgumentException { 681 return KS_TEST.kolmogorovSmirnovTest(x, y); 682 } 683 684 /** 685 * @param x first sample dataset. 686 * @param y second sample dataset. 687 * @param strict whether or not the probability to compute is expressed as 688 * a strict inequality (ignored for large samples). 689 * @return p-value associated with the null hypothesis that {@code x} and 690 * {@code y} represent samples from the same distribution. 691 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#kolmogorovSmirnovTest(double[], double[], boolean) 692 * @since 3.3 693 */ 694 public static double kolmogorovSmirnovTest(double[] x, double[] y, boolean strict) 695 throws InsufficientDataException, NullArgumentException { 696 return KS_TEST.kolmogorovSmirnovTest(x, y, strict); 697 } 698 699 /** 700 * @param d D-statistic value 701 * @param n first sample size 702 * @param m second sample size 703 * @param strict whether or not the probability to compute is expressed as a strict inequality 704 * @return probability that a randomly selected m-n partition of m + n generates \(D_{n,m}\) 705 * greater than (resp. greater than or equal to) {@code d} 706 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#exactP(double, int, int, boolean) 707 * @since 3.3 708 */ 709 public static double exactP(double d, int m, int n, boolean strict) { 710 return KS_TEST.exactP(d, n, m, strict); 711 } 712 713 /** 714 * @param d D-statistic value 715 * @param n first sample size 716 * @param m second sample size 717 * @return approximate probability that a randomly selected m-n partition of m + n generates 718 * \(D_{n,m}\) greater than {@code d} 719 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#approximateP(double, int, int) 720 * @since 3.3 721 */ 722 public static double approximateP(double d, int n, int m) { 723 return KS_TEST.approximateP(d, n, m); 724 } 725 726 /** 727 * @param d D-statistic value 728 * @param n first sample size 729 * @param m second sample size 730 * @param iterations number of random partitions to generate 731 * @param strict whether or not the probability to compute is expressed as a strict inequality 732 * @param rng RNG used for generating the partitions. 733 * @return proportion of randomly generated m-n partitions of m + n that result in \(D_{n,m}\) 734 * greater than (resp. greater than or equal to) {@code d} 735 * @see org.apache.commons.math4.legacy.stat.inference.KolmogorovSmirnovTest#monteCarloP(double,int,int,boolean,int,UniformRandomProvider) 736 * @since 3.3 737 */ 738 public static double monteCarloP(double d, int n, int m, boolean strict, int iterations, UniformRandomProvider rng) { 739 return KS_TEST.monteCarloP(d, n, m, strict, iterations, rng); 740 } 741 742 743 // CHECKSTYLE: resume JavadocMethodCheck 744 }