Brown–Forsythe Test in R: Step-by-Step Example?

The Brown–Forsythe Test in R is a statistical test used to determine if the difference between groups is statistically significant. This test is commonly used when the data is not normally distributed. This tutorial provides a step-by-step example of how to perform the Brown–Forsythe Test in R, with the help of relevant R functions and packages.


A is used to determine whether or not there is a significant difference between the means of three or more independent groups.

One of the of a one-way ANOVA is that the variances of the populations that the come from are equal.

One of the most common ways to test for this is by using a Brown-Forsythe test, which is a statistical test that uses the following :

  • H0: The variances among the populations are equal.
  • HA: The variances among the populations are not equal.

If the of the test is less than some significance level (e.g. α = .05) then we reject the null hypothesis and conclude that the variances are not equal among the different populations.

This tutorial provides a step-by-step example of how to perform a Brown-Forsythe test in R.

Step 1: Enter the Data

Suppose we’d like to know whether or not three different workout programs lead to different levels of weight loss.

To test this, we recruit 90 people and randomly assign 30 to use each program. We then measure the weight loss of each person after one month.

The following dataset contains information on how much weight people lost on each program:

#make this example reproducible
set.seed(0)

#create data frame
data <- data.frame(program = as.factor(rep(c("A", "B", "C"), each = 30)),
                   weight_loss = c(runif(30, 0, 3),
                                   runif(30, 0, 5),
                                   runif(30, 1, 7)))

#view first six rows of data frame
head(data)

#  program weight_loss
#1       A   2.6900916
#2       A   0.7965260
#3       A   1.1163717
#4       A   1.7185601
#5       A   2.7246234
#6       A   0.6050458

Step 2: Summarize & Visualize the Data

Before we perform a Brown-Forsythe test, we can create boxplots to visualize the variance of weight loss for each group:

boxplot(weight_loss ~ program, data = data)

We can also calculate the variance of weight loss in each group:

#load dplyr package
library(dplyr)

#calculate variance of weight loss by group
data %>%
  group_by(program) %>%
  summarize(var=var(weight_loss))

# A tibble: 3 x 2
  program   var
     
1 A       0.819
2 B       1.53 
3 C       2.46 

Step 3: Perform the Brown-Forsythe Test

To perform a Brown-Forsythe test in R, we can use the bf.test() function from the package:

#load onewaytests package
library(onewaytests)

#perform Brown-Forsythe test
bf.test(weight_loss ~ program, data = data)

  Brown-Forsythe Test (alpha = 0.05) 
------------------------------------------------------------- 
  data : weight_loss and program 

  statistic  : 30.83304 
  num df     : 2 
  denom df   : 74.0272 
  p.value    : 1.816529e-10 

  Result     : Difference is statistically significant. 
------------------------------------------------------------- 

The p-value of the test turns out to be less than 0.000 and, as the output declares, the differences in variances between the three groups is statistically significant.

Next Steps

If you fail to reject the null hypothesis of the Brown-Forsythe Test, then you can proceed to perform a one-way ANOVA on the data.

However, if you reject the null hypothesis then this means the assumption of equal variances is violated. In this case, you have two options:

1. Proceed with a One-Way ANOVA anyway.

It turns out that a one-way ANOVA is actually robust to unequal variances as long as the largest variance is no larger than 4 times the smallest variance.

In step 2 from the example above, we found that the smallest variance was 0.819 and the largest variance was 2.46. Thus, the ratio of the largest to smallest variance is 2.46 / .819 = 3.003.

Since this value is less than 4, we could simply proceed with the one-way ANOVA.

2. Perform a Kruskal-Wallis Test

If the ratio of the largest variance to the smallest variance is greater than 4, we may instead choose to perform a . This is considered the non-parametric equivalent to the one-way ANOVA.

You can find a step-by-step example of a Kruskal-Wallis test in R .

x