Взаимодействие случайных наклонов в моделях смешанных эффектов в Юлии

Возможно ли иметь взаимодействия случайных эффектов в подгонке 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)

Обратите внимание, что нет проблем, когда у вас есть взаимодействие для фиксированных эффектов.

1 ответ

Решение

Может быть, это должно быть проблемой в MixedModels.jl или DataFrames.jl на github. Но, в любом случае, я выследил то, что кажется проблемой: вычисление 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

Теперь это оставило еще одну проблему с изменением функции разложения Холецкого (моя Юлия v0.7), которая также была исправлена, но в случае, если все остальное работало, переопределение выше позволяет продолжить после первой проблемы.

Вот ссылки на страницы github MixedModels и DataFrames:

Другие вопросы по тегам