#############################################################################
# EXAMPLE 1: Nested multiple imputation and Wald test | TIMSS data
#############################################################################
library(BIFIEsurvey)
data(data.timss2 , package="BIFIEsurvey" )
datlist <- data.timss2
# remove first four variables
M <- length(datlist)
for (ll in 1:M){
datlist[[ll]] <- datlist[[ll]][ , -c(1:4) ]
}
#***************
# (1) nested multiple imputation using mice
imp1 <- mice.nmi( datlist , m=3 , maxit=2 )
summary(imp1)
#**** Model 1: Linear regression with interaction effects
res1 <- with( imp1 , lm( likesc ~ female*migrant + female*books ) )
pres1 <- pool.mids.nmi( res1 )
summary(pres1)
# test whether both interaction effects equals zero
pars <- dimnames(pres1$qhat)[[3]]
des <- create.designMatrices.waldtest( pars = pars , k=2)
Cdes <- des$Cdes
rdes <- des$rdes
Cdes[1, "female:migrant"] <- 1
Cdes[2, "female:books"] <- 1
wres1 <- NMIwaldtest( qhat=pres1$qhat , u=pres1$u , Cdes=Cdes , rdes=rdes )
summary(wres1)
# a simpler specification is the use of "testnull"
testnull <- c("female:migrant" , "female:books")
wres1b <- NMIwaldtest( qhat=qhat , u=u , testnull=testnull )
summary(wres1b)
#**** Model 2: Multivariate linear regression
res2 <- with( imp1 , lm( cbind( ASMMAT , ASSSCI ) ~
0 + I(1*(female==1)) + I(1*(female==0)) ) )
pres2 <- pool.mids.nmi( res2 )
summary(pres2)
# test whether both gender differences equals -10 points
pars <- dimnames(pres2$qhat)[[3]]
## > pars
## [1] "ASMMAT:I(1 * (female == 1))" "ASMMAT:I(1 * (female == 0))"
## [3] "ASSSCI:I(1 * (female == 1))" "ASSSCI:I(1 * (female == 0))"
des <- create.designMatrices.waldtest( pars = pars , k=2)
Cdes <- des$Cdes
rdes <- c(-10,-10)
Cdes[1, "ASMMAT:I(1*(female == 1))"] <- 1
Cdes[1, "ASMMAT:I(1*(female == 0))"] <- -1
Cdes[2, "ASSSCI:I(1*(female == 1))"] <- 1
Cdes[2, "ASSSCI:I(1*(female == 0))"] <- -1
wres2 <- NMIwaldtest( qhat=pres2$qhat , u=pres2$u , Cdes=Cdes , rdes=rdes )
summary(wres2)
# test only first hypothesis
wres2b <- NMIwaldtest( qhat=pres2$qhat , u=pres2$u , Cdes=Cdes[1,,drop=FALSE] ,
rdes=rdes[1] )
summary(wres2b)
#############################################################################
# EXAMPLE 2: Multiple imputation and Wald test | TIMSS data
#############################################################################
library(BIFIEsurvey)
data(data.timss2 , package="BIFIEsurvey" )
dat <- data.timss2[[1]]
dat <- dat[ , - c(1:4) ]
# perform multiple imputation
imp <- mice::mice( dat , m=6 , maxit=3 )
# define analysis model
res1 <- with( imp , lm( likesc ~ female*migrant + female*books ) )
pres1 <- mice::pool( res1 )
summary(pres1)
# Wald test for zero interaction effects
qhat <- pres1$qhat
u <- pres1$u
pars <- dimnames(pres1$qhat)[[2]]
des <- create.designMatrices.waldtest( pars = pars , k=2)
Cdes <- des$Cdes
rdes <- des$rdes
Cdes[1, "female:migrant"] <- 1
Cdes[2, "female:books"] <- 1
# apply MIwaldtest function
wres1 <- MIwaldtest( qhat , u , Cdes , rdes )
summary(wres1)
# use again "testnull"
testnull <- c("female:migrant" , "female:books")
wres1b <- MIwaldtest( qhat=qhat , u=u , testnull=testnull )
summary(wres1b)
#***** linear regression with cluster robust standard errors
# convert object of class mids into a list object
datlist_imp <- mids2datlist( imp )
# define cluster
idschool <- as.numeric( substring( data.timss2[[1]]$IDSTUD , 1 , 5 ) )
# linear regression
res2 <- lapply( datlist_imp , FUN = function(data){
lm.cluster( data=data , formula=likesc ~ female*migrant + female*books ,
cluster= idschool ) } )
# extract parameters and covariance matrix
qhat <- lapply( res2 , FUN = function(rr){ coef(rr) } )
u <- lapply( res2 , FUN = function(rr){ vcov(rr) } )
# perform Wald test
wres2 <- MIwaldtest( qhat , u , Cdes , rdes )
summary(wres2)
Run the code above in your browser using DataLab