Skip to contents

Test for constant variance. It assumes that the error terms are normally distributed.

Usage

ols_test_breusch_pagan(
  model,
  fitted.values = TRUE,
  rhs = FALSE,
  multiple = FALSE,
  p.adj = c("none", "bonferroni", "sidak", "holm"),
  vars = NA
)

Arguments

model

An object of class lm.

fitted.values

Logical; if TRUE, use fitted values of regression model.

rhs

Logical; if TRUE, specifies that tests for heteroskedasticity be performed for the right-hand-side (explanatory) variables of the fitted regression model.

multiple

Logical; if TRUE, specifies that multiple testing be performed.

p.adj

Adjustment for p value, the following options are available: bonferroni, holm, sidak and none.

vars

Variables to be used for heteroskedasticity test.

Value

ols_test_breusch_pagan returns an object of class "ols_test_breusch_pagan". An object of class "ols_test_breusch_pagan" is a list containing the following components:

bp

breusch pagan statistic

p

p-value of bp

fv

fitted values of the regression model

rhs

names of explanatory variables of fitted regression model

multiple

logical value indicating if multiple tests should be performed

padj

adjusted p values

vars

variables to be used for heteroskedasticity test

resp

response variable

preds

predictors

Details

Breusch Pagan Test was introduced by Trevor Breusch and Adrian Pagan in 1979. It is used to test for heteroskedasticity in a linear regression model. It test whether variance of errors from a regression is dependent on the values of a independent variable.

  • Null Hypothesis: Equal/constant variances

  • Alternative Hypothesis: Unequal/non-constant variances

Computation

  • Fit a regression model

  • Regress the squared residuals from the above model on the independent variables

  • Compute \(nR^2\). It follows a chi square distribution with p -1 degrees of freedom, where p is the number of independent variables, n is the sample size and \(R^2\) is the coefficient of determination from the regression in step 2.

References

T.S. Breusch & A.R. Pagan (1979), A Simple Test for Heteroscedasticity and Random Coefficient Variation. Econometrica 47, 1287–1294

Cook, R. D.; Weisberg, S. (1983). "Diagnostics for Heteroskedasticity in Regression". Biometrika. 70 (1): 1–10.

See also

Other heteroskedasticity tests: ols_test_bartlett(), ols_test_f(), ols_test_score()

Examples

# model
model <- lm(mpg ~ disp + hp + wt + drat, data = mtcars)

# use fitted values of the model
ols_test_breusch_pagan(model)
#> 
#>  Breusch Pagan Test for Heteroskedasticity
#>  -----------------------------------------
#>  Ho: the variance is constant            
#>  Ha: the variance is not constant        
#> 
#>              Data               
#>  -------------------------------
#>  Response : mpg 
#>  Variables: fitted values of mpg 
#> 
#>        Test Summary         
#>  ---------------------------
#>  DF            =    1 
#>  Chi2          =    1.429672 
#>  Prob > Chi2   =    0.231818 

# use independent variables of the model
ols_test_breusch_pagan(model, rhs = TRUE)
#> 
#>  Breusch Pagan Test for Heteroskedasticity
#>  -----------------------------------------
#>  Ho: the variance is constant            
#>  Ha: the variance is not constant        
#> 
#>            Data            
#>  --------------------------
#>  Response : mpg 
#>  Variables: disp hp wt drat 
#> 
#>         Test Summary         
#>  ----------------------------
#>  DF            =    4 
#>  Chi2          =    1.513808 
#>  Prob > Chi2   =    0.8241927 

# use independent variables of the model and perform multiple tests
ols_test_breusch_pagan(model, rhs = TRUE, multiple = TRUE)
#> 
#>  Breusch Pagan Test for Heteroskedasticity
#>  -----------------------------------------
#>  Ho: the variance is constant            
#>  Ha: the variance is not constant        
#> 
#>            Data            
#>  --------------------------
#>  Response : mpg 
#>  Variables: disp hp wt drat 
#> 
#>         Test Summary (Unadjusted p values)       
#>  ----------------------------------------------
#>   Variable           chi2       df        p     
#>  ----------------------------------------------
#>   disp             1.2355345     1    0.2663334 
#>   hp               0.9209878     1    0.3372157 
#>   wt               1.2529988     1    0.2629805 
#>   drat             1.1668486     1    0.2800497 
#>  ----------------------------------------------
#>   simultaneous     1.5138083     4    0.8241927 
#>  ----------------------------------------------

# bonferroni p value adjustment
ols_test_breusch_pagan(model, rhs = TRUE, multiple = TRUE, p.adj = 'bonferroni')
#> 
#>  Breusch Pagan Test for Heteroskedasticity
#>  -----------------------------------------
#>  Ho: the variance is constant            
#>  Ha: the variance is not constant        
#> 
#>            Data            
#>  --------------------------
#>  Response : mpg 
#>  Variables: disp hp wt drat 
#> 
#>         Test Summary (Bonferroni p values)       
#>  ----------------------------------------------
#>   Variable           chi2       df        p     
#>  ----------------------------------------------
#>   disp             1.2355345     1    1.0000000 
#>   hp               0.9209878     1    1.0000000 
#>   wt               1.2529988     1    1.0000000 
#>   drat             1.1668486     1    1.0000000 
#>  ----------------------------------------------
#>   simultaneous     1.5138083     4    0.8241927 
#>  ----------------------------------------------

# sidak p value adjustment
ols_test_breusch_pagan(model, rhs = TRUE, multiple = TRUE, p.adj = 'sidak')
#> 
#>  Breusch Pagan Test for Heteroskedasticity
#>  -----------------------------------------
#>  Ho: the variance is constant            
#>  Ha: the variance is not constant        
#> 
#>            Data            
#>  --------------------------
#>  Response : mpg 
#>  Variables: disp hp wt drat 
#> 
#>           Test Summary (Sidak p values)          
#>  ----------------------------------------------
#>   Variable           chi2       df        p     
#>  ----------------------------------------------
#>   disp             1.2355345     1    0.7102690 
#>   hp               0.9209878     1    0.8070305 
#>   wt               1.2529988     1    0.7049362 
#>   drat             1.1668486     1    0.7313356 
#>  ----------------------------------------------
#>   simultaneous     1.5138083     4    0.8241927 
#>  ----------------------------------------------

# holm's p value adjustment
ols_test_breusch_pagan(model, rhs = TRUE, multiple = TRUE, p.adj = 'holm')
#> 
#>  Breusch Pagan Test for Heteroskedasticity
#>  -----------------------------------------
#>  Ho: the variance is constant            
#>  Ha: the variance is not constant        
#> 
#>            Data            
#>  --------------------------
#>  Response : mpg 
#>  Variables: disp hp wt drat 
#> 
#>           Test Summary (Holm's p values)         
#>  ----------------------------------------------
#>   Variable           chi2       df        p     
#>  ----------------------------------------------
#>   disp             1.2355345     1    0.7990002 
#>   hp               0.9209878     1    0.3372157 
#>   wt               1.2529988     1    1.0000000 
#>   drat             1.1668486     1    0.5600994 
#>  ----------------------------------------------
#>   simultaneous     1.5138083     4    0.8241927 
#>  ----------------------------------------------