On Mon, 8 Sep 2014, Iuri Gavronski wrote:

Hi,

I am trying to test for heteroskedascity in an OLS model, but I am not
able to run the white.test() if the model has dummy variables built
from factors. Any suggestions?

The White test is equivalent to the Breusch-Pagan test with an auxiliary model containing all regressors, their squares and their cross-products. For dummy variables the regressors and their squares are identical, so this strategy has to be modified. Other collinearities might occur as well.

For this reason the "lmtest" package has only a function bptest() but no additional whitetest() function. Examples show how to compute the White test, though. See e.g. example("CigarettesB", package = "AER").

The "bstats" package has copied code for bptest (and dwtest) from "lmtest" without crediting the original authors. The maintainer is cc'ed here and encouraged to read and follow the CRAN policies.

The white.test() function in "bstats" does not leverage the bptest() function (and hence does not offer the recommended studentization option). It sets up the auxiliary model by pasting "I(...^2)" and ":" into the model formula which is very error prone and does not work for factor variables. (This is the reason why "lmtest" doesn't do it.)

Please find a reproducible code below:

myswiss <- swiss
myswiss$fert <- ifelse(
myswiss$Fertility>70,
"High","Low")
myswiss$fert <- factor(myswiss$fert)
str(myswiss)
mod1 <- lm(Infant.Mortality ~ fert,
data=myswiss)
library(bstats)
bptest(mod1)
white.test(mod1)

myswiss$fertlow <- ifelse(
myswiss$Fertility>70,
0,1)
mod2 <- lm(Infant.Mortality ~ fertlow,
data=myswiss)
library(bstats)
bptest(mod2)
white.test(mod2)

Results:


bptest(mod2)

       studentized Breusch-Pagan test for homoscedasticity

data:  mod2
BP = 2e-04, df = 1, p-value = 0.989

white.test(mod2)

       White test for constant variance

data:
White = 2e-04, df = 1, p-value = 0.989

bptest(mod1)

       studentized Breusch-Pagan test for homoscedasticity

data:  mod1
BP = 2e-04, df = 1, p-value = 0.989

white.test(mod1)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
 contrasts can be applied only to factors with 2 or more levels
In addition: Warning message:
In Ops.factor(fert, fert) : * not meaningful for factors


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to