空间相关性分析(GeoDa分析)

一、空间相关性概述

空间相关性(Spatial Correlation)是指在空间领域中存在的变量之间的相互关系。也可以理解为,当一个位置的值改变时,其周围位置的值也会受到影响。

空间相关性可以帮助我们发现空间领域内的规律性和特殊性,是地理信息系统(GIS)分析中至关重要的部分。

常见的空间相关性模型包括 Moran’s I、Geary’s C、Local Moran’s I、G统计量等。

二、Moran’s I

Moran’s I是一种用于测量空间领域中的全局空间相关性的指标。它的值可以在-1到1之间取值,其中-1表示完全的负相关,1表示完全的正相关,0表示不存在相关性。

Moran’s I的计算方法如下:

def moran_i(data, w):
    data = np.array(data)
    w = np.array(w.todense())
    dn = np.sum(w)

    data_mean = np.mean(data)
    numerator = 0
    denominator = 0
    for i in range(data.shape[0]):
        for j in range(data.shape[0]):
            numerator += w[i, j] * (data[i] - data_mean) * (data[j] - data_mean)
            denominator += (data[i] - data_mean) ** 2

    return data.shape[0] * numerator / (denominator * dn)

三、Geary’s C

Geary’s C是另一种用于测量全局空间相关性的指标。它的值也可以在-1到1之间取值,其中-1表示完全的负相关,1表示完全的正相关,0表示不存在相关性。

Geary’s C的计算方法如下:

def geary_c(data, w):
    data = np.array(data)
    w = np.array(w.todense())
    dn = np.sum(w)

    data_mean = np.mean(data)
    numerator = 0
    denominator = 0
    for i in range(data.shape[0]):
        for j in range(data.shape[0]):
            numerator += w[i, j] * (data[i] - data[j]) ** 2
            denominator += (data[i] - data_mean) ** 2

    return (data.shape[0] - 1) * numerator / (2 * denominator * dn)

四、Local Moran’s I

Local Moran’s I是一种用于测量局部空间自相关性的指标。它可以用来发现空间领域内的聚类现象。

Local Moran’s I的计算方法如下:

def local_moran_i(data, w):
    data = np.array(data)
    w = np.array(w.todense())
    dn = np.sum(w)

    data_mean = np.mean(data)
    data_std = np.sqrt(np.var(data))

    numerator = np.zeros(data.shape[0])
    for i in range(data.shape[0]):
        for j in range(data.shape[0]):
            numerator[i] += w[i, j] * (data[i] - data_mean) * (data[j] - data_mean)

    denominator = np.zeros(data.shape[0])
    for i in range(data.shape[0]):
        for j in range(data.shape[0]):
            denominator[i] += w[i, j]

    expected_value = denominator * numerator / dn

    local_moran_i = (data - data_mean) ** 2
    for i in range(data.shape[0]):
        local_moran_i[i] = (data[i] - expected_value[i]) / (data_std * np.sqrt((dn - denominator[i]) / (dn - 1)))

    return local_moran_i

五、空间插值

空间插值(Spatial Interpolation)技术是用于推算未知位置的值的一种方法。它在GIS领域中有着广泛的应用,比如在地形图制作、气候预测等方面。

常见的空间插值方法包括克里金插值、反距离权重插值等。

下面是一个简单的克里金插值的代码示例:

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF
from scipy.spatial.distance import cdist

def krige(data, coordinates, predict_coordinates):
    kernel = RBF(0.1)
    gp = GaussianProcessRegressor(kernel=kernel)

    X = np.array(coordinates)
    y = np.array(data).reshape(-1, 1)
    X_pred = np.array(predict_coordinates)

    d_mat = cdist(X, X, 'minkowski', p=2)
    k_mat = kernel(d_mat)

    gp.fit(X, y)
    y_pred, std = gp.predict(X_pred, return_std=True)

    return y_pred.flatten(), std.flatten()

Published by

风君子

独自遨游何稽首 揭天掀地慰生平