【问题标题】:R - Alternatives to, or fix for, LMERConvenienceFunctions, for use with LME4?R - 与 LME4 一起使用的 LMERConvenienceFunctions 的替代方案或修复方案?
【发布时间】:2020-09-25 22:34:31
【问题描述】:

我从https://stats.stackexchange.com/questions/488201/alternatives-to-or-fix-for-lmerconveniencefunctions-for-use-with-lme4 交叉发布此内容,因为有人建议人们在这里可能有更多相关知识。

最近我从 R 版本 3.6 更新到版本 4.0 以进行分析,并注意到 LMERConvenienceFunctions 停止工作。具体来说,我将它与 LME4 结合使用。

每当我尝试对通过LME4,无论数据集如何,我都会遇到错误“pf 中的错误(anova.table[term, "F value"], anova.table[term, "Df"], nrow(model@frame) - : Non-数学函数的数字参数”。我已经在两台不同的计算机上尝试过,结果相同。现在,据我所知,LMERConvenienceFunctions 自 2015 年以来没有更新,所以我不希望修复即将到来。

我尝试恢复到 R 3.6.2,但在使用 R 4.0 发布前不久发布的 LME4 版本时发现了相同的错误。我终于找到了我正在使用的以前的版本,所以这将(希望)为我当前的分析修复它,但如果我想继续使用最新版本的 R 和 LME4,这将无济于事。

LMERConvenience 的其他功能(即 fitLMER.fnc 和 mcp.fnc)似乎工作正常,所以这似乎不是一个系统问题,但它绝对是一个严重阻碍我工作的问题。

是否有人对替代软件包有任何建议,或者任何人都可以提供有关编辑 LMERConvenienceFunctions 软件包的任何建议,以便我可以让损坏的功能再次工作?我没有任何更改包内编码的经验,因此将从那里的基本知识开始。

我也知道通过在我的 R 脚本中添加额外的代码有一些解决方法,正如我在寻找答案时发现的那样,它以前在 2014 年是同一个包的问题 (https://stat.ethz.ch/pipermail/r-sig-mixed-models/2014q2/022264.html),但我不熟悉编写那种代码,所以也很感激那里的任何指导。

【问题讨论】:

    标签: r lme4


    【解决方案1】:

    我设法从 github 上使用 LME4 的可爱的人们那里获得了一些帮助;对于将来遇到此问题的任何人,请注意以下几点:

    1. 我已向列出的 LMERConvenienceFunctions 维护者发送电子邮件,要求他们更新 CRAN 版本,使其遵守 CRAN 规则。希望他能做到。

    2. 对于那些使用 LME4 和 LMERConvenienceFunctions 但不使用 lmerTest 的用户的修复,最近 anova 表头“Chi Df”和“Df”分别更新为“Df”和“npar”(原因如下: https://github.com/lme4/lme4/issues/528)。这是 LMERConvenienceFunctions 的问题,因为 pamer.fnc 调用了 Df,因此需要更新为调用 npar。此外,bfFixefLMER_F.fnc 调用 pamer.fnc,因此在更新 pamer.fnc 时已修复。对于不确定如何的人,我使用 getAnywhere() 找到了代码并对其进行了修改,因此只需复制下面的代码并将其粘贴到文件开头附近一次:

    pamer.fnc <- function (model, ndigits = 4) 
    {
        if (length(rownames(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(model@pp$X)$rank
            anova.table = anova(model)
            anova.table = cbind(anova.table, upper.den.df = nrow(model@frame) - 
                rank.X)
            p.values.upper = as.numeric()
            p.values.lower = as.numeric()
            for (term in row.names(anova.table)) {
                p.values.upper = c(p.values.upper, round(1 - pf(anova.table[term, 
                    "F value"], anova.table[term, "npar"], 
                    nrow(model@frame) - rank.X), ndigits))
                model.ranef <- ranef(model)
                lower.bound <- 0
                for (i in 1:length(names(model.ranef))) {
                    dims <- dim(model.ranef[[i]])
                    lower.bound <- lower.bound + dims[1] * dims[2]
                }
                p.values.lower = c(p.values.lower, 1 - pf(anova.table[term, 
                    "F value"], anova.table[term, "npar"], 
                    nrow(model@frame) - rank.X - lower.bound))
            }
            dv <- gsub(" ", "", gsub("(.*)~.*", 
                "\\1", as.character(model@call)[2]))
            ss.tot <- sum((model@frame[, dv] - mean(model@frame[, 
                dv]))^2)
            aov.table <- as.data.frame(anova(model))
            expl.dev <- vector("numeric")
            for (i in rownames(aov.table)) {
                expl.dev <- c(expl.dev, aov.table[i, 2]/ss.tot)
            }
            names(expl.dev) <- rownames(aov.table)
            anova.table = round(cbind(anova.table, upper.p.val = p.values.upper, 
                lower.den.df = nrow(model@frame) - rank.X - lower.bound, 
                lower.p.val = p.values.lower, `expl.dev.(%)` = expl.dev * 
                    100), ndigits)
            return(anova.table)
        }
    }
    

    (您可能还需要再次单独运行 bfFixefLMER_F.fnc 的函数脚本,让 R 知道应该从更新版本的 pamer.fnc 调用 bfFixefLMER_F.fnc)

    1. 对于那些使用 LME4 和 LMERConvenienceFunctions 但也使用 lmerTest 的用户的修复,您需要 1) 使用 numDF 而不是 npar,或 2) 将“anova.table = anova(model)”替换为“anova .table = anova(model, dff = "lme4") 在 lmerTest 3.0 及以后的版本中。这似乎是由于 anova.lmerModLmerTest 函数(在 lmerTest 3.0 中添加)覆盖了对 anova() 的调用,使用 Type III Satterthwaite 分析列在 lme4 之前,导致未指定 dff 时默认为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2013-11-18
      • 2011-06-16
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多