计算复合指数 (空间统计)

摘要

组合多个数值变量以创建单个指数。

复合指数被用于社会和环境领域,将来自多个指标的复杂信息表示为一个单一的指标,可以衡量实现目标的进展并促进决策。 该工具支持指数创建过程的三个主要步骤:将输入变量标准化为通用尺度(预处理),将变量组合为单个指数变量(组合),以及将生成的指数缩放和分类为有意义的值(后处理)。

了解有关计算复合指数工作原理的详细信息

插图

计算复合指数工具图示

使用情况

  • 创建合适的指数取决于仔细考虑指数试图回答的问题、变量选择和应用的方法。 这些应该在与领域专家和最终用户协商后完成。

    了解有关创建复合指数的最佳做法的详细信息

  • 使用输入变量参数来指定要在指数中使用的数字字段。 该工具会忽略任何输入变量中具有缺失值的记录。

  • 您可以使用预设方法以缩放和组合变量参数来指定创建指数的方法。 例如,组合值(缩放值的平均值)选项在 0 和 1 之间缩放输入变量,并使用重新缩放的输入变量的平均值作为指数。

    • 预设方法以缩放和组合变量参数将更改缩放输入变量方法组合缩放变量方法参数的值。 要进一步自定义这些,请选择自定义选项以手动设置它们的值。

  • 缩放输入变量方法参数会将所选方法应用于所有输入变量。

    • 最小值-最大值选项是最简单的,因为它保留了输入变量的分布并将比例缩放到易于解释的 0 到 1 比例。
    • 当处理具有偏态分布或离群值的变量时,使用考虑数据等级的百分位数等级方法,或使用将变量转换为二进制(0 或 1)值的按阈值标记(二进制)选项。
    • 创建一个指数,该指数将随着时间的推移在新数据可用时重新创建(例如,年度绩效指标),此过程需使用最小值-最大值(自定义数据范围)Z 得分(自定义)选项。 使用这些选项中的任何一个,您都可以设置稳定的基准,允许比较具有不同范围和分布的数据。
    • 当变量具有可比较的比例时,例如使用百分比或使用其他工具对变量进行预处理时,原始值选项很有用。

  • 如果您需要应用工具中不可用的预处理方法,或者每个输入变量需要不同的预处理方法,请使用变换字段标准化字段重分类字段工具。

    • 执行预处理时,确保输入变量具有可比性。
    • 执行您自己的预处理时,使用缩放输入变量方法参数的原始值选项。

  • 如果所有输入变量都采用通用测量尺度(例如百分比),请使用缩放输入变量方法参数的原始值选项。

  • 缩放输入变量方法参数的按阈值标记(二进制)选项可用于根据阈值将输入变量转换为值 0 和 1。 使用阈值缩放方法参数可选择在设置阈值之前对所有变量应用预处理步骤。 例如,以下步骤计算每个位置高于第 90 个百分位数的输入变量的数量:

    1. 缩放输入变量方法参数值设置为按阈值标记(二进制)
    2. 缩放阈值方法参数值设置为百分位数
    3. 将每个变量的阈值参数值设置为大于 0.9。
    4. 组合缩放变量方法参数值设置为求和

  • 组合缩放变量方法参数包括加法(求和和平均值)和乘法(乘法和几何平均)。

    • 加法方法允许具有高值的变量补偿具有低值的变量。
    • 乘法方法不允许高值补偿低值。 仅当多个变量中存在高值时才会出现高指数值。

  • 您可以使用权重参数(在变量权重参数类别中)来指示每个输入变量的相对重要性。 默认情况下,所有权重都设置为 1,这意味着每个变量的权重相等。

    • 如果您知道一个变量的重要性应该是另一个变量的两倍,则将变量的权重设置为 2,将另一个变量的权重设置为 1。
    • 您还可以设置加起来为 1 的权重:例如,如果使用了三个变量并且一个变量的重要性应被认为是其他两个变量的两倍,则可以使用 0.5、0.25 和 0.25 的权重值。

  • 权重对生成的指数有重大影响。 设置变量的相对重要性是分析的主观部分,应符合领域知识并具有文件证明的理由。

  • 该工具将创建一个指数字段、一个排名字段和一个百分比字段。 还将在反转指数或指数缩放到新的最小值和最大值时创建指数原始字段。 将为附加分类输出参数中指定的每个分类选项添加附加字段。 如果输入是要素类,并且在输出要素或表参数中指定了要素类,则该工具将提供一个图层组,显示指数字段、百分位字段和每个选定分类选项的图层。

  • 输出指标图层将包含图表以查看指标分布,帮助识别预处理步骤是否达到预期结果,并检查输入变量与指标之间的相关性。

  • 输出索引图层包含一个弹出可视化窗口,您可以使用它来检查特定位置处的结果索引和输入变量的值。

  • 指标所衡量的概念可能由多个维度来表示。 例如,脆弱性指数可能由住房、交通和收入领域组成,每个领域都包含多个变量。 考虑构建子指数来表示每个维度。 这是通过多次运行该工具来实现的,每个维度一次,并将结果用作最终指数的输入变量。

  • 在构建包含子指数的指数时,请考虑使用 模型构建器ArcGIS AllSource 中的笔记本来简化此过程。 如果使用 模型构建器,请通过取消选中将字段附加到输入表参数来为每个子指数创建新要素。 这将为每个子指数创建一个单独的输出,在创建最终指数之前需将这些输出连接在一起。 选中将字段追加到输入表参数时,该工具不支持将 模型构建器 中的多个指数串连在一起。

  • 最佳做法是减少输入变量的数量,同时保持足够的数量以捕获指数所需的基本信息。 大量的输入变量可能会导致在解释指数时出现困难。 此外,如果多个变量属于同一领域,例如收入中位数和贫困程度,则该领域的影响可能在指数中被过度体现。

  • 该工具当前不支持位于使用 Microsoft SQL ServerOracleSQLite 数据库移动地理数据库的企业级地理数据库中的输出要素。 选中将字段附加到输入表参数时,无法使用 Microsoft SQL ServerOracleSQLite 数据库或 GeoPackage 文件在企业级地理数据库中定位输入表。

参数

标注说明数据类型
输入表

包含将合并到指数中的变量的表或要素。

Table View
输入变量

表示将合并为指数的变量的数字字段列表。 选中反转方向复选框以反转变量的值。 这意味着最初具有最高值的要素或记录将具有最低值,反之亦然。

Value Table
将字段追加到输入表
(可选)

指定结果是附加到输入数据还是作为输出要素类或表提供。

  • 选中 - 结果将附加到输入数据。 此选项会修改输入数据。
  • 未选中 - 将创建包含结果的输出要素类或表。 这是默认设置。

Boolean
输出要素或表
(可选)

将包含结果的输出要素或表。

Table; Feature Class
缩放和组合变量的预设方法
(可选)

指定创建指数时将使用的工作流。 选项代表常见的指数创建工作流程;每个选项都为缩放输入变量方法合并缩放变量方法参数设置默认值。

  • 组合值(缩放值的平均值)将通过在 0 和 1 之间缩放输入变量并对缩放后的值进行平均来创建指数。 此方法对于创建易于解释的指数很有用。 输入变量中的分布形状和异常值将影响指数。 这是默认设置。
  • 组合排名(百分位数的平均值)将通过在 0 和 1 之间缩放输入变量的排名并平均缩放排名来创建指数。 当变量值的排名比值之间的差异更重要时,此选项很有用。 输入变量中的分布形状和异常值不会影响指数。
  • 复合差异(标度值的几何平均值)将通过在 0 和 1 之间缩放输入变量并计算缩放值的几何平均值来创建指数。 高值不会完全补偿低值,因此此选项可用于创建指数,其中仅当多个变量中存在高值时才会出现较高的指数值。
  • 突出显示极值(高于第 90 个百分位数的值计数)将创建指数,用于计算值大于或等于第 90 百分位数的输入变量的数量。 此方法可用于识别可能被认为是最极端或最需要的位置。
  • 自定义将使用自定义变量缩放和组合选项创建指数。
String
缩放输入变量方法
(可选)

指定用于将输入变量转换为通用比例的方法。

  • 最小值 - 最大值0 和 1 之间的变量将使用每个变量的最小值和最大值进行缩放。 这是默认设置。
  • 最小值-最大值(自定义数据范围)使用自定义数据范围参数指定的每个变量的可能最小值和可能最大值,变量将在 0 和 1 之间缩放。 这种方法有很多用途,包括根据基准、参考统计数据或理论值指定最小值和最大值。 例如,如果一天的臭氧记录在百万分之 5 到 27 之间,您可以根据先前的观察和领域专业知识使用理论最小值和最大值,以设置可能的最大值和可能的最小值参数值 这将确保可以跨多天比较该指数。
  • 百分比数通过缩放数据值的等级,变量将转换为 0 到 1 之间的百分比数。 当您想要忽略数据值之间的绝对差异(例如离群值或偏态分布)时,此选项很有用。
  • 等级将对变量进行排序。 最小的值被赋予排名值 1,下一个值被赋予排名值 2,依此类推。 为他们排名的平均值分配并列。
  • z 得分每个变量将通过减去平均值并除以标准偏差(称为 z 分数)来标准化。 z 分数是高于或低于平均值的标准差数。 当变量的均值是重要的比较点时,此选项很有用。 高于平均值的值将获得正 z 分数,低于平均值的值将获得负 z 分数。
  • Z 分数(自定义)每个变量将通过减去自定义平均值并除以自定义标准偏差来标准化。 在自定义标准化参数中提供自定义值。 当变量的均值和标准差从以前的研究中已知时,此选项很有用。
  • 按阈值标记(二进制)当变量高于或低于定义的阈值时,将识别变量。 结果字段包含指示是否超过阈值的二进制(0 或 1)值。 您还可以使用阈值缩放方法参数在定义阈值之前缩放输入变量值,并使用阈值参数指定阈值。 当变量的值不如它们是否超过特定阈值(例如污染物的安全限值)那么重要时,此方法很有用。
  • 原始值将使用变量的原始值。 仅当所有变量都以可比较的比例(例如百分比或比率)进行测量时,或者当变量在使用此工具之前已标准化时,才使用此方法。
String
缩放阈值方法
(可选)

指定将用于在设置阈值之前将输入变量转换为通用比例的方法。

  • 最小值 - 最大值0 和 1 之间的变量将使用每个变量的最小值和最大值进行缩放。
  • 最小值-最大值(自定义数据范围)0 和 1 之间的变量将使用每个变量的最小值和最大值进行缩放。
  • 百分比数变量将转换为 0 到 1 之间的百分位数。
  • z 得分每个变量将通过减去平均值并除以标准偏差来标准化。
  • Z 分数(自定义)每个变量将通过减去自定义平均值并除以自定义标准偏差来标准化。
  • 原始值变量的值将被原封不动地使用。 这是默认设置。
String
自定义标准化
(可选)

标准化每个输入变量时将使用的自定义平均值和自定义标准差。 对于每个变量,在均值列中提供自定义均值,在标准差列中提供自定义标准差。

Value Table
自定义数据范围
(可选)

将在变量的单位中使用的可能的最小值和最大值。 每个变量将根据可能的最小值和最大值在 0 和 1 之间缩放。

Value Table
阈值
(可选)

确定是否标记要素的阈值。 以缩放变量的单位指定值,并指定是否标记高于或低于阈值的值。

Value Table
组合缩放变量方法
(可选)

指定将用于将缩放变量组合成单个值的方法。

当使用 z 分数缩放任何变量时,您不能乘以或计算几何平均值,因为 z 分数始终包含负值。

  • 总和将对这些值使用加法。
  • 平均值将计算这些值的算术(加法)平均值。 这是默认设置。
  • 将对这些值使用乘法。 所有缩放值必须大于或等于零。
  • 几何平均数将计算这些值的几何(乘法)平均值。 所有缩放值必须大于或等于零。
String
权重
(可选)

权重将设置每个输入变量对指数的相对影响。 每个权重的默认值为 1,这意味着每个变量具有相同的贡献。 增加或减少权重以反映变量的相对重要性。 例如,如果一个变量的重要性是另一个变量的两倍,则使用权重值 2。 使用大于 1 的权重值乘以组合缩放值可能会导致指数值非常大。

Value Table
输出指数名称
(可选)

指数的名称。 该值用于输出的可视化,例如字段别名和图表标签。 当输出(或附加输入)是 shapefile 时不使用该值。

String
反转输出指数值
(可选)

指定输出指数值的方向是否反转(例如,将高指数值视为低值)。

  • 选中 — 指数值将反转方向。
  • 未选中 — 指数值将不会反转方向。 这是默认设置。

Boolean
输出指数最小值和最大值
(可选)

输出指数的最小值和最大值 这种缩放是在组合缩放变量之后应用的。 如果未提供任何值,则不缩放输出指数。

Value Table
其他分类输出
(可选)

指定将用于对输出指数进行分类的方法。 将为每个选定的选项提供一个额外的输出字段。

  • 相等间隔通过将值的范围划分为大小相等的间隔来创建类。
  • 分位数将创建每个类包含相等数量的记录的类。
  • 标准差将根据高于和低于指数平均值的标准差数量创建类别。 结果值将介于 -3 和 3 之间。
  • 自定义将使用输出指数自定义类参数指定分类间隔和分类值。
String
输出指数类数
(可选)

将用于等间隔和分位数分类方法的类数。

Long
输出指数自定义类
(可选)

自定义分类方法的上限和分类值。 例如,您可以使用此变量根据自定义中断值将包含 0 到 100 之间的值的指数分类为表示低、中和高值的类。

Value Table

派生输出

标注说明数据类型
更新的输入表

已更新的输入表。

Table View
输出图层组

如果输入是一个要素类并且为输出要素或表参数指定了一个要素类,则会提供一个图层组来显示指数字段、百分位字段和每个选定分类选项的图层。

Group Layer

arcpy.stats.CalculateCompositeIndex(in_table, in_variables, {append_to_input}, {out_table}, {index_preset}, {preprocessing}, {pre_threshold_scaling}, {pre_custom_zscore}, {pre_min_max}, {pre_thresholds}, {index_method}, {index_weights}, {out_index_name}, {out_index_reverse}, {post_min_max}, {post_reclass}, {post_num_classes}, {post_custom_classes})
名称说明数据类型
in_table

包含将合并到指数中的变量的表或要素。

Table View
in_variables
[[var1, reverse1],[var2, reverse2],...]

表示将合并为指数的变量的数字字段列表。 反转方向列反转变量的值。 这意味着最初具有最高值的要素或记录将具有最低值,反之亦然。 值将在缩放后反转。

Value Table
append_to_input
(可选)

指定结果是附加到输入数据还是作为输出要素类或表提供。

  • APPEND_TO_INPUT结果将附加到输入数据。 此选项会修改输入数据。
  • NEW_FEATURES将创建包含结果的输出要素类或表。 这是默认设置。
Boolean
out_table
(可选)

将包含结果的输出要素或表。

Table; Feature Class
index_preset
(可选)

指定创建指数时将使用的工作流。 选项代表常见的指数创建工作流程;每个选项都为 preprocessingindex_method 参数设置默认值。

  • MEAN_SCALED将通过在 0 和 1 之间缩放输入变量并对缩放后的值进行平均来创建指数。 此方法对于创建易于解释的指数很有用。 输入变量中的分布形状和异常值将影响指数。 这是默认设置。
  • MEAN_PCTL将通过在 0 和 1 之间缩放输入变量的排名并平均缩放排名来创建指数。 当变量值的排名比值之间的差异更重要时,此选项很有用。 输入变量中的分布形状和异常值不会影响指数。
  • GEOMEAN_SCALED将通过在 0 和 1 之间缩放输入变量并计算缩放值的几何平均值来创建指数。 高值不会抵消低值,因此此选项可用于创建指数,其中仅当多个变量中存在高值时才会出现较高的指数值。
  • SUM_FLAGSPCTL将创建指数,用于计算值大于或等于第 90 百分位数的输入变量的数量。 此方法可用于识别可能被认为是最极端或最需要的位置。
  • CUSTOM将使用自定义变量缩放和组合选项创建指数。
String
preprocessing
(可选)

指定用于将输入变量转换为通用比例的方法。

  • MINMAX0 和 1 之间的变量将使用每个变量的最小值和最大值进行缩放。 这是默认设置。
  • CUST_MINMAX使用 pre_min_max 参数指定的每个变量的可能最小值和可能最大值,变量将在 0 和 1 之间缩放。 这种方法有很多用途,包括根据基准、参考统计数据或理论值指定最小值和最大值。 例如,如果一天的臭氧记录在百万分之 5 到 27 之间,您可以根据先前的观察和领域专业知识使用理论最小值和最大值,以确保可以跨多天比较该指数
  • PERCENTILE通过计算小于该数据值的数据值百分比,变量将转换为 0 到 1 之间的百分位数。 当您想要忽略数据值之间的绝对差异(例如离群值或偏态分布)时,此选项很有用。
  • RANK将对变量进行排序。 最小的值被赋予排名值 1,下一个值被赋予排名值 2,依此类推。 为他们排名的平均值分配并列。
  • ZSCORE每个变量将通过减去平均值并除以标准偏差(称为 z 分数)来标准化。 z 分数是高于或低于平均值的标准差数。 当变量的均值是重要的比较点时,此选项很有用。 高于平均值的值将获得正 z 分数,低于平均值的值将获得负 z 分数。
  • CUST_ZSCORE每个变量将通过减去自定义平均值并除以自定义标准偏差来标准化。 在 pre_custom_zscore 参数中提供自定义值。 当变量的均值和标准差从以前的研究中已知时,此选项很有用。
  • BINARY当变量高于或低于定义的阈值时,将识别变量。 结果字段包含指示是否超过阈值的二进制(0 或 1)值。 您还可以使用 pre_threshold_scaling 参数在定义阈值之前缩放输入变量值,并使用 pre_thresholds 参数指定阈值。 当变量的值不如它们是否超过特定阈值(例如污染物的安全限值)那么重要时,此方法很有用。
  • RAW将使用变量的原始值。 仅当所有变量都以可比较的比例(例如百分比或比率)进行测量时,或者当变量在使用此工具之前已标准化时,才使用此方法。
String
pre_threshold_scaling
(可选)

指定将用于在设置阈值之前将输入变量转换为通用比例的方法。

  • THRESHOLD_MINMAX0 和 1 之间的变量将使用每个变量的最小值和最大值进行缩放。
  • THRESHOLD_CUST_MINMAX0 和 1 之间的变量将使用每个变量的最小值和最大值进行缩放。
  • THRESHOLD_PERCENTILE变量将转换为 0 到 1 之间的百分位数。
  • THRESHOLD_ZSCORE每个变量将通过减去平均值并除以标准偏差来标准化。
  • THRESHOLD_CUST_ZSCORE每个变量将通过减去自定义平均值并除以自定义标准偏差来标准化。
  • THRESHOLD_RAW变量的值将被原封不动地使用。 这是默认设置。
String
pre_custom_zscore
[[field1, mean1, stdev1], [field2, mean2, stdev2],...]
(可选)

标准化每个输入变量时将使用的自定义平均值和自定义标准差。 对于每个变量,在均值列中提供自定义均值,在标准差列中提供自定义标准差。

Value Table
pre_min_max
[[field1, min1, max1], [field2, min2, max2],...]
(可选)

将在变量的单位中使用的可能的最小值和最大值。 每个变量将根据可能的最小值和最大值在 0 和 1 之间缩放。

Value Table
pre_thresholds
[[field1, method1, threshold1], [field2, method2, threshold2],...]
(可选)

确定是否标记要素的阈值。 以缩放变量的单位指定值,并指定是否标记高于或低于阈值的值。

Value Table
index_method
(可选)

指定将用于将缩放变量组合成单个值的方法。

  • SUM将对这些值使用加法。
  • MEAN将计算这些值的算术(加法)平均值。 这是默认设置。
  • PRODUCT将对这些值使用乘法。 所有缩放值必须大于或等于零。
  • GEOMETRIC_MEAN将计算这些值的几何(乘法)平均值。 所有缩放值必须大于或等于零。

当使用 z 分数缩放任何变量时,您不能乘以或计算几何平均值,因为 z 分数始终包含负值。

String
index_weights
[[field1, weight1], [field2, weight2],...]
(可选)

权重将设置每个输入变量对指数的相对影响。 每个权重的默认值为 1,这意味着每个变量具有相同的贡献。 增加或减少权重以反映变量的相对重要性。 例如,如果一个变量的重要性是另一个变量的两倍,则使用权重值 2。 使用大于 1 的权重值乘以组合缩放值可能会导致指数值非常大。

Value Table
out_index_name
(可选)

指数的名称。 该值用于输出的可视化,例如字段别名和图表标签。 当输出(或附加输入)是 shapefile 时不使用该值。

String
out_index_reverse
(可选)

指定输出指数值的方向是否反转(例如,将高指数值视为低值)。

  • REVERSE指数值将反转方向。
  • NO_REVERSE指数值将不会反转方向。 这是默认设置。
Boolean
post_min_max
[min, max]
(可选)

输出指数的最小值和最大值 这种缩放是在组合缩放变量之后应用的。 如果未提供任何值,则不缩放输出指数。

Value Table
post_reclass
[post_reclass,...]
(可选)

指定将用于对输出指数进行分类的方法。 将为每个选定的选项提供一个额外的输出字段。

  • EQINTERVAL通过将值的范围划分为大小相等的间隔来创建类
  • QUANTILE将创建每个类包含相等数量的记录的类。
  • STDDEV将根据高于和低于指数平均值的标准差数量创建类别。 结果值将介于 -3 和 3 之间。
  • CUST将使用 post_custom_classes 参数指定分类间隔和分类值。
String
post_num_classes
(可选)

将用于等间隔和分位数分类方法的类数。

Long
post_custom_classes
[[min1, max1], [min2, max2],...]
(可选)

自定义分类方法的上限和分类值。 例如,您可以使用此变量根据自定义中断值将包含 0 到 100 之间的值的指数分类为表示低、中和高值的类。

Value Table

派生输出

名称说明数据类型
updated_table

已更新的输入表。

Table View
output_layer_group

如果输入是一个要素类并且为 out_table 参数指定了一个要素类,则会提供一个图层组来显示指数字段、百分位字段和每个选定分类选项的图层。

Group Layer

代码示例

CalculateCompositeIndex 示例 1(Python 窗口)

以下 Python 脚本演示了如何使用 CalculateCompositeIndex 函数。


import arcpy
arcpy.stats.CalculateCompositeIndex(
    in_table=r"C:\MyData.gdb\CommunityCharacteristics", 
    out_table=r"C:\MyData.gdb\CommunityCharacteristicsIndex",
    in_variables=["ASTHMA_Prevalence_Percent", "Health_NoInsurance_Percent", 
                    "BelowPovertyLine_Percent"],
    index_preset="MEAN_SCALED")
CalculateCompositeIndex 示例 2(独立脚本)

以下 Python 脚本演示了如何使用 CalculateCompositeIndex 函数。


# Import system modules 
import arcpy 
import os 

try: 
    # Set the workspace and overwrite properties
    arcpy.env.workspace = r"C:\temp\temp.gdb" 
    arcpy.env.overwriteOutput = True 
    
    # Set the input point feature parameters
    input_features = os.path.join(arcpy.env.workspace, "CommunityCharacteristics")

    # Set a list of variables that will be combined into an index
    input_variables = ["ASTHMA_Prevalence_Percent", "Health_NoInsurance_Percent", 
                       "BelowPovertyLine_Percent"]

    # Set the output name that will contain the index values.
    output_features = os.path.join(arcpy.env.workspace, "CommunityCharacteristicsIndex")

    # Set the method to scale the input variables
    preprocessing_method = "PERCENTILE"

    # Set the method to combine the input variables
    combination_method = "MEAN"
    variable_weights = [["ASTHMA_Prevalence_Percent", 2],
                        ["Health_NoInsurance_Percent", 1],
                        ["BelowPovertyLine_Percent", 1]]

    # Set the output settings
    output_index_name = "Asthma_Needs_Index"
    output_index_range = "0 100"
    output_classification = "QUANTILE"
    output_classification_num_classes = 5

    # Call the tool using the parameters defined above.
    arcpy.stats.CalculateCompositeIndex(
        in_table=input_features,
        in_variables=input_variables, 
        out_table=output_features,
        index_preset="CUSTOM",
        preprocessing=preprocessing_method,
        index_method=combination_method,
        index_weights=variable_weights,
        out_index_name=output_index_name,
        post_min_max=output_index_range,
        post_reclass=output_classification,
        post_num_classes=output_classification_num_classes)

except arcpy.ExecuteError:
    # If an error occurred when running the tool, print the error message.
    print(arcpy.GetMessages())