X12-ARIMA 挑战和变通方法

背景介绍

几年前,用户要求在 MS Excel 中为流行的 X12-ARIMA 及其季节性调整方法 (X11) 提供一个更现代化的界面。美国人口普查局开发并维护了 X12-ARIMA 程序 (X12A),因此它是免费提供的,几乎所有业内人士都高度认可并推崇 X12A 程序及其方法。

当时,我们选择将 NumXL 与 X12ARIMA 集成,但作为一个外部程序。

与外部计划整合意味着什么?

简而言之,NumXL 实现了多个 excel 函数,并提供了一个用户界面来接受用户的输入和数据。在幕后,NumXL 会将数据和用户输入的内容传回 X12A 程序进行计算,计算完成后,NumXL 会将输出结果输入 Excel 给用户。

在该图中,一个简化的流程图直观地展示了 NumXL 如何将数据和输入传输到 X12A 程序中进行计算,并将输出返回到 Excel 中供用户使用。

你为什么要关心?

我们假定您已经在使用 X12A/X11,并希望与您分享我们为克服 X12A 的某些限制而编写的一些提示和变通方法,以优化模型的运行时间和响应速度。

无论您有一个 X12ARIMA 模型还是数百个模型,您的工作簿都应该能够处理它们。

 警告

从1.67版(MARTHA)开始,NumXL支持最新的美国人口普查X13ARIMA-SEATS季节调整软件。美国人口普查不维护 X12ARIMA 季节性调整软件,NumXL 包括该模型,以帮助我们的客户将现有的 X12 模型迁移到 X13 同等模型。

问题 1:X12A 对输入数据长度的限制

美国人口普查 X12 ARIMA 接受的时间序列长度从 12(月度数据)和 4(季度数据)一直到 600 个观测值。

NumXL 函数接受任意长度的时间序列,但只使用最近的 600 个(无遗漏)观测值用于 X12A 目的,并相应地移动起始日期。

作为用户,你无需更改任何内容,只需像往常一样传递数据,NumXL 就会在幕后处理这一约束。

问题 2:为数据序列添加新的观测值

随着时间的推移,会有新的观测数据出现并添加到输入数据集中。我们应完善 X12ARIMA 定义,将这些观测数据纳入其中,并重新运行模型以更新季节性调整和预测。

上述情况可能听起来很直观,但请记住,您需要更改工作簿中每个 X12ARIMA 模型公式中的输入单元格范围。 这对一个序列来说不是问题,但如果是几十个或几百个时间序列和相应的模型呢?您需要定期重复相同的练习,因此我们需要一种更好的方法。

解决方法与我们在提示中说明的方法相同: “如何设置自动更新回归分析.” 我们会在输入数据末尾添加 "#N/A "以保留这些单元格。接下来,在 X12ARIMA 模型定义中包含这些单元格。

起初,NumXL 会忽略在最后一个非遗漏值观测点之后出现的所有 "#N/A"。之后,随着新数据点的出现,我们会用实际数字替换 #N/A,从而增加输入数据集。

这种方法可以在输入数据集中添加新的观测值,而无需编辑定义公式。您仍然需要重新计算以更新模型的输出。

这张图片展示了我们如何在输入数据末尾添加 #N/A 以保留这些数据。

问题 3:制作模型的时间太长!

X12A 可执行全套模型选择和校准,因此如果工作表中有多个 X12ARIMA 模型,计算整个工作表所需的时间将超过几秒钟。

该问题的解决方法包括两个部分:

  1. 禁用自动计算,并将其设置为手动。
    这张图片展示了我们如何禁用自动计算并将其设置为手动。
    将计算设置为手动后,当单元格被触及或其值发生变化时,excel 不会尝试强制计算。相反,你需要点击 F9 或 SHIFT+F9 开始计算。
    在此期间,您可以进行许多更改,而 excel 的响应速度仍然非常快。
  2. 禁用 X12ARIMA 磁盘清理,将生成的 X12ARIMA 中间文件保留在磁盘上。
    转到 NumXL 安装目录(即 C:\users\<username>\AppData\Roaming\NumXL),用记事本或你喜欢的文本编辑器打开 NumXL.conf 文件。
    找到 X12ARIMA 部分下的 "CLEANUP_EXIT "条目。
    该图显示了 NumXL.conf 文件,以及设置为

确保相应的值设置为 "false"。

注意:将 <username> 替换为您的实际 windows 登录名。

现在,打开工作簿时,NumXL 将(根据需要)加载存储的模型及其输出,而无需运行 X12A 程序。

问题 4:我的数据源涉及许多单元格。

在许多环境中,数据馈送程序(按需或定期)生成并更新 X12ARIMA 模型中使用的输入数据。这种设置非常有趣,但输入单元格经常被触及,Excel 会触发大规模的计算请求,因此在运行手动计算时,许多模型都需要重新评估。

在 NumXL 中,我们在内部计算并存储输入数据集和模型参数值的校验和(又称哈希值)。因此,当 Excel 提出新的模型评估请求时,NumXL 会计算新的校验和,并与我们已有的校验和进行比较。如果 NumXL 没有发现任何变化,它就会直接忽略该请求。

因此,无论您有多少 X12ARIMA 模型,NumXL 都只会评估那些输入(即模型参数或输入数据)自上次运行以来发生了真正变化的模型。因此,X12ARIMA 会在需要时运行。

问题 5:缺失值(#N/A)

美国人口普查 X12A 程序不处理缺失值,但正如我们在问题 2 中看到的,缺失值是有益的。

NumXL 接受在(非缺失)数据集开始或结束之前有缺失值的输入数据集。NumXL 不支持有缺失值的中间观测值。

您可能会问,为什么要在输入数据集开始之前插入缺失值观测值。用户总是希望将数据集排在同一行开始,但数据集可能有不同的开始日期,因此通过在开头插入 #N/A,我们可以使所有时间序列在同一天开始。

在时间序列的任一端添加缺失值的观测数据不会影响输出结果,因为 NumXL 会将开始日期(和结束日期)调整为最近的非缺失观测数据的日期。

问题 6:X12ACOMP 中的偏移参数

要显示任何 X12ARIMA 输出时间序列(如季节性调整),用户应使用工作表函数 X12ACOMP(),但该函数需要:模型名称、输出类型和偏移量。

偏移量是指从输入数据集开始算起的观测值数量。这些观测值应包括缺失值(即开始时的缺失值)。

要计算偏移量,可以在一列中填入整数序列,从 1 开始,依次递增。

图片显示用整数序列填充一列,从 1 开始,依次递增。

另一种方法是使用 Excel 内置函数 COUNT(),计算从输入数据开始到当前位置的单元格数。

图片展示了使用 COUNT() 函数计算从输入数据开始的单元格数。

问题 7:IT/MIS 政策限制

在某些环境中,IT/MIS 设置了限制性安全策略,防止程序在用户的本地配置文件(即 C:\users\<username>\AppData\LocalData)中运行。这种设置会阻止 X12A 程序运行,从而产生任何输出。

解决这一问题的办法是将 "NumXL.conf "文件中的 "数据目录 "设置更改为用户有足够权限运行程序的目录。

为此,进入 NumXL 安装目录(即 C:\users\<username>\AppData\Roaming\NumXL),用记事本或你喜欢的文本编辑器打开 NumXL.conf 文件。

图中显示了 NumXL.conf 文件中的配置属性 (DATAPATH)

找到 [GLOBASLS] 部分下的 "DATAPATH "条目,取消注释(删除标签),并将其值设置为磁盘上有足够权限运行 X12A 程序的目录。

结论

在本期中,我们介绍了用户在日常使用 Excel 中的 NumXL X12ARIMA 模型时遇到的一系列难题。针对每种情况,我们都提出了相应的改进措施和建议,在某些情况下,还提出了解决问题的变通方法。

展望未来,我们将汲取这些宝贵的经验教训,继续实施美国人口普查最新的 X13ARIMA-SEATS 计划。

评论

登录写评论。

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助