【问题标题】:Interaction of random slopes in mixed-effects models in JuliaJulia 混合效应模型中随机斜率的相互作用
【发布时间】:2017-08-24 19:13:09
【问题描述】:

LMM 中的随机效应的交互是否可能适合 Julia?

这会报错

model = fit!(lmm(@formula(response ~ 1 + A*B + (1+A*B|sub)), data)
ERROR: MethodError: no method matching getindex(::DataFrames.DataFrame, ::Expr)

拆开这些条款也无济于事。

model = fit!(lmm(@formula(response ~ 1 + A*B + (1+A+B+A&B|sub)), data)

这行得通

mode2 = fit!(lmm(@formula(response ~ 1 + A*B + (1+A+B|sub)), data)

请注意,当您与固定效果进行交互时不会出现任何问题。

【问题讨论】:

    标签: regression julia interaction mixed-models


    【解决方案1】:

    也许这应该是 github 上的 MixedModels.jl 或 DataFrames.jl 中的问题。但是,无论如何,我已经找到了似乎有问题的地方:eterms@formula 的计算。所以,为了让它工作,我重新定义了计算。将以下内容粘贴到 REPL 中并尝试有问题​​的fit!

    function DataFrames.evt(ex::Expr)
        if ex.head != :call error("Non-call expression encountered") end
        if !(ex.args[1] in DataFrames.nonevaluation)
            trms = DataFrames.getterms(ex)
            if length(trms)>1
                return vcat(map(DataFrames.evt,trms)...)
            else
                return [trms]
            end
        end
        return filter(x->!isa(x,Number), vcat(map(DataFrames.evt, ex.args[2:end])...))
    end
    

    现在,Cholesky 分解函数(我的 Julia 是 v0.7)的变化带来了另一个问题,这也是可以修复的,但如果其他一切正常,上述重新定义允许继续解决第一个问题。

    这里是 MixedModels 和 DataFrames github 页面的链接:

    【讨论】:

    • 谢谢!这似乎确实有效。我正在使用 Julia v0.6.0 并且能够获得模型的完整输出。它不想使用fast=true 运行,但给出了与 R 中的 lmer 大致相同的结果(通常,我看到一些变化,所以无法判断这是由于重新定义了计算还是正常行为)。不确定 Cholesky 分解,但随机效应的相关性与 R 相比是关闭的。
    猜你喜欢
    • 2019-09-05
    • 2018-05-10
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多