Nothing
# test_compare_sas.R
library(lmerTest)
# WRE says "using if(requireNamespace("pkgname")) is preferred, if possible."
# even in tests:
assertError <- function(expr, ...)
if(requireNamespace("tools")) tools::assertError(expr, ...) else invisible()
assertWarning <- function(expr, ...)
if(requireNamespace("tools")) tools::assertWarning(expr, ...) else invisible()
#####################################################################
# Use contrasts to get particular estimates for the summary table:
l <- list(Frequency="contr.SAS", Income="contr.SAS")
m.carrots <- lmer(Preference ~ sens2*Frequency*Income
+(1+sens2|Consumer), data=carrots, contrasts=l)
an.m <- anova(m.carrots)
TOL <- 1e-4
TOL2 <- 1e-5
# with 4 decimals should agree with SAS output
# numbers before decimals should agree with SAS output
stopifnot(
all.equal(an.m[,"Pr(>F)"],
c(2e-5, 0.15512, 0.06939, 0.08223, 0.52459, 0.03119, 0.48344),
tolerance = TOL),
all.equal(round(an.m$DenDF), c(83, 83, 83, 83, 83, 83, 83))
)
sm <- summary(m.carrots)
stopifnot(
isTRUE(all.equal(sm$coefficients[,"Pr(>|t|)"],
c(1e-10, 0.005061, 0.6865554, 0.342613, 0.129157,
0.088231, 0.846000, 0.354472, 0.526318, 0.020646, 0.010188,
0.031242, 0.055356, 0.694689, 0.099382, 0.28547,
0.977774, 0.855653, 0.427737, 0.321086, 0.417465 , 0.204385, 0.784437,
0.681434, 0.106180, 0.149122, 0.390870, 0.273686), tolerance=TOL,
check.attributes = FALSE))
)
# Takes too long to run:
# if(requireNamespace("pbkrtest", quietly = TRUE)) {
# sm.kr <- summary(m.carrots, ddf = "Kenward-Roger")
#
# ## coefficients for Sat and KR agree in this example
# # cbind(sm$coefficients[,"Pr(>|t|)"], sm.kr$coefficients[,"Pr(>|t|)"])
# all.equal(sm$coefficients[,"Pr(>|t|)"], sm.kr$coefficients[,"Pr(>|t|)"],
# tol=TOL)
# }
################################################################################
## checking lsmeans and difflsmeans
## compare with SAS output
m <- lmer(Informed.liking ~ Product*Information*Gender
+ (1|Product:Consumer) + (1|Consumer) , data=ham)
lsm <- lsmeansLT(m, which = "Product")
# head(lsm)
stopifnot(
isTRUE(all.equal(lsm[, "Estimate"], c(5.8084, 5.1012, 6.0909, 5.9256),
tol=TOL, check.attributes = FALSE)),
isTRUE(all.equal(round(lsm[, "t value"], 2), c(24.93, 21.89, 26.14, 25.43), tolerance=TOL,
check.attributes = FALSE)),
isTRUE(all.equal(lsm[, "lower"], c(5.3499, 4.6428, 5.6324, 5.4672), tolerance=TOL,
check.attributes = FALSE)),
isTRUE(all.equal(lsm[, "upper"], c(6.2668, 5.5597, 6.5493, 6.3840), tolerance=TOL,
check.attributes = FALSE))
)
################################################################################
# Not actually 'hard-coded' tests versus SAS results...
m.carrots <- lmer(Preference ~ 0 + sens2 + Homesize +
(1+sens2 | Consumer), data=carrots,
control=lmerControl(optimizer="bobyqa"))
summary(m.carrots)
(an.1 <- anova(m.carrots, type=1))
(an.3 <- anova(m.carrots))
(an.lme4 <- anova(m.carrots, ddf = "lme4")) # difference in SSQ MS and F-values
# Is this a problem with lme4?
# fm <- lm(Preference ~ 0 + sens2 + Homesize, data=carrots)
# anova(fm)
# coef(summary(fm))
# Here the F value is a little greater than the squared t-value (as expected)
stopifnot(all.equal(an.1[, "F value"], c(56.5394, 4169.87), tolerance = TOL2),
all.equal(an.3[, "F value"], c(54.8206, 4169.87), tolerance = TOL2))
################################################################################
# Check exmaple from GLM SAS report
### example from the paper GLM SAS 101 report
a <- factor(c(1,1,1,2,2,2,2,2,1,2))
b <- factor(c(1,1,2,1,2,2,2,2,2,1))
f=factor(c(1,2,1,2,1,2,1,2,1,2))
y <- c(12,14,11,20,17,23,35,46,15,16)
dd <- data.frame(a=a, b=b, y=y, f=f)
## check type 2 is order independent
model <- lmer(y ~ a*b + (1|f), data=dd)
model2 <- lmer(y ~ b*a + (1|f), data=dd)
(an <- anova(model, type=2))
(an2 <- anova(model2, type=2))
stopifnot(
isTRUE(all.equal(an,an2[c(2,1,3),], check.attributes = FALSE, tolerance=TOL2))
)
## check the results are the same as from SAS proc mixed
stopifnot(
isTRUE(all.equal(an[,"F value"], c(3.90131, 1.32753, 0.99565), tolerance=TOL2))
)
################################################################################
## Check type II and III anova tables versus SAS
m.carrots <- lmer(Preference ~ sens2*Homesize
+(1+sens2|Consumer), data=carrots)
(ancar <- anova(m.carrots, type=2))
stopifnot(
isTRUE(all.equal(ancar[,"F value"], c(54.8361, 5.16138, 1.03035), tolerance = TOL))
)
m <- lmer(Informed.liking ~ Product*Age
+ (1|Consumer) , data=ham)
(an <- anova(m, type=2))
stopifnot(
isTRUE(all.equal(an[,"F value"], c(2.48135, .005387, 1.48451), tolerance = TOL2))
)
fm <- lmer(Preference ~ sens2*Homesize*sens1 + (1|Product),
data=carrots)
(ant2 <- anova(fm, type=2))
(ant3 <- anova(fm, type=3))
stopifnot(
isTRUE(all.equal(ant2[,"F value"],
c(16.4842, 14.0010, .526076, 1.18144,
.107570, .335177, 1.05946), tolerance = TOL)),
isTRUE(all.equal(ant3[,"F value"],
c(16.9140, 14.0010,.481148, 1.18144,
.074201, .335177, 1.05946), tolerance = TOL))
)
################################################################################
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.