空间聚集性Join counts 的代码实现

之前在文章里用了莫兰指数来代表空间相关性,但是编辑不喜欢,他觉得标签类型的空间相关性应该用Join counts函数实现,所以,我又补充了实验。

esda 包中的join_counts函数输出Join Counts对象是含有四个属性,其属性分表代表:

jc.bb:表示在每个空间邻域对中具有相同属性值的观测单元对的数量。它是一个二维数组,其中行和列分别表示两个不同的属性类别。例如,jc.bb[i, j]表示具有属性类别i和j的观测单元对的数量。

jc.j:表示每个观测单元与其邻域观测单元具有相同属性值的连接数量。它是一个一维数组,其中每个元素表示相应观测单元的连接计数(Join Counts)。

jc.ww:表示每个观测单元与其邻域观测单元具有相同属性值的预期连接数量(Expected Join Counts)。它是一个一维数组,其中每个元素表示相应观测单元的预期连接计数。

jc.bw:表示在每个空间邻域对中具有不同属性值的观测单元对的数量。它是一个二维数组,其中行和列分别表示两个不同的属性类别。例如,jc.bw[i, j]表示具有属性类别i和j的观测单元对的数量。

我用chatgpt 写了代码,但是它有错误;所以,我研究半天,纠正了他的错误,以下是正确的代码:
import pysal.lib.weights as weights
from esda.join_counts import Join_Counts
import matplotlib.pyplot as plt

# 坐标点数据
points = np.array([(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)] ) # 替换为您的坐标点数据


# 构建空间权重矩阵
w = weights.KNN.from_array(points , k=3)

# 计算Join Counts指数
jc = Join_Counts(points, w)

# 提取Join Counts结果
join_counts = jc.j
expected_join_counts = jc.ww

# 创建柱状图
fig, ax = plt.subplots()
x = range(len(join_counts))
width = 0.35
ax.bar(x, join_counts, width, label='Join Counts')
ax.bar(x, expected_join_counts, width, label='Expected Join Counts')

# 添加标签和标题
ax.set_xlabel('Points')
ax.set_ylabel('Counts')
ax.set_title('Join Counts')
ax.set_xticks(x)
ax.legend()

# 显示图表
plt.show()

你可能感兴趣的:(生物信息,pandas,python,开发语言)