-
Notifications
You must be signed in to change notification settings - Fork 49
Open
Description
Models that are run with PRAXIS as the optimizer will not terminate. In the simple example below, the model will spin indefinitely but if manually stopped, it will return the expected coefficients. BOBYQA works correctly in this case.
Version Info:
Julia Version 1.9.1
Commit 147bdf428cd (2023-06-07 08:27 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin22.4.0)
CPU: 10 × Apple M1 Pro
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, westmere)
Threads: 1 on 10 virtual cores
Environment:
JULIA_PROJECT = /Users/liam/Development/attribution-engine/ma-model/SignConstrainedMixedModels
Example code:
using MixedModels, DataFrames, Random
# Arrange
id1 = Int[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4]
var1 = Float64[
-0.968,
-1.568,
-4.101,
2.616,
2.658,
1.352,
3.836,
-0.234,
-1.257,
-0.482,
3.810,
-2.812,
1.382,
-4.764,
3.977,
1.302,
2.186,
-4.237,
4.803,
-1.026,
]
var2 = Float64[
2.633,
2.565,
2.685,
2.661,
0.048,
1.285,
2.127,
1.687,
1.542,
0.932,
1.650,
2.239,
0.239,
0.247,
0.989,
1.800,
0.667,
1.412,
2.497,
2.004,
]
var3 = Float64[
-4.805,
-4.048,
-2.160,
-0.233,
-2.655,
-2.062,
-0.395,
-2.706,
-3.509,
-2.800,
-2.927,
-1.843,
-2.401,
-3.332,
-1.413,
-4.351,
-4.917,
-0.977,
-0.303,
-1.072,
]
vol = [
0.25 * var1[1:5] + 0.3 * var2[1:5] + -0.6 * var3[1:5]
0.15 * var1[6:10] + 0.3 * var2[6:10] + -0.6 * var3[6:10]
0.05 * var1[11:15] + 0.3 * var2[11:15] + -0.6 * var3[11:15]
-0.05 * var1[16:20] + 0.3 * var2[16:20] + -0.6 * var3[16:20]
]
noise = rand(MersenneTwister(5234325), size(vol, 1))
vol = vol .+ noise
data = DataFrames.DataFrame(id1 = id1, var1 = var1, var2 = var2, var3 = var3, vol = vol)
f = @formula(vol ~ 1 + var1 + var3 + var2 + (0 + var1 | id1))
model = LinearMixedModel(f, data)
model.optsum.optimizer = :LN_PRAXIS
model_fit = fit!(model)Metadata
Metadata
Assignees
Labels
No labels