从R调用Julia的GeneralizedLinearMixedModel报错求助
从R调用Julia的GeneralizedLinearMixedModel时报错的解决方向
背景
我尝试从R中调用Julia处理大型数据集,最初使用jglmm但生成的对象难以操作,改用JellyMe4调用LinearMixedModel处理线性模型效果良好。参考示例修改了jmer函数解决deparse相关问题后,尝试编写jmergen函数以调用GeneralizedLinearMixedModel(后续需使用Gamma分布和IdentityLink连接函数),但基础版本运行报错。
可复现代码
library(JuliaCall) options(JULIA_HOME = "/usr/local/bin") j = julia_setup() julia_library("MixedModels") julia_library("RCall") julia_library("JellyMe4") # 参考示例修改后的jmer函数 jmer <- function(formula, data, REML=TRUE){ # 需要更细致的deparse处理避免公式问题 jf <- paste(deparse(formula, width.cutoff = 500), collapse="") jreml = ifelse(REML, "true", "false") julia_assign("jmerdat",data) julia_command(sprintf("jmermod = fit!(LinearMixedModel(@formula(%s),jmerdat),REML=%s);",jf,jreml)) julia_eval("robject(:lmerMod, Tuple([jmermod,jmerdat]));",need_return="R") } # 尝试编写的jmergen函数 jmergen <- function(formula, data, REML=TRUE){ jf <- paste(deparse(formula, width.cutoff = 500), collapse="") jreml = ifelse(REML, "true", "false") julia_assign("jmerdat",data) julia_command(sprintf("jmermod = fit!(GeneralizedLinearMixedModel(@formula(%s),jmerdat),REML=%s);",jf,jreml)) julia_eval("robject(:lmerMod, Tuple([jmermod,jmerdat]));",need_return="R") } # 正常运行的线性混合模型 m1 <- jmer(Reaction ~ Days + (Days|Subject),lme4::sleepstudy) # 报错的广义线性混合模型 m2 <- jmergen(Reaction ~ Days + (Days|Subject),lme4::sleepstudy)
错误信息
Error: Error happens in Julia. MethodError: no method matching GeneralizedLinearMixedModel(::StatsModels.FormulaTerm{StatsModels.Term, Tuple{StatsModels.Term, StatsModels.FunctionTerm{typeof(|), var"#3#4", (:Days, :Subject)}}}, ::DataFrames.DataFrame) Closest candidates are: GeneralizedLinearMixedModel(::StatsModels.FormulaTerm, ::Any, !Matched::Distributions.Distribution) at ~/.julia/packages/MixedModels/jPOIo/src/generalizedlinearmixedmodel.jl:329 GeneralizedLinearMixedModel(::StatsModels.FormulaTerm, ::Any, !Matched::Distributions.Distribution, !Matched::GLM.Link; wts, offset, contrasts) at ~/.julia/packages/MixedModels/jPOIo/src/generalizedlinearmixedmodel.jl:329 GeneralizedLinearMixedModel(::StatsModels.FormulaTerm, !Matched::NamedTuple{names, T} where {N, names, T<:Tuple{Vararg{AbstractVector, N}}}, !Matched::Normal, !Matched::IdentityLink; wts, offset, contrasts) at ~/.julia/packages/MixedModels/jPOIo/src/generalizedlinearmixedmodel.jl:343 ... Stacktrace: [1] top-level
我显然犯了基础错误导致找不到匹配的GeneralizedLinearMixedModel方法,经过多番尝试仍未解决,恳请指点方向。
内容的提问来源于stack exchange,提问作者user20412
相关产品推荐
相关产品推荐

