Computes Levene's test for homogeneity of variance across groups.
LeveneTest(x, ...)
# S3 method for class 'formula'
LeveneTest(formula, data, subset, na.action, ...)
# Default S3 method
LeveneTest(x, g, center = median, ...)
response variable for the default method, or a lm
or
formula
object. If y
is a linear-model object or a formula,
the variables on the right-hand-side of the model must all be factors and
must be completely crossed.
arguments to be passed down, e.g., data
for the
formula
and lm
methods; can also be used to pass arguments to
the function given by center
(e.g., center=mean
and
trim=0.1
specify the 10% trimmed mean).
a formula of the form lhs ~ rhs
where lhs
gives
the data values and rhs
the corresponding groups.
an optional matrix or data frame (or similar: see
model.frame
) containing the variables in the formula
formula
. By default the variables are taken from
environment(formula)
.
an optional vector specifying a subset of observations to be used.
a function which indicates what should happen
when the data contain NAs. Defaults to getOption("na.action")
.
factor defining groups.
The name of a function to compute the center of each group;
mean
gives the original Levene's test; the default, median
,
provides a more robust test (Brown-Forsythe-Test).
returns an object meant to be printed showing the results of the test.
Let \(X_ij\) be the jth observation of X for the ith group. Let \(Z_ij = |X_ij - X_i|\), where \(X_i\) is the mean of X in the ith group. Levene’s test statistic is $$ W_0 = \frac{ \sum_i n_i (\bar{Z}_i - \bar{Z})^2 / (g - 1) }{ \sum_i \sum_j (Z_{ij} - \bar{Z}_i)^2 / \sum_i (n_i - 1) } $$ where \(n_i\) is the number of observations in group i and g is the number of groups.
This function is rewritten using common R standards based on car::leveneTest() using the same calculation logic.
Fox, J. (2008) Applied Regression Analysis and Generalized Linear Models, Second Edition. Sage.
Fox, J. and Weisberg, S. (2011) An R Companion to Applied Regression, Second Edition, Sage.
fligner.test
for a rank-based (nonparametric)
\(k\)-sample test for homogeneity of variances; mood.test
for another rank-based two-sample test for a difference in scale parameters;
var.test
and bartlett.test
for parametric tests
for the homogeneity in variance.
ansari_test
in package coin for exact
and approximate conditional p-values for the Ansari-Bradley test, as
well as different methods for handling ties.
## example from ansari.test:
## Hollander & Wolfe (1973, p. 86f):
## Serum iron determination using Hyland control sera
serum <- ToLong(data.frame(
ramsay=c(111, 107, 100, 99, 102, 106, 109, 108, 104, 99,
101, 96, 97, 102, 107, 113, 116, 113, 110, 98),
jung.parekh=c(107, 108, 106, 98, 105, 103, 110, 105, 104,
100, 96, 108, 103, 104, 114, 114, 113, 108, 106, 99)
))
LeveneTest(x ~ grp, data=serum)
#>
#> Levene's Test for Homogeneity of Variance (center = median)
#>
#> data: x by grp
#> F = 1.7865, num df = 1, denom df = 38, p-value = 0.1893
#>
LeveneTest(x ~ grp, data=serum, center=mean)
#>
#> Levene's Test for Homogeneity of Variance (center = mean)
#>
#> data: x by grp
#> F = 1.7879, num df = 1, denom df = 38, p-value = 0.1891
#>
LeveneTest(x ~ grp, data=serum, center=mean, trim=0.1)
#>
#> Levene's Test for Homogeneity of Variance (center = mean(trim=0.1))
#>
#> data: x by grp
#> F = 1.7854, num df = 1, denom df = 38, p-value = 0.1894
#>
LeveneTest( c(rnorm(10), rnorm(10, 0, 2)), factor(rep(c("A","B"), each=10)) )
#>
#> Levene's Test for Homogeneity of Variance (center = median)
#>
#> data: c(rnorm(10), rnorm(10, 0, 2)) and factor(rep(c("A", "B"), each = 10))
#> F = 0.14748, num df = 1, denom df = 18, p-value = 0.7055
#>
LeveneTest(Ozone ~ Month, data = airquality)
#>
#> Levene's Test for Homogeneity of Variance (center = median)
#>
#> data: Ozone by Month
#> F = 3.9558, num df = 4, denom df = 111, p-value = 0.004863
#>
LeveneTest(count ~ spray, data = InsectSprays)
#>
#> Levene's Test for Homogeneity of Variance (center = median)
#>
#> data: count by spray
#> F = 3.8214, num df = 5, denom df = 66, p-value = 0.004223
#>
# Compare this to fligner.test() and bartlett.test()