Skip to content

lmer/pamer.fnc error

2 messages · Richa Bharti, Ben Bolker

#
Richa Bharti <richabharti74 at ...> writes:
Non-numeric argument to mathematical function
It looks like at least this part of LMERConvenienceFunctions must
not have been updated to work with new lme4.
Here's an updated version (I haven't tested carefully,
use at your own risk!)  (The package must not contain any
examples or testing of this function, or this would have failed
a while ago ...)

library(lme4)
library(LMERConvenienceFunctions)
library(lmerTest)
fm1 <- lmer(Reaction~Days+(1|Subject),sleepstudy)
fm2 <- update(fm1,.~.-Days)
print(pamer.fnc(fm1),digits=3)
##      Sum Sq Mean Sq NumDF DenDF F.value    Pr(>F) DenDF(UPPER) Pr(>F,UPPER)
## Days 162703  162703     1   161     169 7.88e-244          178     1.21e-27
##      DenDF(LOWER) Pr(>F,LOWER) expl.dev(%)
## Days          160     7.12e-27       0.286

Transform <- function (`_data`, ..., check.names=TRUE) 
{
    e <- eval(substitute(list(...)), `_data`, parent.frame())
    tags <- names(e)
    inx <- match(tags, names(`_data`))
    matched <- !is.na(inx)
    if (any(matched)) {
        `_data`[inx[matched]] <- e[matched]
        `_data` <- data.frame(`_data`,check.names=check.names)
    }
    if (!all(matched)) 
        do.call("data.frame", c(list(`_data`), e[!matched],
                list(check.names=check.names)))
    else `_data`
}


pamer.fnc <- function (model, ndigits = 4) 
{
    if (length(rownames(anova.table <- anova(model))) == 0) {
        cat("nothing to evaluate: model has only an intercept.\n\n")
        cat("printing model fixed effects:\n")
        fixef(model)
    } else {
        dims <- NULL
        rank.X = qr(getME(model,"X"))$rank
        lower.bound <- sum(sapply(ranef(model),function(x) prod(dim(x))))
        updf <- nobs(model) -  rank.X
        lodf <- updf - lower.bound
        dv <- as.character(formula(model)[[2]])
        ss.tot <- sum(scale(model.frame(model)[[dv]],scale=FALSE)^2)
        aov.table <- as.data.frame(anova(model))
        new.anova.table <-
            Transform(anova.table,
                      `Pr(>F)`=pf(`Mean Sq`,NumDF,DenDF,lower.tail=FALSE),
                      `DenDF(UPPER)` = updf,
                      `Pr(>F,UPPER)`=pf(F.value,NumDF,updf,lower.tail=FALSE),
                      `DenDF(LOWER)` = lodf,
                      `Pr(>F,LOWER)`=pf(F.value,NumDF,lodf,lower.tail=FALSE),
                      `expl.dev(%)`=aov.table[,2]/ss.tot,
                      check.names=FALSE)
        class(new.anova.table) <- class(anova.table)
        return(new.anova.table)
    }
}