spacenet.point_patterns.weighted_pair_correlation_function#
- spacenet.point_patterns.weighted_pair_correlation_function(spatial_network, node_label_name_b=None, nodes_a=None, nodes_b=None, spatial_kernel_bandwidth=10, spatial_kernel_n=2, r_min=0, r_max=100, r_step=10, marker_kernel_bandwidth=0.2, marker_kernel_n=1, marker_min=0, marker_max=1, marker_step=0.1, edge_weight_name='Distance', return_confidence_interval=False, low_memory=False, verbose=True, n_jobs=1)#
Computes the weighted pair correlation function between two populations of nodes. Computes the spatial correlation between two populations of nodes where the second population (B) has a continuous label (marker) associated with it, and the pair correlation function is weighted by the similarity in the continuous label to a target value.
- Parameters:
- spatial_networknetworkx.Graph
The spatial network on which to compute the pair correlation function. Edges should have a weight attribute corresponding to the distance between nodes.
- node_label_name_bstr or array-like
A continuous label for each object in population B. This should be the name of labels associated with a continous label on the name. Alternatively, this can be an array of continous values of the same length as nodes_b, where each entry corresponds to the label of the respective object in population B.
- nodes_aarray-like, optional
The indices of the nodes in population A. If None, all nodes in the network will be considered as part of population A. Default is None.
- nodes_barray-like, optional
The indices of the nodes in population B. If None, all nodes in the network will be considered as part of population B. Default is None.
- spatial_kernel_bandwidthfloat, optional
The bandwidth parameter for the spatial kernel function. This controls the smoothness of the pair correlation function. Default is 10.
- spatial_kernel_nint, optional
The exponent parameter for the spatial kernel function. This controls the shape of the kernel. Default is 2 (which corresponds to a Gaussian-like kernel).
- r_minfloat, optional
The minimum distance to consider when computing the pair correlation function. Default is 0.
- r_maxfloat, optional
The maximum distance to consider when computing the pair correlation function. Default is 100.
- r_stepfloat, optional
The step size for the distance bins when computing the pair correlation function. Default is 10.
- marker_kernel_bandwidthfloat, optional
The bandwidth parameter for the marker kernel function. This controls the smoothness of the weighting based on the continuous labels of objects B. Default is 0.2.
- marker_kernel_nint, optional
The exponent parameter for the marker kernel function. This controls the shape of the kernel for weighting based on the continuous labels of objects B. Default is 1 (which corresponds to a Laplacian-like kernel).
- marker_minfloat, optional
The minimum value of the continuous label for objects B to consider when computing the weighted pair correlation function. Default is 0.
- marker_maxfloat, optional
The maximum value of the continuous label for objects B to consider when computing the weighted pair correlation function. Default is 1.
- edge_weight_namestr, optional
The name of the edge attribute in the network that corresponds to the distance between nodes. Default is ‘Distance’.
- return_confidence_intervalbool, optional
Whether to compute and return confidence intervals for the pair correlation function using spatial bootstrapping. Default is False.
- low_memorybool, optional
Whether to use a low-memory implementation of Dijkstra’s algorithm that computes distances in batches. This can be useful for large networks that do not fit in memory. Default is False.
- verbosebool, optional
Whether to print progress messages during computation. Default is True.
- n_jobsint, optional
The number of parallel jobs to run when computing contributions. If n_jobs > 1, the contributions will be computed in parallel across multiple CPU cores. Default is 1 (no parallelization).
- Returns:
- taunumpy.ndarray
The target marker values at which the pair correlation function was computed.
- radiinumpy.ndarray
The radii at which the pair correlation function was computed.
- gnumpy.ndarray
The values of the pair correlation function at the corresponding radii and target marker values. Shape is (len(tau), len(radius)).
- confidence_intervalnumpy.ndarray (if return_confidence_interval is True)
If return_confidence_interval is True, this will be a numpy array (2,num_mark_targets,num_radii) containing the confidence intervals for the pair correlation function at each mark target and radii. The CI[0,:,:] corresponds to the lower bounds of the confidence intervals, and CI[1,:,:] corresponds to the upper bounds. If return_confidence_interval is False, this will not be returned.
Notes
For more information, see the reference paper:
Moore et al. (2026). netPCF: Geometry-aware Pair Correlation Functions for Spatial Biology. DOI: https://doi.org/10.64898/2026.07.02.736020
Examples
Computing the weighted pair correlation function for a spatial network with a continuous node label (marker) and plotting the results:
import spacenet as sn import numpy as np import matplotlib.pyplot as plt # get data from the Spiral dataset sprial_df = sn.datasets.load_dataset('spiral') points = sprial_df[['x','y']].values categorical_labels = sprial_df['Marker (categorical)'].values continuous_labels = sprial_df['Marker (continuous)'].values # generate a spatial network using the delaunay method and add labels G = sn.utils.spatial_network_from_points(points,network_type='delaunay',max_edge_distance=75) sn.utils.add_node_labels(G,categorical_labels,node_label_name='Marker (categorical)') sn.utils.add_node_labels(G,continuous_labels,node_label_name='Marker (continuous)') # get the node ids for the nodes with categorical label A nodes_a = sn.utils.query_nodes(G,node_label_name='Marker (categorical)',relation='is',node_label_value='A') # compute the weighted-PCF for the spatial network between nodes_a and all nodes with continuous label 'Marker (continuous)' tau,radius,pcf_values,con_interval = sn.point_patterns.weighted_pair_correlation_function(G, node_label_name_b='Marker (continuous)', nodes_a=nodes_a, spatial_kernel_bandwidth=80, r_max=1000, return_confidence_interval=True) # plot the PCF for the weighted pair correlation function at target mark of 0 and 1 tau_index_0=np.where(tau==0)[0][0] tau_index_1=np.where(tau==1)[0][0] fig,ax=plt.subplots() ax.axhline(1,linestyle='dashed',color='grey') ax.plot(radius,pcf_values[tau_index_0,:],label='Target mark, :math:`\tau=0`',color='tab:blue') ax.fill_between(radius,con_interval[0,tau_index_0,:],con_interval[1,tau_index_0,:],alpha=0.2,color='tab:blue') ax.plot(radius,pcf_values[tau_index_1,:],label='Target mark, :math:`\tau=1`',color='tab:orange') ax.fill_between(radius,con_interval[0,tau_index_1,:],con_interval[1,tau_index_1,:],alpha=0.2,color='tab:orange') ax.set_xlabel('Radius') ax.set_ylabel('Weighted Pair Correlation') ax.set_ylim(0,3) ax.set_xlim(0,1000) ax.legend()