From 53a84a2394fc2763ec1eaeff52474fc7a6263973 Mon Sep 17 00:00:00 2001 From: Deron Smith Date: Wed, 11 Sep 2024 09:58:17 -0400 Subject: [PATCH] added limitations and disclaimer to readme --- README.md | 21 +++++++++++++++++++++ esat/estimator.py | 2 +- img.png | Bin 0 -> 2757 bytes 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 img.png diff --git a/README.md b/README.md index 3d50b89..34f7a77 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,23 @@ ESAT includes constrained models, as found in PMF5, where selecting a source app Lastly, ESAT includes a data simulator which allows for random or use defined synthetic source profiles and contributions to be used in ESAT to evaluating how well the original synthetic data can be recreated. +### Limitations +Matrix factorization algorithms are fall under the group of optimization, or minimization, algorithms which attempt to +find a minima based upon some loss function and stopping condition. These algorithms are classified as NP-Complete, a +category of algorithms which are nondeterministic polynomial time complete and there is no known way to quickly find a +solution. Given this limitation of NMF, a solution can only be considered a local minima with no known way to guarantee +or prove it is the globally optimal solution. One approach for helping determine that a solution is a good solution is +by producing many such solutions with a constricted convergence criteria or stopping condition. Then evaluating these +solutions to determine which, if any, correspond to the best actual representation or model of the data given domain +knowledge and expertise. + +NMF algorithms are data-agnostic, operates the same on any correctly structured data regardless of domain, potential +leading to another limitation, interpretation of the solution. An important component in evaluating whether or not to +use ESAT, or any NMF algorithm, on a dataset is to determine how to interpret factor profiles and contributions. How +this is done is fully dependent on the data and domain of the input dataset, such as units, types of features, temporal +or spatial considerations, etc. + + ### Notebooks Juypter notebooks are available that demonstrate the complete source apportionment and error estimation workflow found in PMF5, demonstrated in notebooks/epa_esat_workflow_01.ipynb @@ -165,3 +182,7 @@ For those in the user community wishing to contribute to this project: * Software, code, or algorithm related bugs and issues can be submitted directly as issues on the GitHub repository. * Support can be requested through GitHub issues or through email at [esat@epa.gov](esat@epa.gov). +## Disclaimer +ESAT development has been funded by U.S. EPA. Mention of any trade names, products, or services does not convey, and +should not be interpreted as conveying, official EPA approval, endorsement, or recommendation. The views expressed in +this README are those of the authors and do not necessarily represent the views or policies of the US EPA. \ No newline at end of file diff --git a/esat/estimator.py b/esat/estimator.py index 99aaaa3..391634d 100644 --- a/esat/estimator.py +++ b/esat/estimator.py @@ -180,7 +180,7 @@ def _results(self): self.estimated_factor = -1 else: self.estimated_factor = np.nanargmax(k_est) + self.min_factors - logger.info(f"Estimated factor count: {self.estimated_factor}") + # logger.info(f"Estimated factor count: {self.estimated_factor}") self.results_df = pd.DataFrame(data= { "Factors": list(range(self.min_factors, self.max_factors)), diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..b54c089d6062c9eaa7267b0479f214c29fee2535 GIT binary patch literal 2757 zcmeAS@N?(olHy`uVBq!ia0y~yV4lUmz;vF22`JLDSVM<_fvd;U#WAEJ?(H4>vRe)U z>*@en#RtAQ;b^E$^Mjn6YzSGv{ejFo1 z!~E>M_v`*tWzL^ddr!A&{$0o0AG5EE)&Bm$^*oPXn6EiM)Fp1ptK=^R#lN1Yy$*T% zW4UvMZQR?NTn{(-r>#CEQ1g+^|Jv`u%bWicn^_^U@PF$6+MjAIb?08^?VmGqo^U8a-gfC8z z%Di2*EL_^dV6$1uH{`$;l#Tc zx1Lt4GjFY6V31qkm#=>R*TlVi-G)qUL367TyJk$bvG4z~>h!vN<3BI`^ET{1_fT=e zruWS2OFcT|Sp0K^U=t(5j?Mox z{~25A*sF#9c^22c6J&ZRU))oTJ+t;-EVGLWKT&;kx%j2eiIs`#?>$|@cMuq#k;;30 zR~0W^nR$z&`08qgN4FlCyiLeB;&-}z{p`1jwQaqpxUR+>e!V@d`D|SNo)ZPlhRgb= zJ~m}wD5$?Y+2>*LnTd*%uKAu?Gb>9m zD}n38k6oDm>WM1e%rGiB8UmvsFd71*Aut*OqalDT1j2vu3Vgn;6v!$b1(No3^>bP0 Hl+XkKe|@xh literal 0 HcmV?d00001