Calculates confidence intervals for the variance. Available approachs are the classical one using the ChiSquare distribution, a more robust version proposed by Bonett and the bootstrap options available in the package boot.

VarCI(x, method = c("classic", "bonett", "norm", "basic", "stud", "perc", "bca"),
      conf.level = 0.95, sides = c("two.sided", "left", "right"),
      na.rm = FALSE, R = 999)

Arguments

x

a (non-empty) numeric vector of data values.

method

vector of character strings representing the type of intervals required. The value should be any subset of the values "classic", "bonett", "norm", "basic", "stud", "perc", "bca". See boot.ci.

conf.level

confidence level of the interval.

sides

a character string specifying the side of the confidence interval, must be one of "two.sided" (default), "left" or "right". You can specify just the initial letter. "left" would be analogue to a hypothesis of "greater" in a t.test.

na.rm

logical. Should missing values be removed? Defaults to FALSE.

R

number of bootstrap replicates. Usually this will be a single positive integer. For importance resampling, some resamples may use one set of weights and others use a different set of weights. In this case R would be a vector of integers where each component gives the number of resamples from each of the rows of weights. See boot.

Value

a numeric vector with 3 elements:

var

variance

lwr.ci

lower bound of the confidence interval

upr.ci

upper bound of the confidence interval

Details

The confidence interval for the variance is very sensitive to non-normality in the data. Bonett (2006) has proposed an interval that is nearly exact when the data is normally distributed and provides good performance for moderately non-normal data. See the references for the details.

References

Bonett (2006) Approximate Confidence Interval for Standard Deviation of Nonnormal Distributions, Computational Statistics and Data Analysis, Vol. 50, pp. 775 - 782.
https://www.itl.nist.gov/div898/software/dataplot/refman1/auxillar/sdconfli.htm (might be outdated)

Author

Andri Signorell <andri@signorell.net>

See also

Examples

VarCI(d.pizza$price, na.rm=TRUE)
#>    var lwr.ci upr.ci 
#>    468    433    508 
VarCI(d.pizza$price, conf.level=0.99, na.rm=TRUE)
#>    var lwr.ci upr.ci 
#>    468    422    521 

x <- c(14.816, 14.863, 14.814, 14.998, 14.965, 14.824, 14.884, 14.838, 14.916,
       15.021, 14.874, 14.856, 14.860, 14.772, 14.980, 14.919)
VarCI(x, conf.level=0.9)
#>     var  lwr.ci  upr.ci 
#> 0.00529 0.00317 0.01092 

# and for the standard deviation
sqrt(VarCI(x, conf.level=0.9))
#>    var lwr.ci upr.ci 
#> 0.0727 0.0563 0.1045 


# from Bonett's paper
# expected results:
# ------------------------------------
#  conf.lvl       sd      lci      uci
# ------------------------------------
#      90.0   0.5168   0.3592   0.9359
#      95.0   0.5168   0.3263   1.0841
#      99.0   0.5168   0.2607   1.5109

p <- c(15.83, 16.01, 16.24, 16.42, 15.33, 15.44, 16.88, 16.31)
sqrt(VarCI(p, method="bonett", conf.level=0.9))
#>    var lwr.ci upr.ci 
#>  0.517  0.359  0.936 
sqrt(VarCI(p, method="bonett"))
#>    var lwr.ci upr.ci 
#>  0.517  0.326  1.084 
sqrt(VarCI(p, method="bonett", conf.level=0.99))
#>    var lwr.ci upr.ci 
#>  0.517  0.261  1.511 

# some bootstrap intervals
VarCI(x, method="norm")
#>     var  lwr.ci  upr.ci 
#> 0.00529 0.00307 0.00825 
VarCI(x, method="perc")
#>     var  lwr.ci  upr.ci 
#> 0.00529 0.00226 0.00792 
VarCI(x, method="bca")
#>     var  lwr.ci  upr.ci 
#> 0.00529 0.00317 0.00886