0

我想在 pysal 中创建一个基于距离的空间权重矩阵,然后将其输入到 pysal 的“spreg”子模块的空间回归方法中。以下是一个小的可重现代码示例:

import numpy as np 
import pysal
position=np.random.standard_normal((1000,2))
y_=np.random.standard_normal((1000,1))
X_=np.random.standard_normal((1000,10))   
kd = pysal.lib.cg.KDTree(position)
spweights = pysal.lib.weights.Kernel(kd, bandwidth=None, fixed=False, k=4,
                     function='triangular', eps=1.000000, ids=None,
                     diagonal=False, distance_metric='euclidean', radius=None)
models_GM_Error_Het=pysal.model.spreg.GM_Error_Het(y=y_,x=X_,w=spweights,max_iter=2,epsilon=1e-8)

python 返回的错误是“异常:对角线上的所有条目都必须等于 0”。另一方面,仅使用仅具有二进制权重的 k-最近邻权重,

import numpy as np 
import pysal
position=np.random.standard_normal((1000,2))
y_=np.random.standard_normal((1000,1))
X_=np.random.standard_normal((1000,10))   
kd = pysal.lib.cg.KDTree(position)
spweights2 = pysal.lib.weights.KNN(kd, 4)
models_GM_Error_Het=pysal.model.spreg.GM_Error_Het(y=y_,x=X_,w=spweights2,max_iter=2,epsilon=1e-8)

工作正常。如何修改上面的代码?

4

1 回答 1

0

在倒数第二行插入以下内容有帮助:

for k in range(position.shape[0]):
    spweights2.weights[k][0]=0.0
spweights2.transform = 'r'

对角线元素必须为零。此外,权重必须是行标准化的。该程序现在运行良好。

于 2020-01-24T11:20:48.817 回答