22from ....tools .normalize import log_cpm
33
44
5- def _rmse (X , X_emb ):
6- import scipy .optimize
5+ def _distance_correlation (X , X_emb ):
76 import scipy .spatial
7+ import scipy .stats
88
99 high_dimensional_distance_vector = scipy .spatial .distance .pdist (X )
1010 low_dimensional_distance_vector = scipy .spatial .distance .pdist (X_emb )
11- _ , rmse = scipy .optimize .nnls (
12- low_dimensional_distance_vector [:, None ], high_dimensional_distance_vector
13- )
14- return rmse
11+ return scipy .stats .spearmanr (
12+ low_dimensional_distance_vector , high_dimensional_distance_vector
13+ )[0 ]
1514
1615
1716@metric (
18- metric_name = "RMSE " ,
19- maximize = False ,
20- paper_reference = "kruskal1964mds " ,
17+ metric_name = "Distance correlation " ,
18+ maximize = True ,
19+ paper_reference = "schober2018correlation " ,
2120)
22- def rmse (adata , n_svd = 200 ):
21+ def distance_correlation (adata , n_svd = 200 ):
2322 """Calculate the root mean squared error.
2423
2524 Computes (RMSE) between the full (or processed) data matrix and the
@@ -30,15 +29,15 @@ def rmse(adata, n_svd=200):
3029 adata = log_cpm (adata )
3130
3231 X = sklearn .decomposition .TruncatedSVD (n_svd ).fit_transform (adata .X )
33- return _rmse (X , adata .obsm ["X_emb" ])
32+ return _distance_correlation (X , adata .obsm ["X_emb" ])
3433
3534
3635@metric (
37- metric_name = "RMSE (spectral)" ,
38- maximize = False ,
36+ metric_name = "Distance correlation (spectral)" ,
37+ maximize = True ,
3938 paper_reference = "coifman2006diffusion" ,
4039)
41- def rmse_spectral (adata , n_comps = 200 ):
40+ def distance_correlation_spectral (adata , n_comps = 200 ):
4241 """Calculate the spectral root mean squared error
4342
4443 Computes (RMSE) between high-dimensional Laplacian eigenmaps on the full (or
@@ -57,4 +56,4 @@ def rmse_spectral(adata, n_comps=200):
5756 X = umap .spectral .spectral_layout (
5857 adata .X , graph , n_comps , random_state = np .random .default_rng ()
5958 )
60- return _rmse (X , adata .obsm ["X_emb" ])
59+ return _distance_correlation (X , adata .obsm ["X_emb" ])
0 commit comments