描述
执行“地理加权回归 (GWR)”,这是一种用于建模空间变化关系的线性回归的局部形式。
插图
使用方法
GWR 为数据集中的各要素构建了一个独立的方程,用于将各目标要素的带宽范围内的要素的因变量和解释变量进行合并。带宽的形状和范围取决于用户输入的核类型、带宽方法、距离以及相邻要素数等参数,但也存在一条限制:如果相邻要素的数目超过 1000,则仅将最相邻的 1000 个要素合并到各个局部方程中。
GWR 通常被要求用于处理包含数百个要素的数据集,以便获得最佳结果, GWR 不适用于小型数据集。而且,此工具不能用于处理多点数据。
此外,GWR 工具也会生成一个输出要素类和一个包含了工具执行汇总报告诊断值的表。会自动将此表以输出要素类名加上 _supp 作为后缀的形式进行命名。输出要素类会自动添加至内容列表中,并会对模型残差应用热/冷渲染方案。在解释 GWR 结果中提供了有关各输出的完整说明。
_supp 文件的创建位置始终与输出要素类相同,除非输出要素类被创建在一个要素数据集内。当输出要素类位于要素数据集内时,_supp 表则会创建在该要素数据集所在的地理数据库中。
建议您使用投影数据。这一点在距离成为分析的一部分时尤其重要,因为在您针对核类型选择固定时,会对 GWR 使用投影数据。建议您使用投影坐标系(而非地理坐标系)对数据进行投影。
由 GWR 工具执行的某些计算会利用多个 CPU 以提高性能,并会自动使用多达 8 条线程/CPU 进行处理。
应该始终从普通最小二乘法 (OLS) 回归开始回归分析。首先获得一个正确指定的 OLS 模型,然后使用同样的解释变量运行 GWR(不包括表示不同空间组织的任何“哑元”解释变量)。
因变量和解释变量应该是包含各种值的数值型字段。线性回归方法(如 GWR)不适于预测二进制结果(例如,因变量的所有值不是 1 就是 0)。
在全局回归模型中(如普通最小二乘法回归 (OLS)),当两个或多个变量具有多重共线性时(即当存在两个或多个冗余变量或者这些变量共同提供同一信息时),结果通常是不可靠的。GWR 为数据集中的各要素构建了一个局部回归方程。如果用于特定解释变量的值出现空间聚类,则可能存在局部多重共线性问题。输出要素类中的条件数字段 (COND) 可指明回归结果由于局部多重共线性而出现不稳定性的时期。通常,如果要素的条件数大于 30、等于“空”或者等于 -1.7976931348623158e+308(对于 shapefile 来说),则结果是不可靠的。
如果在 GWR 模型中包含名目数据或分类数据,则需谨慎操作。在类别出现空间聚类的地方,存在局部多重共线性的风险。GWR 输出中包含的条件数指明了局部共线性何时会导致问题(条件数小于零、大于 30 或设置为“空”)。存在局部多重共线性的结果是不稳定的。
请勿使用人工解释变量来表示 GWR 模型中的不同空间组织(例如,向城镇中心外的人口普查区赋予值 1,而向其他区域赋予值 0)。由于 GWR 允许解释变量系数发生变化,这些空间组织解释变量并不必要,并且如果包含了这些变量,则会产生局部多重共线性问题。
要更好地了解解释变量系数当中的区域变化,请检查由 GWR 创建的可选栅格系数表面。将在系数栅格工作空间中创建这些栅格表面。对于面数据,您可以对输出要素类中的每个系数字段使用渐变色彩或由冷色到暖色的渲染以检查整个研究区域的更改。
通过提供预测位置要素类(通常,此要素类与输入要素类相同)、预测解释变量和输出预测要素类,您可以使用 GWR 进行预测。在用来校正回归模型的字段(解释变量字段的输入值)与用来预测的字段(预测解释变量字段的输入值)之间必须是一对一的对应关系。这些变量的顺序必须相同。例如,假设您当前正针对交通事故构建一个有关速度限制、道路条件、车道数量以及汽车数量的函数。通过创建一个具有修正后的速度限制和道路条件的新变量,您可以预测更改速度限制或改善道路状况可能对交通事故产生的影响。现有变量将用于校正回归模型,并用作解释变量的参数。修正的变量将用于预测,并可作为预测解释变量。
如果提供了预测位置要素类,但未指定预测解释变量,则仅使用各位置的已计算系数创建输出预测要素类(不进行任何预测)。
如果回归模型缺少关键解释变量,则会导致回归模型的指定错误。如果回归残差的空间自相关具有统计学上的显著性,或者在一个或多个解释变量的系数当中发生了非期望的空间变化,则表明错误指定了您的模型。您应该尽一切努力(例如,通过 OLS 残差分析和 GWR 系数变化分析)来查找这些丢失的关键变量,以便在模型中包含这些变量。
时刻关注解释变量的不稳定性是否会出现问题。例如,假设您正将特殊植物种类的密度构建为若干变量(包括 ASPECT)的函数。如果发现在整个研究区域中 ASPECT 变量的系数发生了更改,则可能要查看是否有缺少关键解释变量的迹象(例如,可能存在大量竞争植被)。应该尽一切努力将所有关键解释变量包含到回归模型中。
当计算结果无限大或未定义时,非 shapefile 的结果将为“空”;而 shapefile 的结果将是 -DBL_MAX = -1.7976931348623158e+308。
为带宽方法参数选择 AICc(更正后的 Akaike 信息准则)或 CV(交叉验证)时,GWR 将查找最佳距离(对于固定核)或最佳相邻要素的数目(对于自适应核)。但是,局部多重共线性问题将会阻止 AICc 和 CV 带宽方法解析最佳距离/相邻要素的数目。如果出现表示模型设计存在严重问题的错误,则请尝试指定特殊距离或相邻要素的数目, 然后检查输出要素类中的条件数,以查看哪些要素与局部共线性问题相关联。
严重模型设计错误或用于表明局部方程未包含足够多相邻要素的错误,通常表示回归存在全局或局部多重共线性问题。要确定出现问题的位置,请使用 OLS 运行模型,然后检查每个解释变量的 VIF 值。如果某些 VIF 值较大(例如,大于 7.5),则全局多重共线性会阻止 GWR 解决问题。但是,更有可能是局部多重共线性所导致的问题。请尝试为各解释变量创建一个专题地图。如果在地图上出现相同值的空间聚类,考虑将这些变量从模型中移除,或将这些变量与其他解释变量合并以便加大值的变化性。例如,如果要对房屋价格进行建模且具有卧室和浴室两个变量,则可能需要将其合并以加大值的变化性,或将其表示为浴室/卧室的建筑面积。在构造 GWR 模型时,要避免使用空间组织哑元变量、空间聚类名目或数值变量或者几乎不可能具有值的变量。
GWR 是一种线性模型,其前提条件与 OLS 相同。要确保正确指定您的 GWR 模型,请参阅回归分析基础知识中的回归模型失效方式部分。
语法
arcpy.stats.GeographicallyWeightedRegression(in_features, dependent_field, explanatory_field, out_featureclass, kernel_type, bandwidth_method, {distance}, {number_of_neighbors}, {weight_field}, {coefficient_raster_workspace}, {cell_size}, {in_prediction_locations}, {prediction_explanatory_field}, {out_prediction_featureclass})
参数 | 说明 | 数据类型 |
in_features | 包含因变量和自变量的要素类。 | Feature Layer |
dependent_field | 包含将进行建模的值的数值字段。 | Field |
explanatory_field [explanatory_field,...] | 表示回归模型中的解释变量或自变量的字段列表。 | Field |
out_featureclass | 将接收因变量的估计数和残差的输出要素类。 | Feature Class |
kernel_type | 指定核是否构建为固定距离,或者指定是否允许核在作为要素密度函数的范围内进行变化。
| String |
bandwidth_method | 指定核范围的确定方式。当选择 AICc 或 CV 时,此工具将查找最佳距离或相邻要素的数目。通常,在不确定为距离或相邻要素的数目参数使用什么的情况下,可以选择 AICc 或 CV。但是,如果工具可以确定最佳距离或者相邻要素的数目,则需要使用 BANDWIDTH_PARAMETER 选项。
| String |
distance (可选) | 当 kernel_type 为 FIXED 以及 bandwidth_method 为 BANDWIDTH_PARAMETER 时的距离。 | Double |
number_of_neighbors (可选) | kernel_type 为 ADAPTIVE 以及 bandwidth_method 为 BANDWIDTH_PARAMETER 时包括在“高斯”核的局部带宽中的精确相邻要素的数目。 | Long |
weight_field (可选) | 包含单个要素的空间权重的数值字段。此权重字段允许部分要素在模型校准过程中比其他要素更为重要。主要用于在不同位置采集的样本数目发生变化以及对因变量和自变量中的值求平均值的情况中,并且样本越多,位置越稳定(应该进行更高的加权)。如果一个位置平均具有 25 个不同的样本,但其他位置平均只具有 2 个样本,则可将样本数用作权重字段,以便在模型校准中具有更多样本的位置比具有少量样本的位置有更大的影响力。 | Field |
coefficient_raster_workspace (可选) | 将创建系数栅格的工作空间的完整路径名。如果提供了此工作空间,则会为截距及各解释变量创建栅格。 | Workspace |
cell_size (可选) | 创建系数栅格时使用的像元大小(数字)或对像元大小的引用(栅格数据集的完整路径名)。 默认情况下,像元大小为在地理处理环境输出坐标系中指定的范围的最短宽度或高度除以 250。 | Analysis Cell Size |
in_prediction_locations (可选) | 一种要素类,包含表示应计算评估值的位置的要素。数据集中的每个要素都应包含所有指定的解释变量的值;将使用为输入要素类数据校准的模型来评估这些要素的因变量。 | Feature Layer |
prediction_explanatory_field [prediction_explanatory_field,...] (可选) | 表示“预测位置”要素类中的解释变量的字段列表。这些字段名的供应顺序应与在输入要素类“解释”变量参数中的列出顺序相同(一对一的对应关系)。如果未指定任何预测解释变量,则输出预测要素类将仅包含各预测位置的已计算系数值。 | Field |
out_prediction_featureclass (可选) | 接收“预测”位置要素类中各要素的因变量估计数的输出要素类。 | Feature Class |
派生输出
名称 | 说明 | 数据类型 |
out_table | 包含工具执行汇总报告诊断值的表格。 | 表 |
out_regression_rasters | 将创建所有系数栅格的工作空间。 | 栅格图层 |
代码示例
GeographicallyWeightedRegression 示例(Python 窗口)
以下 Python 窗口脚本演示了如何使用 GeographicallyWeightedRegression 工具。
import arcpy
arcpy.env.workspace = "c:/data"
arcpy.GeographicallyWeightedRegression_stats("CallData.shp", "Calls", "BUS_COUNT;RENTROCC00;NoHSDip",
"CallsGWR.shp", "ADAPTIVE", "BANDWIDTH PARAMETER",
"#", "25", "#","CoefRasters", "135", "PredictionPoints",
"#", "GWRCallPredictions.shp")
GeographicallyWeightedRegression 示例(独立脚本)
以下独立 Python 脚本演示了如何使用 GeographicallyWeightedRegression 工具。
# Model 911 emergency calls using GWR
# Import system modules
import arcpy
# Set property to overwrite existing outputs
arcpy.env.overwriteOutput = True
# Local variables...
workspace = r"C:\Data"
try:
# Set the current workspace (to avoid having to specify the full path to the
# feature classes each time)
arcpy.env.workspace = workspace
# 911 Calls as a function of {number of businesses, number of rental units,
# number of adults who didn't finish high school}
# Process: Geographically Weighted Regression...
gwr = arcpy.GeographicallyWeightedRegression_stats("CallData.shp", "Calls",
"BUS_COUNT;RENTROCC00;NoHSDip",
"CallsGWR.shp", "ADAPTIVE", "BANDWIDTH PARAMETER","#", "25", "#",
"CoefRasters", "135", "PredictionPoints", "#", "GWRCallPredictions.shp")
# Create Spatial Weights Matrix to use with Global Moran's I tool
# Process: Generate Spatial Weights Matrix...
swm = arcpy.GenerateSpatialWeightsMatrix_stats("CallsGWR.shp", "UniqID",
"CallData25Neighs.swm",
"K_NEAREST_NEIGHBORS",
"#", "#", "#", 25)
# Calculate Moran's Index of Spatial Autocorrelation for
# OLS Residuals using a SWM File.
# Process: Spatial Autocorrelation (Morans I)...
moransI = arcpy.SpatialAutocorrelation_stats("CallsGWR.shp", "StdResid",
"NO_REPORT", "GET_SPATIAL_WEIGHTS_FROM_FILE",
"EUCLIDEAN_DISTANCE", "NONE", "#",
"CallData25Neighs.swm")
except arcpy.ExecuteError:
# If an error occurred when running the tool, print out the error message.
print(arcpy.GetMessages())
环境
许可信息
- Basic: 需要 Spatial Analyst 或 Geostatistical Analyst
- Standard: 需要 Spatial Analyst 或 Geostatistical Analyst
- Advanced: 是