# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #------------------------------------------------------------------------------ # R source file to validate ChiSquare tests in # org.apache.commons.math.stat.inference.ChiSquareTestTest # # To run the test, install R, put this file and testFunctions # into the same directory, launch R from this directory and then enter # source("") # # R functions used #chisq.test(x, y = NULL, correct = TRUE, # p = rep(1/length(x), length(x)), # simulate.p.value = FALSE, B = 2000) #------------------------------------------------------------------------------ tol <- 1E-9 # error tolerance for tests #------------------------------------------------------------------------------ # Function definitions source("testFunctions") # utility test functions verifyTable <- function(counts, expectedP, expectedStat, tol, desc) { results <- chisq.test(counts) if (assertEquals(expectedP, results$p.value, tol, "p-value")) { displayPadded(c(desc," p-value test"), SUCCEEDED, WIDTH) } else { displayPadded(c(desc, " p-value test"), FAILED, WIDTH) } if (assertEquals(expectedStat, results$statistic, tol, "ChiSquare Statistic")) { displayPadded(c(desc, " chi-square statistic test"), SUCCEEDED, WIDTH) } else { displayPadded(c(desc, " chi-square statistic test"), FAILED, WIDTH) } } verifyHomogeneity <- function(obs, exp, expectedP, expectedStat, tol, desc) { results <- chisq.test(obs,p=exp,rescale.p=TRUE) chi <- results$statistic p <- results$p.value if (assertEquals(expectedP, p, tol, "p-value")) { displayPadded(c(desc, " p-value test"), SUCCEEDED, WIDTH) } else { displayPadded(c(desc, " p-value test"), FAILED, WIDTH) } if (assertEquals(expectedStat, chi, tol, "ChiSquare Statistic")) { displayPadded(c(desc, " chi-square statistic test"), SUCCEEDED, WIDTH) } else { displayPadded(c(desc, " chi-square statistic test"), FAILED, WIDTH) } } cat("ChiSquareTest test cases\n") observed <- c(10, 9, 11) expected <- c(10, 10, 10) verifyHomogeneity(observed, expected, 0.904837418036, 0.2, tol, "testChiSquare1") observed <- c(500, 623, 72, 70, 31) expected <- c(485, 541, 82, 61, 37) verifyHomogeneity(observed, expected, 0.06051952647453607, 9.023307936427388, tol, "testChiSquare2") observed <- c(2372383, 584222, 257170, 17750155, 7903832, 489265, 209628, 393899) expected <- c(3389119.5, 649136.6, 285745.4, 25357364.76, 11291189.78, 543628.0, 232921.0, 437665.75) verifyHomogeneity(observed, expected, 0, 114875.90421929007, tol, "testChiSquareLargeTestStatistic") counts <- matrix(c(40, 22, 43, 91, 21, 28, 60, 10, 22), nc = 3); verifyTable(counts, 0.000144751460134, 22.709027688, tol, "testChiSquareIndependence1") counts <- matrix(c(10, 15, 30, 40, 60, 90), nc = 3); verifyTable(counts, 0.918987499852, 0.168965517241, tol, "testChiSquareIndependence2") counts <- matrix(c(40, 0, 4, 91, 1, 2, 60, 2, 0), nc = 3); verifyTable(counts, 0.0462835770603, 9.67444662263, tol, "testChiSquareZeroCount") displayDashes(WIDTH)