Giter VIP home page Giter VIP logo

jellyme4.jl's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar palday avatar tristan-siegfried avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

jellyme4.jl's Issues

support `zerocorr` and `||`

This should be straightforward with a term re-write. || just results in a formula where each RE LHS is gets its own RE unit. zerocorr might require figuring out the names of the resultant model columns and then using || on that so that it doesn't look like a single factor.

  • ||
  • zerocorr with 2 levels or continuous
  • zerocorr with more than 2 level
  • zerocorr! ? (this would have to be detected from the RE structure itself and not the formula) zerocorr! is getting removed

Turn off `check.nobs.vs.nRE` lme4-control parameter

In lme4 it is sometimes necessary and justified to explicity set control=lmerControl(check.nobs.vs.nRE="ignore"). Currently, when moving such a MixedModel object to R , this triggers:

ERROR: REvalError: Error: number of observations (...); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable

I would appreciate if this control parameter could be turned off or changed to a warning, possibly there are also other parameters of this kind.

TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.

If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.

If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

issue transferring GLMM to R

I'm having an issue getting model fits to R. I'm running a Generalized Linear Mixed Model with Bernoulli family. I get the following error from rput:

Error: Error happens in Julia.
ArgumentError: You must use a tuple with the data -- (MixedModel, DataFrame) -- not just a model
Stacktrace:
  [1] sexp(#unused#::Type{RCall.RClass{:merMod}}, x::GeneralizedLinearMixedModel{Float64, Bernoulli{Float64}})
    @ JellyMe4 ~/.julia/packages/JellyMe4/7jeDZ/src/merMod.jl:17
  [2] sexp(s::GeneralizedLinearMixedModel{Float64, Bernoulli{Float64}})
    @ RCall ~/.julia/packages/RCall/gOwEW/src/convert/default.jl:214
  [3] setindex!(s::Ptr{VecSxp}, value::GeneralizedLinearMixedModel{Float64, Bernoulli{Float64}}, key::Int64)
    @ RCall ~/.julia/packages/RCall/gOwEW/src/methods.jl:195
  [4] sexp(#unused#::Type{RCall.RClass{:list}}, a::Vector{Any})
    @ RCall ~/.julia/packages/RCall/gOwEW/src/convert/base.jl:300
  [5] sexp
    @ ~/.julia/packages/RCall/gOwEW/src/convert/default.jl:214 [inlined]
  [6] sexp(x::Tuple{GeneralizedLinearMixedModel{Float64, Bernoulli{Float64}}, DataFrame})
    @ Main.JuliaCall ~/Library/R/arm64/4.3/library/JuliaCall/julia/co

I also tried with the example from the JellyMe4 readme (m_machines and I get the same issue:

Error: Error happens in Julia.
ArgumentError: You must use a tuple with the data -- (MixedModel, DataFrame) -- not just a model
Stacktrace:
  [1] sexp(#unused#::Type{RCall.RClass{:merMod}}, x::LinearMixedModel{Float64})
    @ JellyMe4 ~/.julia/packages/JellyMe4/7jeDZ/src/merMod.jl:17
  [2] sexp(s::LinearMixedModel{Float64})
    @ RCall ~/.julia/packages/RCall/gOwEW/src/convert/default.jl:214
  [3] setindex!(s::Ptr{VecSxp}, value::LinearMixedModel{Float64}, key::Int64)
    @ RCall ~/.julia/packages/RCall/gOwEW/src/methods.jl:195
  [4] sexp(#unused#::Type{RCall.RClass{:list}}, a::Vector{Any})
    @ RCall ~/.julia/packages/RCall/gOwEW/src/convert/base.jl:300
  [5] sexp
    @ ~/.julia/packages/RCall/gOwEW/src/convert/default.jl:214 [inlined]
  [6] sexp(x::Tuple{LinearMixedModel{Float64}, DataFrame})
    @ Main.JuliaCall ~/Library/R/arm64/4.3/library/JuliaCall/julia/convert.jl:8
  [7] setindex!(e::Ptr{EnvSxp}, v::Tuple{LinearMixedModel{Float64}, DataFrame}, s::Symbol)
    @ RCall ~/.julia/p

I'm running julia from a quarto document mostly written in R in case that matters.

rput issue after package updates

I'm not sure if this is a RCall or JellyMe4 issue, but I can't use rput after a package update. I get an error about an unexpected '&'. I'm not able to find the & in the data file but I'm not doing anything different than before. Thanks for any guidance on this issue.

rt_m1j = (rt_m1, RTdata);
@rput rt_m1j
ERROR: RParseError: Error: unexpected '&'

Here is my package list:

julia> Pkg.status()
      Status `~/.julia/environments/v1.7/Project.toml
  [69666777] Arrow v2.3.0
  [336ed68f] CSV v0.10.4
  [a93c6f00] DataFrames v1.3.4
  [0b91fe84] DisplayAs v0.1.6
  [c91e804a] Gadfly v1.3.4
  [19ac8677] JellyMe4 v0.2.6
  [ff71e718] MixedModels v4.6.4
  [6f49c342] RCall v0.13.13
  [df47a6cb] RData v0.8.32cb19f9e] StatsKit v0.3.1

Factors containing ":" not supported

The following dataset contains ":" within a column of strings subid_unique and thus cannot be passed to R

using CSV, RCall
mb1 = CSV.read(
  download("https://raw.githubusercontent.com/manybabies/mb1-analysis-public/fa7e77c026a4dc0b0bb7e78d3bf3771c9bc2f7cb/processed_data/03_data_trial_main.csv"),
     missingstrings=["NA","N/A"],
     truestrings=["TRUE"],
     falsestrings=["FALSE"])

@rput mb1

using MixedModels, JellyMe4
m1form = @formula log(looking_time) ~ trial_type * method +
                    trial_type * trial_num +
                    age_mo * trial_num +
                    trial_type * age_mo * nae +
                    (1 | subid_unique) +
                    (1 | lab);
m1 = fit(MixedModel, m1form, mb1, REML=true)
m1_lmm = Tuple([m1, mb1]);

@rput m1_lmm
`ERROR: RParseError: Error: unexpected ':'`

Issues with @rput

Hi,

I have been running my statistical model the first time in Julia and want to save my model in order to load it into R for further plotting etc. However, I have issues when it comes to use @rput.

This is my code:

fit_uV =  @formula uV ~ (saggitality + laterality + condition + mention + bepoch) +
                                    (1 + condition + mention | subj) +
                                    (1 + mention | Report / text);

model_lme4 = fit(MixedModel, fit_uV, data)

model_for_r = (model_lme4, data);
@rput model_for_r

and this is the error message that I receive:

julia> @rput model_for_r
ERROR: type InteractionTerm has no field sym
Stacktrace:
 [1] convert_julia_to_r(f::StatsModels.FormulaTerm{StatsModels.ContinuousTerm{Float64}, Tuple{StatsModels.MatrixTerm{Tuple{StatsModels.InterceptTerm{true}, StatsModels.CategoricalTerm{DummyCoding, Matrix{Float64}, 2}, StatsModels.CategoricalTerm{DummyCoding, Matrix{Float64}, 2}, StatsModels.CategoricalTerm{DummyCoding, Matrix{Float64}, 1}, StatsModels.CategoricalTerm{DummyCoding, Matrix{Float64}, 4}, StatsModels.ContinuousTerm{Float64}}}, RandomEffectsTerm, RandomEffectsTerm, RandomEffectsTerm}})
   @ JellyMe4 ~/.julia/packages/JellyMe4/PqjLf/src/formula.jl:0
 [2] sexp(#unused#::Type{RCall.RClass{:lmerMod}}, x::Tuple{LinearMixedModel{Float64}, DataFrame})
   @ JellyMe4 ~/.julia/packages/JellyMe4/PqjLf/src/lmerMod.jl:93
 [3] sexp
   @ ~/.julia/packages/RCall/gOwEW/src/convert/default.jl:0 [inlined]
 [4] setindex!(e::Ptr{EnvSxp}, v::Tuple{LinearMixedModel{Float64}, DataFrame}, s::Symbol)
   @ RCall ~/.julia/packages/RCall/gOwEW/src/methods.jl:553
 [5] setindex!(e::RObject{EnvSxp}, v::Tuple{LinearMixedModel{Float64}, DataFrame}, s::Symbol)
   @ RCall ~/.julia/packages/RCall/gOwEW/src/methods.jl:562
 [6] top-level scope
   @ REPL[62]:1

Would be very grateful for any tips :)

install failure

I am absolutely clueless about this, but thought I would report it. This is on Pop!OS 22.04 (Ubuntu derivative), with Julia 1.8.2 (installed via sudo apt-get install julia), having successfully installed MixedModels ...

I have a suspicion that it may have to do with having installed R in the "wrong" way (compiler flags, shared library, etc.) - vague memory of something like this happening before?

R Under development (unstable) (2022-11-02 r83236) -- "Unsuffered Consequences"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
julia> Pkg.precompile()
Precompiling project...
  ✗ JellyMe4
  0 dependencies successfully precompiled in 4 seconds. 103 already precompiled.

ERROR: The following 1 direct dependency failed to precompile:

JellyMe4 [19ac8677-9a15-4623-9afd-84acc6165ce7]

Failed to precompile JellyMe4 [19ac8677-9a15-4623-9afd-84acc6165ce7] to /home/bolker/.julia/compiled/v1.8/JellyMe4/jl_OlsJbi.

signal (11): Segmentation fault
in expression starting at /home/bolker/.julia/packages/JellyMe4/IB8qZ/src/JellyMe4.jl:3
Rf_install at /usr/bin/../lib/libR.so (unknown line)
R_initMethodDispatch at /home/bolker/R/r-build/src/library/methods/src/../../../../../r-devel/src/library/methods/src/methods_list_dispatch.c:159
R_initMethodDispatch at /home/bolker/R/r-build/src/library/methods/src/../../../../../r-devel/src/library/methods/src/methods_list_dispatch.c:156
R_doDotCall at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/dotcode.c:868
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7682
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
forcePromise at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:568
FORCE_PROMISE at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5147 [inlined]
getvar at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:5188
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:6878
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
bcEval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:7094
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:748
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:871
Rf_evalList at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:3079
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:842
do_if at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:2237
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:823
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:823
do_begin at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:2529
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:823
R_execClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1918
Rf_applyClosure at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:1844
Rf_eval at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/eval.c:871
setup_Rmainloop at /home/bolker/R/r-build/src/main/../../../r-devel/src/main/main.c:1061
initEmbeddedR at /home/bolker/.julia/packages/RCall/Wyd74/src/setup.jl:151
__init__ at /home/bolker/.julia/packages/RCall/Wyd74/src/setup.jl:186
unknown function (ip: 0x7f6819115c74)
_jl_invoke at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/julia.h:1839 [inlined]
jl_module_run_initializer at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:75
ijl_init_restored_modules at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/dump.c:2602
_include_from_serialized at ./loading.jl:831
_require_search_from_serialized at ./loading.jl:1039
_require at ./loading.jl:1315
_require_prelocked at ./loading.jl:1200
macro expansion at ./loading.jl:1180 [inlined]
macro expansion at ./lock.jl:223 [inlined]
require at ./loading.jl:1144
jfptr_require_47742.clone_1 at /usr/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/julia.h:1839 [inlined]
call_require at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:462 [inlined]
eval_import_path at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:499
jl_toplevel_eval_flex at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:725
jl_eval_module_expr at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:203 [inlined]
jl_toplevel_eval_flex at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:709
jl_toplevel_eval_flex at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:850
ijl_toplevel_eval_in at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:965
eval at ./boot.jl:368 [inlined]
include_string at ./loading.jl:1428
_jl_invoke at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2549
_include at ./loading.jl:1488
include at ./Base.jl:419 [inlined]
include_package_for_output at ./loading.jl:1554
jfptr_include_package_for_output_34856.clone_1 at /usr/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/julia.h:1839 [inlined]
do_call at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/interpreter.c:126
eval_value at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/interpreter.c:215
eval_stmt_value at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/interpreter.c:166 [inlined]
eval_body at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/interpreter.c:612
jl_interpret_toplevel_thunk at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/interpreter.c:750
jl_toplevel_eval_flex at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:906
jl_toplevel_eval_flex at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:850
ijl_toplevel_eval_in at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/toplevel.c:965
eval at ./boot.jl:368 [inlined]
include_string at ./loading.jl:1428
include_string at ./loading.jl:1438
_jl_invoke at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2549
exec_options at ./client.jl:301
_start at ./client.jl:522
jfptr__start_56736.clone_1 at /usr/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/julia.h:1839 [inlined]
true_main at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/jlapi.c:575
jl_repl_entrypoint at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/src/jlapi.c:719
main at /cache/build/default-amdci4-6/julialang/julia-release-1-dot-8/cli/loader_exe.c:59
unknown function (ip: 0x7f681a829d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x401098)
Allocations: 3872811 (Pool: 3870630; Big: 2181); GC: 5
Stacktrace:
 [1] pkgerror(msg::String)
   @ Pkg.Types /usr/share/julia/stdlib/v1.8/Pkg/src/Types.jl:67
 [2] precompile(ctx::Pkg.Types.Context, pkgs::Vector{String}; internal_call::Bool, strict::Bool, warn_loaded::Bool, already_instantiated::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
   @ Pkg.API /usr/share/julia/stdlib/v1.8/Pkg/src/API.jl:1432
 [3] precompile
   @ /usr/share/julia/stdlib/v1.8/Pkg/src/API.jl:1063 [inlined]
 [4] #precompile#225
   @ /usr/share/julia/stdlib/v1.8/Pkg/src/API.jl:1062 [inlined]
 [5] precompile (repeats 2 times)
   @ /usr/share/julia/stdlib/v1.8/Pkg/src/API.jl:1062 [inlined]
 [6] top-level scope
   @ REPL[4]:1

contrast coding

Respect contrast coding when re-constructing models in the other language.

  • convert R contrasts() on a DataFrame to a contrasts Dict in Julia
  • convert Julia contrasts Dict to R contrasts
  • deal with contrasts= in lme4 (maybe just document lack of support?)

Problems with @rput

Hi

I've been having problems trying to use @rput to get a mixed effects model from Julia into R. To try to figure out what was going wrong, I ran the code from this tutorial: https://docs.juliahub.com/JellyMe4/xBPpY/0.1.2/ "Fitting a model in Julia and moving it to R". But I got the same error as I got when trying the same thing with my own model: The model runs fine, but when I try @rput it says it needs a Tuple. But it is a Tuple?!

julia> using MixedModels, RCall, JellyMe4
julia> machines = rcopy(R"nlme::Machines")
54×3 DataFrame
│ Row │ Worker │ Machine │ score   │
│     │ Cat   │ Cat    │ Float64 │
├─────┼────────┼─────────┼─────────┤
│ 11      │ A       │ 52.0    │
│ 21      │ A       │ 52.8    │
│ 31      │ A       │ 53.1    │
│ 42      │ A       │ 51.8    │
│ 52      │ A       │ 52.8    │
│ 62      │ A       │ 53.1    │
│ 73      │ A       │ 60.0474      │ C       │ 66.2    │
│ 484      │ C       │ 64.0    │
│ 495      │ C       │ 72.1    │
│ 505      │ C       │ 72.0    │
│ 515      │ C       │ 71.1    │
│ 526      │ C       │ 62.0    │
│ 536      │ C       │ 61.4    │
│ 546      │ C       │ 60.5    │
  
julia> m = fit(MixedModel, @formula(score ~ 1 + Machine + (1 + Machine|Worker)), machines)
Linear mixed model fit by maximum likelihood
 score ~ 1 + Machine + (1 + Machine | Worker)
   logLik   -2 logLik     AIC       AICc        BIC    
  -108.2089   216.4178   236.4178   241.5341   256.3077

Variance components:
            Column    Variance Std.Dev.   Corr.
Worker   (Intercept)  13.817604 3.717204
         Machine: B   28.684965 5.355835 +0.49
         Machine: C   11.240978 3.352757 -0.36 +0.30
Residual               0.924634 0.961579
 Number of obs: 54; levels of grouping factors: 6

  Fixed-effects parameters:
──────────────────────────────────────────────────
                Coef.  Std. Error      z  Pr(>|z|)
──────────────────────────────────────────────────
(Intercept)  52.3556      1.53437  34.12    <1e-99
Machine: B    7.96667     2.20988   3.61    0.0003
Machine: C   13.9167      1.40579   9.90    <1e-22
──────────────────────────────────────────────────
  
julia> m_machines = Tuple([m, machines]);
julia> @rput m_machines;
Error happens in Julia.
ArgumentError: You must use a tuple with the data -- (MixedModel, DataFrame) -- not just a model
Stacktrace:
 [1] sexp(::Type{RCall.RClass{:merMod}}, ::LinearMixedModel{Float64}) at /Users/benambridge/.julia/packages/JellyMe4/ZhG68/src/merMod.jl:17
 [2] sexp(::LinearMixedModel{Float64}) at /Users/benambridge/.julia/packages/RCall/eRsxl/src/convert/default.jl:214
 [3] setindex!(::Ptr{VecSxp}, ::LinearMixedModel{Float64}, ::Int64) at /Users/benambridge/.julia/packages/RCall/eRsxl/src/methods.jl:188
 [4] sexp(::Type{RCall.RClass{:list}}, ::Array{Any,1}) at /Users/benambridge/.julia/packages/RCall/eRsxl/src/convert/base.jl:295
 [5] sexp at /Users/benambridge/.julia/packages/RCall/eRsxl/src/convert/default.jl:214 [inlined]
 [6] sexp(::Tuple{LinearMixedModel{Float64},DataFrames.DataFrame}) at /Library/Frameworks/R.framework/Versions/4.1/Resources/library/JuliaCall/julia/convert.jl:8
 [7] setindex!(::Ptr{EnvSxp}, ::Tuple{LinearMixedModel{Float64},DataFrames.DataFrame}, ::Symbol) at /Users/benambridge/.julia/packages/RCall/eRsxl/src/methods.jl:546
 [8] setindex!(::RObject{EnvSxp}, ::Tuple{LinearMixedModel{Float64},DataFrames.DataFrame}, ::Symbol) at /Users/benambridge/.julia/packages/RCall/eRsxl/src/methods.jl:555
 [9] top-level scope at none:1
 [10] eval(::Module, ::Any) at ./boot.jl:331
 [11] eval_string(::String) at /Library/Frameworks/R.framework/Versions/4.1/Resources/library/JuliaCall/julia/setup.jl:203
 [12] docall(::Ptr{Nothing}) at /Library/Frameworks/R.framework/Versions/4.1/Resources/library/JuliaCall/julia/setup.jl:176

Low Priority Projects

  • Trap / avoid the new lme4 warning about optimizer stop due to maxeval
  • Bring back categorical || @rget (cf. #37)
  • Improve CI runner cache
  • Fix Linux CI runner (GLIBCXX pain)

lmerMod support

Functionality:

  • lmerMod to LinearMixedModel
  • LinearMixedModel to lmerMod

Tests:

  • lmerMod to LinearMixedModel
  • LinearMixedModel to lmerMod

support fulldummy and dummy

  • ~~ dummy in FE~~ not happening, too much effort in wrangling contrasts for models going the wrong direction
  • dummy in RE not happening, too much effort in wrangling contrasts for models going the wrong direction
  • fulldummy in RE (may interact with JuliaStats/MixedModels.jl#268)
  • fullydummy in FE (not a thing)

Move away from Travis for CI

Their cheapest plan is waaaaay too expensive and their FOSS support has died. And that's even before we look at the extra costs for testing on Mac.

CI support

The difficulty here is that we need both R and Julia and several packages in each (lme4, MixedModels, RCall, dependencies).

CIs:

  • Travis Linux
  • Travis Mac
  • Appveyor

Problems getting the Satterthwaite or Kenward-Roger p values

Hi

I'm probably doing something really obvious wrong here, but I'm trying and failing to get lmerTest style p values calculated via Satterthwaite or Kenward-Roger ddf, but all I get is the lme4 style ones (approximated via the z distribution). Can anyone see what I'm doing wrong?

library(JuliaCall)
j=julia_setup() # Setup Julia
j$assign("Data", contextdata) # Copy the data from R into Julia

# Maximal model for Predictions 1 and 2
j$assign("Maximal1", Response ~ SentenceType/ContextType + (1+SentenceType/ContextType|Verb) + (1+SentenceType/ContextType|Participant)) #Get the formula into Julia
j$assign("Maximal2", Response ~ SentenceType*ContextType + (1+SentenceType*ContextType|Verb) + (1+SentenceType*ContextType|Participant)) #Get the formula into Julia

julia_console()
ENV["LMER"] = "lmerTest::lmer" # if you really need Satterthwaite or Kenward-Roger ddf
using MixedModels, RCall, JellyMe4 # Need to use JellyMe4 to use the lmerTest backend for the better p values
Julia_Model1 = fit(LinearMixedModel, Maximal1, Data) ###Hmm it still reports it as z and Pr(>|z|) - is it really using Satterthwaite or Kenward-Roger?
Julia_Model2 = fit(LinearMixedModel, Maximal2, Data) ###Hmm it still reports it as z and Pr(>|z|) - is it really using Satterthwaite or Kenward-Roger?

Thanks
Ben

JellyMe4 breaks MixedModels.jl when used through JuliaCall

I apologize for any ignorance on my part, as I'm far more well versed in R than I am in Julia. Been trying to come up with a way to run some large mixed models in Julia from R. I've noticed that when I load JellyMe4.jl, it breaks the fitting of mixed models using MixedModels.jl

dyn.load('C:\\Users\\edwar\\AppData\\Local\\Programs\\Julia-1.6.1\\bin\\libopenlibm.DLL')
julia.dir = JuliaCall::julia_setup(JULIA_HOME = 'C:\\Users\\edwar\\AppData\\Local\\Programs\\Julia-1.6.1\\bin')
#> Julia version 1.6.1 at location C:\Users\edwar\AppData\Local\Programs\JULIA-~1.1\bin will be used.
#> Loading setup script for JuliaCall...
#> Finish loading setup script for JuliaCall.
julia.dir$library("MixedModels")
julia.dir$library("RCall")
julia.dir$library("DataFrames")
julia.dir$library("StatsModels")
julia.dir$library("JellyMe4")
julia.dir$assign("dat",nlme::Machines)
julia.dir$eval("my_mod = fit(MixedModel, @formula(score ~ 1 + Machine + (1 + Machine|Worker)),dat)")
#> Error: Error happens in Julia.
#> ArgumentError: You must use a tuple with the data -- (MixedModel, DataFrame) -- not just a model
#> Stacktrace:
#>  [1] sexp(#unused#::Type{RCall.RClass{:merMod}}, x::LinearMixedModel{Float64})
#>    @ JellyMe4 C:\Users\edwar\.julia\packages\JellyMe4\rvLx5\src\merMod.jl:17
#>  [2] sexp(s::LinearMixedModel{Float64})
#>    @ RCall C:\Users\edwar\.julia\packages\RCall\3mHXJ\src\convert\default.jl:214
#>  [3] docall(call1::Ptr{Nothing})
#>    @ Main.JuliaCall C:\Users\edwar\Documents\R\win-library\4.1\JuliaCall\julia\setup.jl:185

Created on 2021-06-18 by the reprex package (v2.0.0)

If I call julia.dir$library("JellyMe4") after fitting the model, then the code behaves correctly until I try to fit the mixed model again, when the same error pops up.

dyn.load('C:\\Users\\edwar\\AppData\\Local\\Programs\\Julia-1.6.1\\bin\\libopenlibm.DLL')
julia.dir = JuliaCall::julia_setup(JULIA_HOME = 'C:\\Users\\edwar\\AppData\\Local\\Programs\\Julia-1.6.1\\bin')
#> Julia version 1.6.1 at location C:\Users\edwar\AppData\Local\Programs\JULIA-~1.1\bin will be used.
#> Loading setup script for JuliaCall...
#> Finish loading setup script for JuliaCall.
julia.dir$library("MixedModels")
julia.dir$library("RCall")
julia.dir$library("DataFrames")
julia.dir$library("StatsModels")
julia.dir$assign("dat",nlme::Machines)
julia.dir$eval("my_mod = fit(MixedModel, @formula(score ~ 1 + Machine + (1 + Machine|Worker)),dat)")
#> Julia Object of type LinearMixedModel{Float64}.
#> Linear mixed model fit by maximum likelihood
#>  score ~ 1 + Machine + (1 + Machine | Worker)
#>    logLik   -2 logLik     AIC       AICc        BIC    
#>   -108.2089   216.4178   236.4178   241.5341   256.3077
#> 
#> Variance components:
#>             Column    Variance Std.Dev.   Corr.
#> Worker   (Intercept)  13.817604 3.717204
#>          Machine: B   28.684965 5.355835 +0.49
#>          Machine: C   11.240978 3.352757 -0.36 +0.30
#> Residual               0.924634 0.961579
#>  Number of obs: 54; levels of grouping factors: 6
#> 
#>   Fixed-effects parameters:
#> --------------------------------------------------
#>                 Coef.  Std. Error      z  Pr(>|z|)
#> --------------------------------------------------
#> (Intercept)  52.3556      1.53437  34.12    <1e-99
#> Machine: B    7.96667     2.20988   3.61    0.0003
#> Machine: C   13.9167      1.40579   9.90    <1e-22
#> --------------------------------------------------
julia.dir$library("JellyMe4")
model = julia.dir$eval("robject(:lmerMod, Tuple([my_mod,dat]))", need_return="R")
print(model)
#> Linear mixed model fit by maximum likelihood  ['lmerMod']
#> Formula: score ~ 1 + Machine + (1 + Machine | Worker)
#>    Data: jellyme4_data
#>       AIC       BIC    logLik  deviance  df.resid 
#>  236.4178  256.3077 -108.2089  216.4178        44 
#> Random effects:
#>  Groups   Name        Std.Dev. Corr       
#>  Worker   (Intercept) 3.7172              
#>           MachineB    5.3558    0.49      
#>           MachineC    3.3528   -0.36  0.30
#>  Residual             0.9616              
#> Number of obs: 54, groups:  Worker, 6
#> Fixed Effects:
#> (Intercept)     MachineB     MachineC  
#>      52.356        7.967       13.917  
#> optimizer (LN_BOBYQA) convergence code: 5 (fit with MixedModels.jl) ; 0 optimizer warnings; 0 lme4 warnings
julia.dir$eval("my_mod = fit(MixedModel, @formula(score ~ 1 + Machine + (1 + Machine|Worker)),dat)")
#> Error: Error happens in Julia.
#> ArgumentError: You must use a tuple with the data -- (MixedModel, DataFrame) -- not just a model
#> Stacktrace:
#>  [1] sexp(#unused#::Type{RCall.RClass{:merMod}}, x::LinearMixedModel{Float64})
#>    @ JellyMe4 C:\Users\edwar\.julia\packages\JellyMe4\rvLx5\src\merMod.jl:17
#>  [2] sexp(s::LinearMixedModel{Float64})
#>    @ RCall C:\Users\edwar\.julia\packages\RCall\3mHXJ\src\convert\default.jl:214
#>  [3] docall(call1::Ptr{Nothing})
#>    @ Main.JuliaCall C:\Users\edwar\Documents\R\win-library\4.1\JuliaCall\julia\setup.jl:185

Created on 2021-06-18 by the reprex package (v2.0.0)

What's unusual to me is that the Julia-equivalent code to me seems to work just fine, ex.

julia> using MixedModels, RCall, DataFrames, StatsModels

julia> machines = rcopy(R"nlme::Machines")
54×3 DataFrame
 Row │ Worker  Machine  score
     │ Cat    Cat     Float64
─────┼──────────────────────────
   11       A           52.0
   21       A           52.8
   31       A           53.1
   42       A           51.8
   52       A           52.8
   62       A           53.1
   73       A           60.0
   83       A           60.2
   93       A           58.4
  104       A           51.1
  114       A           52.3
                  
  453       C           71.0
  464       C           64.1
  474       C           66.2
  484       C           64.0
  495       C           72.1
  505       C           72.0
  515       C           71.1
  526       C           62.0
  536       C           61.4
  546       C           60.5
                 33 rows omitted

julia> m = fit(MixedModel, @formula(score ~ 1 + Machine + (1 + Machine|Worker)), machines)
Linear mixed model fit by maximum likelihood
 score ~ 1 + Machine + (1 + Machine | Worker)
   logLik   -2 logLik     AIC       AICc        BIC
  -108.2089   216.4178   236.4178   241.5341   256.3077

Variance components:
            Column    Variance Std.Dev.   Corr.
Worker   (Intercept)  13.817604 3.717204
         Machine: B   28.684965 5.355835 +0.49
         Machine: C   11.240978 3.352757 -0.36 +0.30
Residual               0.924634 0.961579
 Number of obs: 54; levels of grouping factors: 6

  Fixed-effects parameters:
──────────────────────────────────────────────────
                Coef.  Std. Error      z  Pr(>|z|)
──────────────────────────────────────────────────
(Intercept)  52.3556      1.53437  34.12    <1e-99
Machine: B    7.96667     2.20988   3.61    0.0003
Machine: C   13.9167      1.40579   9.90    <1e-22
──────────────────────────────────────────────────

This very well might be an RCall bug, but given that this specific interaction occurs between JellyMe4.jl and MixedModels.jl, I thought to post this here first and see if I could get any insight into why this is happening.

glmerMod support for Bernoulli, Binomial, and Poisson

These are the model families without dispersion parameters.

Functionality:

  • glmerMod to GeneralizedLinearMixedModel
  • GeneralizedLinearMixedModel to glmerMod

Tests:

  • glmerMod to GeneralizedLinearMixedModel
  • GeneralizedLinearMixedModel to glmerMod

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.