Add uwot.approx_pow option to RunUMAP for better reproducibility #9449
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Dear Seurat Team,
The issue of UMAP reproducibility using the uwot method has been raised before #6722, and as noted in that PR this was discussed in a uwot issue jlmelville/uwot#46. Specifically the observation is that OS differences in the underlying implementation of some C/C++ libraries causes very small numerical differences OSs that produce different UMAP results. An option that corrects this was added to uwot version 0.1.8 as discussed in jlmelville/uwot#46. Given that Seurat requires uwot >0.1.10, I thought it would be useful to include this option in Seurat's RunUMAP functions.
I tested this option on two systems (Mac and CentOS). Without the new
uwot.approx_pow
option (setting it toFALSE
) the UMAPs are different, but when settinguwot.approx_pow = TRUE
the results are identical. I am not sure why #6722 noted thatapprox_pow
did not solve the issue -- it does solve the problem for my example. See details below for how I tested this using a simple UMAP onpbmc_small
:Running on Mac laptop
Running on CentOS
The results above show that the UMAP results are identical across OSs when
uwot.approx_pow = TRUE
only.