Julia 混合效应模型中随机斜率的相互作用
Interaction of random slopes in mixed-effects models in Julia
是否可以在 Julia 中拟合 LMM 中的随机效应相互作用?
这会报错
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)
请注意,当您对固定效果进行交互时,不会出现任何问题。
也许这应该是 MixedModels.jl 或 DataFrames.jl github 中的一个问题。但是,无论如何,我已经找到了似乎有问题的地方:@formula
的 eterms
的计算。所以,为了让它工作,我重新定义了计算。将以下内容粘贴到 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 中拟合 LMM 中的随机效应相互作用?
这会报错
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)
请注意,当您对固定效果进行交互时,不会出现任何问题。
也许这应该是 MixedModels.jl 或 DataFrames.jl github 中的一个问题。但是,无论如何,我已经找到了似乎有问题的地方:@formula
的 eterms
的计算。所以,为了让它工作,我重新定义了计算。将以下内容粘贴到 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 页面的链接: