From 8bd70e6882ceb24907896e2b6c5f69cc745e1fea Mon Sep 17 00:00:00 2001 From: PharmCat Date: Sat, 9 Jan 2021 16:27:30 +0300 Subject: [PATCH] update --- .gitignore | 2 +- src/gmat.jl | 2 +- src/rmat.jl | 6 ++-- test/ar.jl | 17 +++++----- test/berds.jl | 9 +++--- test/lme4.jl | 17 ++++++---- test/precompile/metida_compiles.log | 0 test/snoopy.jl | 2 +- test/testdata.jl | 8 ++--- test/warn.jl | 50 +++++++++++++++++++++++------ 10 files changed, 74 insertions(+), 39 deletions(-) create mode 100644 test/precompile/metida_compiles.log diff --git a/.gitignore b/.gitignore index bee34859..6b9f2d28 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ src/temp.jl -test/precompile/ +#test/precompile/ test/devtest.jl examples/ docs/build/ diff --git a/src/gmat.jl b/src/gmat.jl index ff7cfc91..3b8801dc 100644 --- a/src/gmat.jl +++ b/src/gmat.jl @@ -28,7 +28,7 @@ function gmat_switch!(G, θ, covstr, i) elseif covstr.random[i].covtype.s == :ZERO gmat_zero!(G, similar(θ, 0), covstr.q[i], covstr.random[i].covtype) else - throw(ErrorException("Unknown covariance structure: $(covstr.random[i].covtype.s), n = $(i)")) + error("Unknown covariance structure!") end G end diff --git a/src/rmat.jl b/src/rmat.jl index a3188a1d..38a2c358 100644 --- a/src/rmat.jl +++ b/src/rmat.jl @@ -3,7 +3,7 @@ ################################################################################ ################################################################################ -function rmat_basep!(mx, θ::AbstractVector{T}, zrv, covstr) where T +function rmat_basep!(mx, θ::AbstractVector{T}, zrv, covstr::CovStructure{T2}) where T where T2 if covstr.repeated.covtype.s == :SI rmatp_si!(mx, θ, zrv, covstr.repeated.covtype) elseif covstr.repeated.covtype.s == :DIAG @@ -17,7 +17,7 @@ function rmat_basep!(mx, θ::AbstractVector{T}, zrv, covstr) where T elseif covstr.repeated.covtype.s == :CS rmatp_cs!(mx, θ, zrv, covstr.repeated.covtype) else - throw(ErrorException("Unknown covariance structure: $(covstr.repeated.covtype.s)")) + error("Unknown covariance structure!") end end ################################################################################ @@ -36,7 +36,7 @@ function rmat_basep_z!(mx, θ::AbstractVector{T}, zrv, covstr) where T elseif covstr.repeated.covtype.s == :CS rmatp_cs!(view(mx, covstr.block[end][i], covstr.block[end][i]), θ, view(covstr.rz, covstr.block[end][i], :), covstr.repeated.covtype) else - throw(ErrorException("Unknown covariance structure: $(covstr.repeated.covtype.s)")) + error("Unknown covariance structure!") end end mx diff --git a/test/ar.jl b/test/ar.jl index 21f743ca..e0d33950 100644 --- a/test/ar.jl +++ b/test/ar.jl @@ -5,8 +5,9 @@ REML 453.339544 =# df = CSV.File(path*"/csv/RepeatedPulse.csv") |> DataFrame df.Pulse = float.(df.Pulse) -categorical!(df, :Time); -categorical!(df, :Day); +transform!(df, :Time => categorical, renamecols=false) +transform!(df, :Day => categorical, renamecols=false) + @testset " RepeatedPulse.csv" begin lmm = Metida.LMM(@formula(Pulse~1), df; random = Metida.VarEffect(Metida.@covstr(Time), Metida.SI), @@ -14,14 +15,14 @@ categorical!(df, :Day); subject = :Time ) Metida.fit!(lmm) - @test lmm.result.reml ≈ 450.75260020816347 atol=1E-6 + @test lmm.result.reml ≈ 453.1926914954099 atol=1E-6 lmm = Metida.LMM(@formula(Pulse~1), df; repeated = Metida.VarEffect(Metida.@covstr(1), Metida.AR), subject = :Time ) Metida.fit!(lmm) - @test lmm.result.reml ≈ 462.66964037860635 atol=1E-6 + @test lmm.result.reml ≈ 470.5275730199629 atol=1E-6 end #= @@ -32,9 +33,9 @@ df = CSV.File(path*"/csv/ChickWeight.csv") |> DataFrame df.weight = float.(df.weight) df.Time = float.(df.Time) df.Time2 = copy(df.Time) -categorical!(df, :Time2); -categorical!(df, :Chick); -categorical!(df, :Diet); +transform!(df, :Time2 => categorical, renamecols=false) +transform!(df, :Chick => categorical, renamecols=false) +transform!(df, :Diet => categorical, renamecols=false) @testset " ChickWeight.csv" begin lmm = Metida.LMM(@formula(weight~1 + Diet & Time), df; random = Metida.VarEffect(Metida.@covstr(1), Metida.SI), @@ -42,7 +43,7 @@ categorical!(df, :Diet); subject = :Chick ) Metida.fit!(lmm) - @test lmm.result.reml ≈ 5453.137479692881 atol=1E-6 + @test lmm.result.reml ≈ 5451.857613990478 atol=1E-6 lmm = Metida.LMM(@formula(weight~1 + Diet & Time), df; random = Metida.VarEffect(Metida.@covstr(Diet), Metida.ARH), diff --git a/test/berds.jl b/test/berds.jl index c152c9c8..eb7fc71b 100644 --- a/test/berds.jl +++ b/test/berds.jl @@ -29,10 +29,11 @@ df = CSV.File(path*"/csv/berds/rds29.csv", types = Dict(:PK => Float64)) for i = 1:30 df = CSV.File(path*"/csv/berds/rds"*string(i)*".csv", types = Dict(:PK => Float64)) |> DataFrame dropmissing!(df) - categorical!(df, :subject); - categorical!(df, :period); - categorical!(df, :sequence); - categorical!(df, :treatment); + transform!(df, :subject => categorical, renamecols=false) + transform!(df, :period => categorical, renamecols=false) + transform!(df, :sequence => categorical, renamecols=false) + transform!(df, :treatment => categorical, renamecols=false) + df.lnpk = log.(df.PK) @testset " Test $(i)" begin diff --git a/test/lme4.jl b/test/lme4.jl index 9d06e1e1..60f3551c 100644 --- a/test/lme4.jl +++ b/test/lme4.jl @@ -1,8 +1,9 @@ df = CSV.File(path*"/csv/lme4/sleepstudy.csv") |> DataFrame -categorical!(df, :Subject); -categorical!(df, :Days); +transform!(df, :Subject => categorical, renamecols=false) +transform!(df, :Days => categorical, renamecols=false) + #= SPSS @@ -19,8 +20,9 @@ end df = CSV.File(path*"/csv/lme4/Penicillin.csv") |> DataFrame df.diameter = float.(df.diameter) -categorical!(df, :plate); -categorical!(df, :sample); +transform!(df, :plate => categorical, renamecols=false) +transform!(df, :sample => categorical, renamecols=false) + @testset " Penicillin.csv" begin lmm = Metida.LMM(@formula(diameter~1), df; @@ -32,9 +34,10 @@ end df = CSV.File(path*"/csv/lme4/Pastes.csv") |> DataFrame -categorical!(df, :batch); -categorical!(df, :cask); -categorical!(df, :sample); +transform!(df, :batch => categorical, renamecols=false) +transform!(df, :sample => categorical, renamecols=false) +transform!(df, :cask=> categorical, renamecols=false) + @testset " Pastes.csv" begin lmm = Metida.LMM(@formula(strength~1), df; random = [Metida.VarEffect(Metida.SI, subj = :batch), Metida.VarEffect(Metida.SI, subj = [:batch, :cask])] diff --git a/test/precompile/metida_compiles.log b/test/precompile/metida_compiles.log new file mode 100644 index 00000000..e69de29b diff --git a/test/snoopy.jl b/test/snoopy.jl index beafea2a..d11e23c4 100644 --- a/test/snoopy.jl +++ b/test/snoopy.jl @@ -3,7 +3,7 @@ using SnoopCompile path = dirname(@__FILE__) cd(path) -inf_timing = @snoopi tmin=0.0001 include("test.jl") +inf_timing = @snoopi tmin=0.000001 include("test.jl") pc = SnoopCompile.parcel(inf_timing) SnoopCompile.write("precompile", pc) diff --git a/test/testdata.jl b/test/testdata.jl index adbaa726..99a663d7 100644 --- a/test/testdata.jl +++ b/test/testdata.jl @@ -2,7 +2,7 @@ #Simple dataset df0 = CSV.File(path*"/csv/df0.csv") |> DataFrame -categorical!(df0, :subject); -categorical!(df0, :period); -categorical!(df0, :sequence); -categorical!(df0, :formulation); +transform!(df0, :subject => categorical, renamecols=false) +transform!(df0, :period => categorical, renamecols=false) +transform!(df0, :sequence => categorical, renamecols=false) +transform!(df0, :formulation=> categorical, renamecols=false) diff --git a/test/warn.jl b/test/warn.jl index d91dbfa2..cf7bfdad 100644 --- a/test/warn.jl +++ b/test/warn.jl @@ -1,17 +1,47 @@ +#Code warntype +@code_warntype Metida.reml_sweep_β3(lmm, lmm.result.theta) -lmm = Metida.LMM(@formula(var~sequence+period+formulation), df; -random = [Metida.VarEffect(Metida.@covstr(formulation), Metida.CSH)], -repeated = Metida.VarEffect(Metida.@covstr(formulation), Metida.VC), -subject = :subject) +@code_typed Metida.reml_sweep_β3(lmm, lmm.result.theta) -lmmr = Metida.fit!(lmm) +@code_warntype Metida.gmat_base(lmm.result.theta, lmm.covstr) -@code_warntype Metida.reml_sweep_β(lmm, lmm.result.theta) +@code_typed Metida.gmat_base(lmm.result.theta, lmm.covstr) -@code_typed Metida.reml_sweep_β(lmm, lmm.result.theta) +V = [1. 2 3 4; +1 2 3 3; +9 8 2 1; +1 2 1 2] -V = [1 2 3 4; 1 2 3 3; 9 8 2 1; 1 2 1 2] -@code_warntype Metida.rmat_basep!(V, lmm.result.theta[lmm.covstr.tr[end]], lmm.data.zrv[1], lmm.covstr) +@code_warntype Metida.rmat_basep!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.data.block[1],:), lmm.covstr) -@code_warntype Metida.gmat_base(lmm.result.theta, lmm.covstr) +@code_warntype Metida.gmat_base_z2!(V, lmm.result.theta, lmm.covstr, lmm.data.block[1], lmm.covstr.sblock[1]) + +@code_warntype Metida.rmat_basep_z2!(V, lmm.result.theta[lmm.covstr.tr[end]], lmm.covstr, lmm.data.block[1], lmm.covstr.sblock[1]) + +@code_warntype Metida.rmatp_si!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + +@code_typed Metida.rmatp_si!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + +@code_warntype Metida.rmatp_diag!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + +@code_warntype Metida.rmatp_csh!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + +@code_warntype Metida.rmatp_cs!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + +@code_warntype Metida.rmatp_ar!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + +@code_warntype Metida.rmatp_arh!(V, lmm.result.theta[lmm.covstr.tr[end]], view(lmm.covstr.rz, lmm.covstr.block[end][1], :), lmm.covstr.repeated.covtype) + + +G = [1. 2.; +2. 3.] +@code_warntype Metida.gmat_si!(G, lmm.result.theta[lmm.covstr.tr[1]], lmm.covstr.q[1], lmm.covstr.random[1].covtype) + +@code_warntype Metida.gmat_diag!(G, lmm.result.theta[lmm.covstr.tr[1]], lmm.covstr.q[1], lmm.covstr.random[1].covtype) + +@code_warntype Metida.gmat_csh!(G, lmm.result.theta[lmm.covstr.tr[1]], lmm.covstr.q[1], lmm.covstr.random[1].covtype) + +@code_warntype Metida.gmat_cs!(G, lmm.result.theta[lmm.covstr.tr[1]], lmm.covstr.q[1], lmm.covstr.random[1].covtype) + +@code_warntype Metida.gmat_ar!(G, lmm.result.theta[lmm.covstr.tr[1]], lmm.covstr.q[1], lmm.covstr.random[1].covtype)