Likelihood Ratio Tests and Confidence Intervals

A collection of hypothesis tests and confidence intervals based on the likelihood ratio < https://en.wikipedia.org/wiki/Likelihood-ratio_test>.


LRTesteR Overview

R-CMD-check CRANstatus

LRTesteR provides 42 hypothesis tests and confidence intervals based on the likelihood ratio statistic. Of these, 36 are parametric tests about a specific distribution and 6 are nonparametric tests based on the empirical likelihood. Every test comes in two forms: a one sample version and an ANOVA style version.

Example 1: Test lambda of a poisson distribution

To test lambda, simply call poisson_lambda_test.

library(LRTesteR)

set.seed(1)
x <- rpois(n = 100, lambda = 1)
poisson_lambda_test(x = x, lambda = 1, alternative = "two.sided")
#> Log Likelihood Statistic: 0.01
#> p value: 0.92
#> Confidence Level: 95%
#> Confidence Interval: (0.826, 1.22)

Example 2: Confidence Interval

To get a confidence interval, set conf.level to the desired confidence. The example below gets a two sided 90% confidence interval for the scale of a Cauchy random variable.

set.seed(1)
x <- rcauchy(n = 100, location = 3, scale = 5)
cauchy_scale_test(x = x, scale = 5, alternative = "two.sided", conf.level = .90)
#> Log Likelihood Statistic: 1.21
#> p value: 0.271
#> Confidence Level: 90%
#> Confidence Interval: (4.64, 7.284)

Setting alternative to “less” gets a one sided interval bounded above.

cauchy_scale_test(x = x, scale = 5, alternative = "less", conf.level = .90)
#> Log Likelihood Statistic: 1.1
#> p value: 0.865
#> Confidence Level: 90%
#> Confidence Interval: (0, 6.93)

Setting it to “greater” gets a one sided interval bounded below.

cauchy_scale_test(x = x, scale = 5, alternative = "greater", conf.level = .90)
#> Log Likelihood Statistic: 1.1
#> p value: 0.135
#> Confidence Level: 90%
#> Confidence Interval: (4.878, Inf)

Example 3: One-way Analysis

One-way ANOVA is generalized to all distributions. Here gamma random variables are created with different shapes. The test returns a small p value and a set of confidence intervals that have 95% confidence as a group.

set.seed(1)
x <- c(rgamma(n = 50, shape = 1, rate = 2), rgamma(n = 50, shape = 2, rate = 2), rgamma(n = 50, shape = 3, rate = 2))
fctr <- c(rep(1, 50), rep(2, 50), rep(3, 50))
fctr <- factor(fctr, levels = c("1", "2", "3"))
gamma_shape_one_way_test(x = x, fctr = fctr, conf.level = .95)
#> Log Likelihood Statistic: 17.27
#> p value: 0
#> Confidence Level Of Set: 95%
#> Individual Confidence Level: 98.3%
#> Confidence Interval For Group 1: (0.65, 1.515)
#> Confidence Interval For Group 2: (1.376, 3.376)
#> Confidence Interval For Group 3: (1.691, 4.192)

Example 4: Empirical Likelihood

The empirical likelihood tests do not require any distributional assumptions and work with less data.

set.seed(1)
x <- rnorm(n = 25, mean = 1, sd = 1)
empirical_mu_test(x = x, mu = 1, alternative = "two.sided")
#> Log Likelihood Statistic: 0.73
#> p value: 0.392
#> Confidence Level: 95%
#> Confidence Interval: (0.752, 1.501)

See the Nonparametric Tests vignette for more detail on the empirical likelihood.

The χ2 approximation

As implemented, all functions depend on the asymptotic χ2 approximation. To get a sense of how accurate this approximation is for large samples, the likelihood tests are compared to the exact tests below.

First, X is normally distributed with μ equal to 3 and standard deviation equal to 2. The two intervals for μ are similar.

set.seed(1)
x <- rnorm(n = 500, mean = 3, sd = 2)
exactTest <- t.test(x = x, mu = 2.5, alternative = "two.sided", conf.level = .95)
likelihoodTest <- gaussian_mu_test(x = x, mu = 2.5, alternative = "two.sided", conf.level = .95)
as.numeric(exactTest$conf.int)
#> [1] 2.867461 3.223115
likelihoodTest$conf.int
#> [1] 2.867729 3.222847

The confidence intervals for variance are similar as well.

set.seed(1)
x <- rnorm(n = 500, mean = 3, sd = 2)
sigma2 <- 1.5^2 # Variance, not standard deviation.
exactTest <- EnvStats::varTest(x = x, sigma.squared = sigma2, alternative = "two.sided", conf.level = .95)
likelihoodTest <- gaussian_variance_test(x = x, sigma.squared = sigma2, alternative = "two.sided", conf.level = .95)
as.numeric(exactTest$conf.int)
#> [1] 3.631734 4.655834
likelihoodTest$conf.int
#> [1] 3.620303 4.639384

Switching to p of a binomial random variable, the confidence intervals are similar yet again.

exactTest <- stats::binom.test(x = 250, n = 500, p = .50, alternative = "two.sided", conf.level = .95)
likelihoodTest <- binomial_prob_test(x = 250, size = 500, prob = .50, alternative = "two.sided", conf.level = .95)
as.numeric(exactTest$conf.int)
#> [1] 0.4552856 0.5447144
likelihoodTest$conf.int
#> [1] 0.4562579 0.5437421

When sample size is small, the similarity decreases. When exact methods are available, they are the better option. The utility of the likelihood based approach is its generality: this package provides hypothesis tests and confidence intervals for distributions that otherwise would not have them.

Estimated asymptotic type I and type II error rates can be found here.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("LRTesteR")

2.0.0 by Greg McMahan, 2 months ago


https://github.com/gmcmacran/LRTesteR


Report a bug at https://github.com/gmcmacran/LRTesteR/issues


Browse source code at https://github.com/cran/LRTesteR


Authors: Greg McMahan [aut, cre]


Documentation:   PDF Manual  


GPL-3 license


Imports stats, rlang, statmod, stringr, EnvStats

Suggests covr, testthat, lmtest, knitr, rmarkdown, emplik, emplik2, datasets


See at CRAN