pysal.model.spreg.
GM_Combo_Het
(y, x, yend=None, q=None, w=None, w_lags=1, lag_q=True, max_iter=1, epsilon=1e-05, step1c=False, inv_method='power_exp', vm=False, name_y=None, name_x=None, name_yend=None, name_q=None, name_w=None, name_ds=None)[源代码]¶基于arraiz等人[arraiz2010]uuu的空间滞后和误差模型的GMM方法,具有异方差和内生变量、结果和诊断;遵循Anselin[Anselin2011]uuu。
参数: |
|
---|
实例
我们首先需要导入所需的模块,即numpy来将我们读取的数据转换为 spreg
理解和 pysal
执行所有分析。
>>> import numpy as np
>>> import pysal.lib
使用pysal.lib.io.open()打开关于哥伦布社区犯罪(49个地区)的数据。这是与Columbus形状文件关联的DBF。注意pysal.lib.io.open()也以csv格式读取数据;由于实际类需要以numpy数组的形式传入数据,因此用户可以使用任何方法读取其数据。
>>> db = pysal.lib.io.open(pysal.lib.examples.get_path('columbus.dbf'),'r')
从dbf文件中提取hoval列(主值),并使其成为回归的因变量。请注意,pysal要求这是一个形状(n,1)的numpy数组,而不是其他包接受的(n,1)的常见形状。
>>> y = np.array(db.by_col("HOVAL"))
>>> y = np.reshape(y, (49,1))
从dbf中提取inc(收入)向量,作为回归中的独立变量。注意,pysal要求这是一个nxj numpy数组,其中j是独立变量的数量(不包括常量)。默认情况下,这个类向传入的自变量添加一个1的向量。
>>> X = []
>>> X.append(db.by_col("INC"))
>>> X = np.array(X).T
由于我们想要运行一个空间误差模型,我们需要指定空间权重矩阵,该矩阵将观测的空间配置包含到模型的误差分量中。为此,我们可以打开一个已经存在的gal文件或创建一个新的gal文件。在这种情况下,我们将从 columbus.shp
.
>>> w = pysal.lib.weights.Rook.from_shapefile(pysal.lib.examples.get_path("columbus.shp"))
除非有充分的理由不这样做,否则必须对权重行进行标准化,以便矩阵的每一行合计为一。除其他外,HIS允许将变量的空间滞后解释为相邻观测的平均值。在Pysal中,可以通过以下方式轻松执行:
>>> w.transform = 'r'
Combo类运行Sarar模型,即空间滞后+错误模型。在这种情况下,我们将运行一个简单的版本,在那里我们有空间效应和外生变量。因为它是一个空间模型,所以我们必须传递权重矩阵。如果我们希望在输出摘要中打印变量的名称,那么我们也必须将它们传入,尽管这是可选的。
>>> reg = GM_Combo_Het(y, X, w=w, step1c=True, name_y='hoval', name_x=['income'], name_ds='columbus')
一旦我们运行了模型,我们就可以对输出进行一点探索。我们创建的回归对象有许多属性,因此请花点时间来发现它们。这个类提供了一个错误模型,它显式地说明了异方差性,并且与来自的模型不同 spreg.error_sp
,允许对空间参数进行推断。因此,我们发现与标准误差相同的β数,我们用方差协方差矩阵对角线的平方根计算:
>>> print reg.name_z
['CONSTANT', 'income', 'W_hoval', 'lambda']
>>> print np.around(np.hstack((reg.betas,np.sqrt(reg.vm.diagonal()).reshape(4,1))),4)
[[ 9.9753 14.1435]
[ 1.5742 0.374 ]
[ 0.1535 0.3978]
[ 0.2103 0.3924]]
该类还允许用户运行一个空间滞后+误差模型,该模型具有包括非空间内生回归量的额外特性。这意味着,除了空间滞后和误差之外,我们将方程右侧的一些变量视为内生变量,并对此进行检验。作为一个例子,我们将把犯罪(犯罪率)作为内生因素,并用discbd(到犯罪现场的距离)作为工具。我们首先需要读取变量:
>>> yd = []
>>> yd.append(db.by_col("CRIME"))
>>> yd = np.array(yd).T
>>> q = []
>>> q.append(db.by_col("DISCBD"))
>>> q = np.array(q).T
然后,我们可以运行和探索与前一个组合类似的模型:
>>> reg = GM_Combo_Het(y, X, yd, q, w=w, step1c=True, name_x=['inc'], name_y='hoval', name_yend=['crime'], name_q=['discbd'], name_ds='columbus')
>>> print reg.name_z
['CONSTANT', 'inc', 'crime', 'W_hoval', 'lambda']
>>> print np.round(reg.betas,4)
[[ 113.9129]
[ -0.3482]
[ -1.3566]
[ -0.5766]
[ 0.6561]]
属性: |
|
---|
__init__
(y, x, yend=None, q=None, w=None, w_lags=1, lag_q=True, max_iter=1, epsilon=1e-05, step1c=False, inv_method='power_exp', vm=False, name_y=None, name_x=None, name_yend=None, name_q=None, name_w=None, name_ds=None)[源代码]¶初始化自身。请参阅帮助(键入(self))以获得准确的签名。
方法
__init__ \(Y、X、Yend、Q、W、W、Lags、Lag、Q、…]) |
初始化自身。 |
属性
mean_y |
|
std_y |