Source code for pygeoda.sa.neighbor_match_test

__author__ = "Xun Li <lixun910@gmail.com>"

from ..libgeoda import VecBool, VecVecBool
from ..libgeoda import gda_neighbor_match_test, VecVecDouble
from .lisa import lisa
import math

'''
Changes:
1/21/2021 Update local_multigeary, local_geary for 0.0.6
'''

[docs]def neighbor_match_test(geoda_obj, data, k, **kwargs): '''Local Neighbor Match Test The local neighbor match test is to assess the extent of overlap between k-nearest neighbors in geographical space and k-nearest neighbors in multi-attribute space. Args: geoda_obj (geoda): An instance of geoda class. data (list or dataframe): A list of numeric vectors of selected variable or a data frame of selected variables e.g. guerry[['Crm_prs', 'Literacy']] k (int): A positive integer number for k-nearest neighbors searching. scale_method (str, optional): One of the scaling methods {'raw', 'standardize', 'demean', 'mad', 'range_standardize', 'range_adjust'} to apply on input data. Default is 'standardize' (Z-score normalization). distance_method (str, optional): The type of distance metrics used to measure the distance between input data. Options are {'euclidean', 'manhattan'}. Default is 'euclidean'. power (float, optional): The power (or exponent) of a number says how many times to use the number in a multiplication. is_inverse (bool, optional): FALSE (default) or TRUE, apply inverse on distance value. is_arc (bool, optional): FALSE (default) or TRUE, compute arc distance between two observations. is_mile (bool, optional) TRUE (default) or FALSE, convert distance unit from mile to km. Returns: dict: A dict with values for key "Cardinality" and "Probability". ''' scale_method = 'standardize' if 'scale_method' not in kwargs else kwargs['scale_method'] distance_method = 'euclidean' if 'distance_method' not in kwargs else kwargs['distance_method'] power = 1.0 if 'power' not in kwargs else kwargs['power'] is_inverse = False if 'is_inverse' not in kwargs else kwargs['is_inverse'] is_arc = False if 'is_arc' not in kwargs else kwargs['is_arc'] is_mile = False if 'is_mile' not in kwargs else kwargs['is_mile'] if type(data).__name__ == "DataFrame": data = data.values.transpose().tolist() result = gda_neighbor_match_test(geoda_obj.gda, k, power, is_inverse, is_arc, is_mile, data, scale_method, distance_method) card = result[0] prob = result[1] new_card = [int(i) for i in card] # check p value new_prob = [p if p >= 0 else math.nan for p in prob] return { "Cardinality": new_card, "Probability": new_prob }