lm.cluster | R Documentation |
Computes cluster robust standard errors for linear models
(stats::lm
) and general linear models
(stats::glm
) using the
multiwayvcov::vcovCL
function in the sandwich package.
lm.cluster(data, formula, cluster, weights=NULL, subset=NULL )
glm.cluster(data, formula, cluster, weights=NULL, subset=NULL, family="gaussian" )
## S3 method for class 'lm.cluster'
summary(object,...)
## S3 method for class 'glm.cluster'
summary(object,...)
## S3 method for class 'lm.cluster'
coef(object,...)
## S3 method for class 'glm.cluster'
coef(object,...)
## S3 method for class 'lm.cluster'
vcov(object,...)
## S3 method for class 'glm.cluster'
vcov(object,...)
data |
Data frame |
formula |
An R formula |
cluster |
Variable name for cluster variable contained in |
subset |
Optional vector specifying a subset of observations to be used. |
weights |
Optional vector of weights to be used. |
family |
Description of the error distribution and link function to be used in
the model, see |
... |
Further arguments to be passed to |
object |
Object of class |
List with following entries
lm_res |
Value of |
glm_res |
Value of |
vcov |
Covariance matrix of parameter estimates |
stats::lm
, stats::glm
,
sandwich::vcovCL
## Not run:
#############################################################################
# EXAMPLE 1: Cluster robust standard errors data.ma01
#############################################################################
data(data.ma01)
dat <- data.ma01
#*** Model 1: Linear regression
mod1 <- miceadds::lm.cluster( data=dat, formula=read ~ hisei + female,
cluster="idschool" )
coef(mod1)
vcov(mod1)
summary(mod1)
# estimate Model 1, but cluster is provided as a vector
mod1b <- miceadds::lm.cluster( data=dat, formula=read ~ hisei + female,
cluster=dat$idschool)
summary(mod1b)
#*** Model 2: Logistic regression
dat$highmath <- 1 * ( dat$math > 600 ) # create dummy variable
mod2 <- miceadds::glm.cluster( data=dat, formula=highmath ~ hisei + female,
cluster="idschool", family="binomial")
coef(mod2)
vcov(mod2)
summary(mod2)
#############################################################################
# EXAMPLE 2: Cluster robust standard errors for multiply imputed datasets
#############################################################################
library(mitools)
data(data.ma05)
dat <- data.ma05
# imputation of the dataset: use six imputations
resp <- dat[, - c(1:2) ]
imp <- mice::mice( resp, method="norm", maxit=3, m=6 )
datlist <- miceadds::mids2datlist( imp )
# linear regression with cluster robust standard errors
mod <- lapply( datlist, FUN=function(data){
miceadds::lm.cluster( data=data, formula=denote ~ migrant+ misei,
cluster=dat$idclass )
} )
# extract parameters and covariance matrix
betas <- lapply( mod, FUN=function(rr){ coef(rr) } )
vars <- lapply( mod, FUN=function(rr){ vcov(rr) } )
# conduct statistical inference
summary( miceadds::pool_mi( qhat=betas, u=vars ) )
#------ compute global F-test for hypothesis that all predictors have zero coefficient values
library(mitml)
Nimp <- 6 # number of imputations
np <- length(betas[[1]]) # number of parameters
beta_names <- names(betas[[1]])
# define vector of parameters for which constraints should be tested
constraints <- beta_names[-1]
# create input for mitml::testConstraints function
qhat <- matrix( unlist(betas), ncol=Nimp)
rownames(qhat) <- beta_names
uhat <- array( unlist(vars), dim=c(np,np,Nimp))
dimnames(uhat) <- list( beta_names, beta_names, NULL )
# compute global F-test
Ftest <- mitml::testConstraints( qhat=betas, uhat=vars, constraints=constraints )
print(Ftest)
#############################################################################
# EXAMPLE 3: Comparing miceadds::lm.cluster() and lme4::lmer()
#############################################################################
data(data.ma01, package="miceadds")
dat <- na.omit(data.ma01)
# center hisei variable
dat$hisei <- dat$hisei - mean(dat$hisei)
# define school mean hisei
dat$hisei_gm <- miceadds::GroupMean(dat$hisei, dat$idschool, extend=TRUE)[,2]
dat$cluster_size <- miceadds::GroupSum(1+0*dat$hisei, dat$idschool, extend=TRUE)[,2]
dat$hisei_wc <- dat$hisei - dat$hisei_gm
#*** Model 1a: lm, hisei with clustering
mod1a <- miceadds::lm.cluster( data=dat, formula=read~hisei, cluster="idschool" )
#*** Model 1b: lmer, hisei
mod1b <- lme4::lmer( data=dat, formula=read~hisei+(1|idschool) )
cbind( coef(mod1a), fixef(mod1b))
## > cbind( coef(mod1a), fixef(mod1b))
## [,1] [,2]
## (Intercept) 509.181691 507.8684752
## hisei 1.524776 0.8161745
# variance explanation
vmod1b <- r2mlm::r2mlm(mod1b)
vmod1b$Decompositions
#*** Model 2a: lm, hisei and hisei_gm with clustering
mod2a <- miceadds::lm.cluster( data=dat, formula=read~hisei_wc+hisei_gm,
cluster="idschool" )
#*** Model 2b: lmer, multilevel model
mod2b <- lme4::lmer( data=dat, formula=read~hisei_wc+hisei_gm + (1|idschool) )
# variance explanation
vmod2b <- r2mlm::r2mlm(mod2b)
vmod2b$Decompositions
cbind( coef(mod2a), fixef(mod2b))
## > cbind( coef(mod2a), fixef(mod2b))
## [,1] [,2]
## (Intercept) 509.1816911 508.0478629
## hisei_wc 0.7503773 0.7503773
## hisei_gm 5.8424012 5.5681941
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.