- Import grain data from Excel files
- Perform kernel density estimation on grain data by sinks and features
- Decompose sink distributions into weighted combination of sources
- Label grains based on learned sources
- Plot kernel densities, sink, and source distributions
Our main numerical experiment can be found in knownsources median bandwidth.jl
under the examples
folder.
The data used in our main numerical experiment knownsources median bandwidth.jl
can be found here under data/sundell2022
. The exact grains selected and number of grains from each sink can be found in data/20sinks from 3Sources from Sundell et al 2022.xlsx
.
The data handling and backend functions can be found in src/SedimentTools
.
Our main decomposition algorithm can be found in the more general repo MatrixTensorFactor.jl.
- Go to https://github.com/njericha/SedimentSourceAnalysis.jl
- Click "<> Code" and press "+" to "Create a codespace on main". It make take a few moments to set up.
- Open the command palett with
Ctrl+Shift+P
(Windows) orCmd+Shift+P
(Mac) - Enter
>Julia: Start REPL
- In the REPL, resolve any dependency issues with
pkg> resolve
andpkg> instantiate
(usejulia> ]
to get to the package manager). It may take a few minutes to download dependencies.
Run one of the example files by opening the file and pressing the triangular "run" button, or >Julia: Execute active File in REPL
.
OR
- Clone the repo at https://github.com/njericha/SedimentSourceAnalysis.jl
- Navigate to the root of the repository in a terminal and run
julia
- Activate the project with
pkg> activate .
(usejulia> ]
to get to the package manager) - resolve any dependency issues with
pkg> resolve
Type julia> using SedimentSourceAnalysis
load the package, or using SedimentSourceAnalysis.SedimentTools
to load the submodule directly.
See the examples
folder for the following files.
knownsources median bandwidth.jl
: Uses data from Sundel et al where we know the sources of each Grain. Use this to see how well the factorization performs with realistic data.
knownsources.jl
: Similar to knownsources median bandwidth.jl
, but uses the bandwidth from the first sink.
measurementcorrelation.jl
: Checks the validity of representing the grain distributions as a product distribution. In particular, we would like the measurements to be independent.
unknownsources.jl
: Uses data from Lee et al where we don't have a ground truth. Showcases how the method would be used in practice.
randomtensor.jl
: Factorizes a random 50x50x50 tensor. See how the factorization performs in theory when a perfect factorization exists.
The main submodule of this repo is SedimentTools. The submodule MTF has been moved to a separate repo MatrixTensorFactor.
Holds various types at the [Grain
], and [Sink
] level, importing ([read_raw_data
]) and processing data ([make_densities
]) functions, and additional methods of some Plots.jl functions for visualization with these custom types.
Defines the main factorization function nnmtf
and related mathematical functions. See the repo here MatrixTensorFactor.jl.
If you find this repo helpful, please cite the associated paper:
@misc{graham_tracing_2024,
title = {Tracing {Sedimentary} {Origins} in {Multivariate} {Geochronology} via {Constrained} {Tensor} {Factorization}},
url = {https://friedlander.io/publications/2024-sediment-source-analysis/},
author = {Graham, Naomi and Richardson, Nicholas and Friedlander, Michael P. and Saylor, Joel},
month = may,
year = {2024},
}
or feel free to reach out to us with an email to njericha at math.ubc.ca.