pysal.model.spreg.GM_Combo

class pysal.model.spreg.GM_Combo(y, x, yend=None, q=None, w=None, w_lags=1, lag_q=True, vm=False, name_y=None, name_x=None, name_yend=None, name_q=None, name_w=None, name_ds=None)[源代码]

基于Kelejian和Prucha(1998年,1999年)【Kelejian1998年】【Kelejian1999年】【uuuu】的带有内生变量的空间滞后和误差模型的GMM方法,以及结果和诊断。

参数:
y : 数组

因变量nx1数组

x : 数组

二维数组,n行,每个独立(外生)变量一列,不包括常量

yend : 数组

二维数组,n行,每个内生变量一列

q : 数组

二维数组,n行,每个外部外部变量一列,用作工具(注意:这不应包含x中的任何变量)

w : Pysal W对象

空间权重对象(始终需要)

w_lags : 整数

w的阶数作为空间滞后相关变量的工具。例如,w_lags=1,则仪器为wx;如果w_lags=2,则为wx、w wx;依此类推。

lag_q : 布尔

如果为真,则包括附加仪器的空间滞后(q)。

vm : 布尔

如果为真,则在汇总结果中包含方差-协方差矩阵

name_y : 一串

输出中使用的从属变量的名称

name_x : 字符串表

输出中使用的自变量的名称

name_yend : 字符串表

输出中使用的内生变量的名称

name_q : 字符串表

输出用仪器名称

name_w : 一串

输出中使用的权重矩阵的名称

name_ds : 一串

用于输出的数据集名称

实例

我们首先需要导入所需的模块,即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文件中提取crime列(crime rate),并使其成为回归的因变量。请注意,pysal要求这是一个形状(n,1)的numpy数组,而不是其他包接受的(n,1)的常见形状。

>>> y = np.array(db.by_col("CRIME"))
>>> 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"))

除非有充分的理由不这样做,否则必须对权重行进行标准化,以便矩阵的每一行合计为一。除此之外,这允许将变量的空间滞后解释为相邻观测值的平均值。在Pysal中,可以通过以下方式轻松执行:

>>> w.transform = 'r'

Combo类运行Sarar模型,即空间滞后+错误模型。在这种情况下,我们将运行一个简单的版本,在那里我们有空间效应和外生变量。因为它是一个空间模型,所以我们必须传递权重矩阵。如果我们希望在输出摘要中打印变量的名称,那么我们也必须将它们传入,尽管这是可选的。

>>> reg = GM_Combo(y, X, w=w, name_y='crime', name_x=['income'], name_ds='columbus')

一旦我们运行了模型,我们就可以对输出进行一点探索。我们创建的回归对象有许多属性,因此请花点时间来发现它们。请注意,由于我们运行的是1998/99年的经典GMM误差模型,因此空间参数是作为一个点估计获得的,因此尽管您得到了它的一个值(model.betas下的系数有一个值),但您不能对它进行推理(model.se_betas中只有三个值)。此外,这种回归使用了两阶段最小二乘估计方法,该方法解释了因变量空间滞后所产生的内生性。我们可以检查betas:

>>> print reg.name_z
['CONSTANT', 'income', 'W_crime', 'lambda']
>>> print np.around(np.hstack((reg.betas[:-1],np.sqrt(reg.vm.diagonal()).reshape(3,1))),3)
[[ 39.059  11.86 ]
 [ -1.404   0.391]
 [  0.467   0.2  ]]

拉姆达:

>>> print 'lambda: ', np.around(reg.betas[-1], 3)
lambda:  [-0.048]

该类还允许用户运行一个空间滞后+误差模型,该模型具有包括非空间内生回归量的额外特性。这意味着,除了空间滞后和误差之外,我们将方程右侧的一些变量视为内生变量,并对此进行检验。例如,我们将hoval(home value)作为内生值,并将使用discbd(到csb的距离)进行检测。我们首先需要读取变量:

>>> yd = []
>>> yd.append(db.by_col("HOVAL"))
>>> yd = np.array(yd).T
>>> q = []
>>> q.append(db.by_col("DISCBD"))
>>> q = np.array(q).T

然后,我们可以运行和探索与前一个组合类似的模型:

>>> reg = GM_Combo(y, X, yd, q, w=w, name_x=['inc'], name_y='crime', name_yend=['hoval'], name_q=['discbd'], name_ds='columbus')
>>> print reg.name_z
['CONSTANT', 'inc', 'hoval', 'W_crime', 'lambda']
>>> names = np.array(reg.name_z).reshape(5,1)
>>> print np.hstack((names[0:4,:], np.around(np.hstack((reg.betas[:-1], np.sqrt(reg.vm.diagonal()).reshape(4,1))),4)))
[['CONSTANT' '50.0944' '14.3593']
 ['inc' '-0.2552' '0.5667']
 ['hoval' '-0.6885' '0.3029']
 ['W_crime' '0.4375' '0.2314']]
>>> print 'lambda: ', np.around(reg.betas[-1], 3)
lambda:  [ 0.254]
属性:
summary : 一串

回归结果和诊断摘要(注:与print命令一起使用)

betas : 数组

Kx1估计系数数组

u : 数组

nx1残差数组

e_filtered : 数组

nx1空间滤波残差数组

e_pred : 数组

nx1残差数组(使用简化形式)

predy : 数组

nx1预测Y值数组

predy_e : 数组

nx1预测Y值数组(使用缩减形式)

n : 整数

观测次数

k : 整数

估计系数的变量数(包括常数)

y : 数组

因变量nx1数组

x : 数组

二维数组,n行,每个独立(外生)变量一列,包括常量

yend : 数组

二维数组,n行,每个内生变量一列

z : 数组

nxx变量数组(x和yend的组合)

mean_y : 浮动

因变量均值

std_y : 浮动

因变量标准差

vm : 数组

方差协方差矩阵(kxk)

pr2 : 浮动

伪r平方(y和ypred之间的平方相关)

pr2_e : 浮动

伪r平方(y与ypred_e之间的平方相关(使用约简形式))。

sig2 : 浮动

计算中使用的sigma平方(基于过滤残差)

std_err : 数组

1×k阵列的betas标准误差

z_stat : 元组列表

z statistic;每个元组包含一对(statistic,p-value),其中每个都是一个浮点

name_y : 一串

输出中使用的从属变量的名称

name_x : 字符串表

输出中使用的自变量的名称

name_yend : 字符串表

输出中使用的内生变量的名称

name_z : 字符串表

用于输出的外生变量和内生变量的名称

name_q : 字符串表

外部仪表名称

name_h : 字符串表

输出中使用的所有仪器的名称

name_w : 一串

输出中使用的权重矩阵的名称

name_ds : 一串

用于输出的数据集名称

title : 一串

所用回归方法的名称

__init__(y, x, yend=None, q=None, w=None, w_lags=1, lag_q=True, 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