Commit aa1fcf6
Release/v0.3.0 (#211)
* CommutationMatrix type
replace comm_matrix helper functions with a CommutationMatrix and overloaded linalg ops
* simplify elimination_matrix()
* simplify duplication_matrix()
* add tests for commutation/dublication/elimination matrices
* small unit test fixes
* commutation_matrix * vec method
* more comm_matrix tests
* SemSpecification base type
* SemSpecification: use in methods
* rename identifier -> param
* identifier() -> param_indices() (Dict{Symbol, Int})
* get_identifier_indices() -> param_to_indices() (Vector{Int})
* parameters -> params (Vector{Symbol})
* ParTable: columns[:identifier] => columns[:param]
* getindex(EnsParTable, i) instead of get_group()
* replace no-op ctors with convert(T, obj)
convert() is a proper method to call to avoid unnecessary construction,
ctor semantics requires that a new object is constructed
* ParamTable: convert vars from Dict to fields
make the type immutable
* ParamTable: update StenGraph-based ctor
* use graph as a main parameter
* simplify rows processing
* don't reallocate table.columns
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* rename Base.sort() to sort_vars()
because the ParTable contains rows and columns, it is not clear,
what sort() actually sorts.
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* don't import ==
* don't import push!()
* don't import DataFrame
* remove no-op push!()
* ParTable ctor: simplify rows code
* use named tuples
* reduce code duplication
* use colnames vector instead of position_names Dict
* ParTable: full support for Iterator iface
* RAMConstant: simplify
* declare RAMConstant field types
* refactor constants collection to avoid code duplication
* RAMMatrices: optimize F_indices init
* RAMMatrices: declare types for all fields
* RAMMatrices: option to keep zero constants
* nonunique() helper function
* add check_vars() and check_params()
* RAMMatrices ctor: dims and vars checks
* RAMMatrices: cleanup params index
* simplify parameters() function to return just a vector of params
* RAMMatrices ctor: use check_params()
* include RAMMatrices before EnsParTable
* fix EnsParTable to Dict{RAMMatrices} convert
* this method is not RAMMatrices ctor, it is
Dict{K, RAMMatrices} convert
* use comprehension to construct dict
* DataFrame(EnsParTable)
* params() API method
* remove n_par.jl
* remove identifier.jl
* EnsParTable ctor: enforce same params in tables
* fix EnsParTable container to Dict{Symbol, ParTable}
* don't use keywords for main params as it complicates dispatch
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* formatting fixes
* ParTable ctor: allow providing columns data
* update_partable!() cleanup + docstring
* update_partable!(): SemFit methods use basic one
* ParTable: add explicit params field
* n_par() -> nparams()
for clarity and aligning to Julia naming conventions
* param_values(ParTable)
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* lavaan_param_values(lav_fit, partable)
* compare_estimates() -> test_estimates()
* do tests inside
* use param_values()/lavaan_param_values()
* update_partable!(): dict-based generic version
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* ParTable: getindex() returns NamedTuple
so the downstream code doesn't rely on the order of tuple elements
* ParTable: graph-based ctor supports params= kw
* rename parameter_type to relation
for clarity
* sem_summary(): cleanup filters
* fix sem_summary method for partable
* show(ParTable): suppress NaNs
* sort_vars!(ParTable): cleanup
* Project.toml: disable SymbolicUtils 1.6
causes problems with sparsehessian().
It is a temporary fix until the compatibility issues are resolved in Symbolics.jl
* Project.toml: support StenoGraphs 0.3
* RAM ctor: better error for missing meanstruct
* add function param_indices
* start fixing docs
* fix regularization docs
* introduce formatting error
* update_start(): fix docstring typo
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* push!(::ParTable, Tuple): check keys compat
Co-authored-by: Maximilian-Stefan-Ernst <[email protected]>
* SemObsCov ctor: restrict n_obs to integer
don't allow missing n_obs
* fixup param_indices()
* common.jl: common vars API methods
* SemSpecification: vars API
* RAMMatrices: vars API
* ParamTable: vars API
* SemImply: vars and params API
* RAM imply: use vars API
* RAMSymbolic: use vars API
* start_simple(): use vars API
* starts_fabin3: use vars API
* remove get_colnames()
replaced by observed_vars()
* remove get_n_nodes()
replaced by nvars()
* get_data() -> samples()
and add default implementation samples(::SemObserved)
* SemObsData: remove rowwise
* it is unused
* if ever rowwise access would be required,
it could be done with eachrow(data)
without allocation
* AbstractSemSingle: vars API
* rename n_obs() -> nsamples()
* rename n_man() -> nobserved_vars()
for missing data pattern: nobserved_vars() -> nmeasured_vars(),
obs_cov/obs_mean -> measured_cov/measured_mean
* move Sem methods out of types.jl
* rows(::SemObservedMissing) -> pattern_rows()
* fix formatting
* samples(SemObsCov) throws an exception
* SemObserved tests: refactor and add var API tests
* ParTable(graph): group is only valid for ensemble
* ParTable(graph): fix NaN modif detection
* export vars, params and observed APIs
* refactor SemSpec tests
* add Sem unit tests
* dont allow fixed and labeled parameters
* add test for labeled and fixed parameters
* remove get_observed()
does not seem to be used anywhere;
also the method signature does not match Julia conventions
* fix ridge eval
* MeanStructure, HessianEvaluation traits
* replace has_meanstrcture and approximate_hessian fields with trait-like typeparams
* remove methods for has_meanstructure-based dispatch
* obj/grad/hess: refactor evaluation API
the intent of this commit is to refactor the API for objective,
gradient and hessian evaluation, such that the evaluation code
does not have to be duplicates across functions that calculate different
combinations of those functions
* introduce EvaluationTargets class that handles selection of what to evaluate
* add evaluate!(EvalTargets, ...) methods for loss and imply objs
that evaluate only what is required
* objective!(), obj_grad!() etc calls are just a wrapper of evaluate!() with proper targets
* se_hessian(): rename hessian -> method
for clarity
* se_hessian!(): optimize calc
* explicitly use Cholesky factorization
* H_scaling(): cleanup
remove unnecesary arguments
* SemOptOptim: remove redundant sem_fit()
by dispatching over optimizer
* SemOptNLopt: remove redundant sem_fit()
by dispatching over optimizer
* SemOptOptim: use evaluate!() directly
no wrapper required
* SemOptNLopt: use evaluate!() directly
* SemWLS: dim checks
* fixup formatting
* WLS: use 5-arg mul!()
to reduce allocations
* ML: use 5-arg mul!()
to reduce allocations
* FIML: use 5-arg mul!
to avoid extra allocation
* fix the error message
Co-authored-by: Maximilian Ernst <[email protected]>
* HessianEvaluation -> HessianEval
* MeanStructure -> MeanStruct
* SemImply: replace common type params with fields
* close #216
* close #205
* update EnsembleParameterTable docs and add methods for par table equality
* close #213
* close #157
* add method for
* format
* increase test sample size
* Project.toml: update Symbolics deps
* tests/examples: import -> using
no declarations, so import is not required
* add ParamsArray
replaces RAMMatrices indices and constants vectors with dedicated class
that incapsulate this logic,
resulting in overall cleaner interface
A_ind, S_ind, M_ind become ParamsArray
F_ind becomes SparseMatrixCSC
parameters.jl is not longer required and is removed
* materialize!(Symm/LowTri/UpTri)
* ParamsArray: faster sparse materialize!
* ParamsArray: use Iterators.flatten() (faster)
* Base.hash(::ParamsArray)
* colnames -> vars
* update_partable!(): better params unique check
* start_fabin3: check obs_mean data & meanstructure
* params/vars API tweaks and tests
* generic imply: keep F sparse
* tests helper: is_extended_tests()
to consolidate ENV variable check
* Optim sem_fit(): use provided optimizer
* prepare_start_params(): arg-dependent dispatch
* convert to argument type-dependent dispatch
* replace start_val() function with
prepare_start_params()
* refactor start_parameter_table() into
prepare_start_params(start_val::ParameterTable, ...)
and use the SEM model param indices
* unify processing of starting values by all optimizers
* support dictionaries of values
* prepare_param_bounds() API for optim
* u/l_bounds support for Optim.jl
* SemOptimizer(engine = ...) ctor
* SEMNLOptExt for NLopt
* NLopt: sem_fit(): use provided optimizer
* SEMProximalOptExt for Proximal opt
* merge diff/*.jl optimizer code into optimizer/*.jl
* Optim: document u/l bounds
* remove unused options field from Proximal optimizer
* decouple optimizer from Sem model
Co-authored-by: Maximilian Ernst <[email protected]>
* fix inequality constraints test
NLopt minimum was 18.11, below what the test expected
* add ProximalSEM tests
* optim/documentation.jl: rename to abstract.jl
* ext: change folder layout
* Project.toml: fix ProximalOperators ID
* docs: fix nsamples, nobserved_vars
* cleanup data columns reordering
define a single source_to_dest_perm() function
* SemObservedCov: def as an alias of SemObservedData
reduces code duplication;
also annotate types of ctor args
now samples(SemObsCov) returns nothing
* SemObserved: store observed_vars
add observed_vars(data::SemObserved)
* nsamples(observed::SemObserved): unify
* FIML: simplify index generation
* SemObservedMissing: refactor
* use SemObsMissingPattern struct to
simplify code
* replace O(Nvars^2) common pattern detection
with Dict{}
* don't store row-wise, store sub-matrices
of non-missing data instead
* use StatsBase.mean_and_cov()
* remove cov_and_mean(): not used anymore
StatsBase.mean_and_cov() is used instead
* SemObserved: unify data preparation
- SemObservedData: parameterize by cov/mean eltype
instead of the whole container types
Co-authored-by: Maximilian Ernst <[email protected]>
* tests: update SemObserved tests
to match the update data preparation behaviour
* prep_data: warn if obs_vars order don't match spec
* SemObsData: observed_var_prefix kwarg
to specify the prefix of the generated observed_vars
if none provided could be inferred, defaults to :obs
* ParTable: add graph-based kw-only constructor
* Project.toml: fix ProximalAlgorithms to 0.5
v0.7 changed the diff interface (v0.6 was skipped)
* switch to ProximalAlgorithms.jl v0.7
also drop ProximalOperators and ProximalCore weak deps
* move params() to common.jl
it is available for many SEM types, not just SemSpec
* RAM ctor: use random parameters instead of NaNs
to initialize RAM matrices
simplify check_acyclic()
* move check_acyclic() to abstract.jl
add verbose parameter
* AbstractSem: improve imply/observed API redirect
* imply -> implied, SemImply -> SemImplied
* imply -> implied: file renames
* close #158
* close #232
* Update ext/SEMProximalOptExt/ProximalAlgorithms.jl
* suppress uninformative warnings during package testing
* turn simplification of symbolic terms by default off
* new version of StenoGraph results in fewer deprication notices
* fix exporting structs from package extensions
* fix NLopt extension
* fix Proximal extension
* fix printing
* fix regularization docs
* start reworking docs
* finish rewriting docs
* rm ProximalSEM from docs deps
* fix docs
* fix docs
* try to fix svgs for docs
* try to fix svgs for docs
* update README
* bump version
* give macos some slack and format
---------
Co-authored-by: Alexey Stukalov <[email protected]>
Co-authored-by: Alexey Stukalov <[email protected]>
Co-authored-by: Alexey Stukalov <[email protected]>
Co-authored-by: Alexey Stukalov <[email protected]>
Co-authored-by: Aaron Peikert <[email protected]>1 parent 131523a commit aa1fcf6
File tree
122 files changed
+5618
-5556
lines changed- docs
- src
- assets
- developer
- internals
- performance
- tutorials
- backends
- collection
- constraints
- construction
- fitting
- inspection
- regularization
- specification
- ext
- SEMNLOptExt
- SEMProximalOptExt
- src
- additional_functions
- start_val
- diff
- frontend
- fit
- fitmeasures
- standard_errors
- specification
- implied
- RAM
- imply/RAM
- loss
- ML
- WLS
- constant
- regularization
- observed
- optimizer
- package_extensions
- test
- examples
- multigroup
- political_democracy
- proximal
- recover_parameters
- unit_tests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
122 files changed
+5618
-5556
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | 15 | | |
17 | 16 | | |
18 | 17 | | |
| |||
22 | 21 | | |
23 | 22 | | |
24 | 23 | | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
28 | | - | |
| 27 | + | |
| 28 | + | |
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | | - | |
| 39 | + | |
| 40 | + | |
39 | 41 | | |
40 | 42 | | |
41 | 43 | | |
42 | 44 | | |
43 | 45 | | |
44 | 46 | | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| 38 | + | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | | - | |
| 35 | + | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| |||
Loading
Loading
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
This file was deleted.
0 commit comments