Compute LS-means (aka population means or marginal means)
Compute LS-means (aka population means or marginal means)
LS-means (least squares means, also known as population means and as marginal means) for a range of model types.
LSmeans(object, effect =NULL, at =NULL, level =0.95,...)## Default S3 method:LSmeans(object, effect =NULL, at =NULL, level =0.95,...)## S3 method for class 'lmerMod'LSmeans(object, effect =NULL, at =NULL, level =0.95, adjust.df =TRUE,...)popMeans(object, effect =NULL, at =NULL, level =0.95,...)## Default S3 method:popMeans(object, effect =NULL, at =NULL, level =0.95,...)## S3 method for class 'lmerMod'popMeans(object, effect =NULL, at =NULL, level =0.95, adjust.df =TRUE,...)
Arguments
object: Model object
effect: A vector of variables. For each configuration of these the estimate will be calculated.
at: A list of values of covariates (including levels of some factors) to be used in the calculations
level: The level of the (asymptotic) confidence interval.
...: Additional arguments; currently not used.
adjust.df: Should denominator degrees of freedom be adjusted?
Returns
A dataframe with results from computing the contrasts.
Details
There are restrictions on the formulas allowed in the model object. For example having y ~ log(x) will cause an error. Instead one must define the variable logx = log(x) and do y ~ logx.
Note
LSmeans and popMeans are synonymous.
Warning
Notice that LSmeans and LE_matrix
fails if the model formula contains an offset (as one would have in connection with e.g. Poisson regression.
Examples
## Two way anova:data(warpbreaks)m0 <- lm(breaks ~ wool + tension, data=warpbreaks)m1 <- lm(breaks ~ wool * tension, data=warpbreaks)LSmeans(m0)LSmeans(m1)## same as:K <- LE_matrix(m0);K
linest(m0, K)K <- LE_matrix(m1);K
linest(m1, K)LE_matrix(m0, effect="wool")LSmeans(m0, effect="wool")LE_matrix(m1, effect="wool")LSmeans(m1, effect="wool")LE_matrix(m0, effect=c("wool","tension"))LSmeans(m0, effect=c("wool","tension"))LE_matrix(m1, effect=c("wool","tension"))LSmeans(m1, effect=c("wool","tension"))## Regression; two parallel regression lines:data(Puromycin)m0 <- lm(rate ~ state + log(conc), data=Puromycin)## Can not use LSmeans / LE_matrix here because of## the log-transformation. Instead we must do:Puromycin$lconc <- log( Puromycin$conc )m1 <- lm(rate ~ state + lconc, data=Puromycin)LE_matrix(m1)LSmeans(m1)LE_matrix(m1, effect="state")LSmeans(m1, effect="state")LE_matrix(m1, effect="state", at=list(lconc=3))LSmeans(m1, effect="state", at=list(lconc=3))## Non estimable contrasts## ## Make balanced datasetdat.bal <- expand.grid(list(AA=factor(1:2), BB=factor(1:3), CC=factor(1:3)))dat.bal$y <- rnorm(nrow(dat.bal))## ## Make unbalanced dataset# 'BB' is nested within 'CC' so BB=1 is only found when CC=1# and BB=2,3 are found in each CC=2,3,4dat.nst <- dat.bal
dat.nst$CC <-factor(c(1,1,2,2,2,2,1,1,3,3,3,3,1,1,4,4,4,4))mod.bal <- lm(y ~ AA + BB * CC, data=dat.bal)mod.nst <- lm(y ~ AA + BB : CC, data=dat.nst)LSmeans(mod.bal, effect=c("BB","CC"))LSmeans(mod.nst, effect=c("BB","CC"))LSmeans(mod.nst, at=list(BB=1, CC=1))LSmeans(mod.nst, at=list(BB=1, CC=2))## Above: NA's are correct; not an estimable functionif( require( lme4 )){ warp.mm <- lmer(breaks ~-1+ tension +(1|wool), data=warpbreaks) LSmeans(warp.mm, effect="tension") class(warp.mm) fixef(warp.mm) coef(summary(warp.mm)) vcov(warp.mm)if(require(pbkrtest)) vcovAdj(warp.mm)}LSmeans(warp.mm, effect="tension")