动态线性模型的简单解释

机器算法验证 r 状态空间模型 dlm
2022-03-26 01:14:16

我正在寻找一个关于什么是动态线性模型的非常简单的解释,因为我需要向非技术观众解释这一点。我环顾四周寻找例子,但它们的数学很重。

我从 dlmodeler 小插图中找到了以下解释:

http://www2.uaem.mx/r-mirror/web/packages/dlmodeler/dlmodeler.pdf (见第2页和第3页)

它的某些方面我认为观众不会遵循,所以我正在寻找某人提供一个非常基本的解释或示例,以广泛说明 dlms 的工作原理(如果示例在 R 中会很棒)。

谢谢


介绍

广义动态线性模型是一种强大的时间序列建模、分析和预测方法。该框架与回归模型、ARIMA 模型、指数平滑和结构时间序列(也称为未观察组件模型,UCM)系列密切相关。

DLM 时间序列分析起源于工程领域。为了控制动态物理系统,需要根据噪声测量值(例如各种传感器的读数(观测值))来估计诸如速度和位置(系统状态)之类的未知量。系统的状态根据已知的转移方程从一种状态(例如时间 t 的位置和速度)演变为另一种状态(时间 t+1 的位置和速度),可能包括随机扰动和干预效应。观测值是通过观测方程从状态值导出的(例如,在时间 t 的观测值 = 位置 + 噪声),还可能包括随机干扰和干预效应。

挑战是在给定时间点考虑到一组可用观测值,获得对未知状态的最佳估计。由于噪声干扰的存在,通常不可能简单地直接使用观测值,因为它们会导致估计量过于不稳定。在 1960 年代,卡尔曼滤波和平滑算法被开发和推广,以有效和优化地解决这个估计问题。该技术基于迭代过程,其中状态值根据过去观察的知识连续预测,然后在接收到下一个观察时更新。由于卡尔曼滤波的预测和更新特性,它也可以在贝叶斯视角下进行解释。

动态线性模型

为控制动态系统而开发的理论直接应用于时间序列的一般分析。通过对系统的当前状态和动态进行良好估计,可以推导出有关其演化和后续值的假设;从而获得对未来观测的预测。

动态线性模型是一般状态空间模型的特例,其中状态和观察方程是线性的,并且分布遵循正态定律。它们也被称为高斯线性状态空间模型。广义 DLM 通过允许分布是任何指数函数族(包括伯努利、二项式和泊松分布,特别适用于计数数据)来放松正态性假设。

动态线性模型有两种本构操作:滤波和平滑。简而言之,过滤是一种操作,包括估计时间 t 的状态值,仅使用直到(并包括)t-1 的观察。相反,平滑是旨在使用整个观察集估计状态值的操作。

3个回答

我还必须定期与没有技术背景的人交谈,这就是我的处理方式:首先,除非你的听众知道正态分布,否则我什至不会提及 DLM,我只会谈论状态空间楷模。我仍然会给他们一个 DLM 方程组作为示例(线性很容易理解),但我发现与没有技术背景的人谈论“观察到”和“状态”方程非常容易.

然后我会用一个简单的例子来说明它(我取自 Petris、Petrone 和 Campagnoli 2009 年的“Dynamic Linear Models with R”一书)。这是我要(粗略地)向观众解释的内容,以向他们解释 DLM 的要点是什么:

演讲者:“假设你有兴趣测量尼罗河的水位,例如因为你想知道在一年中的哪个时期某些船只(不同大小的)可以通过它,或者因为你只是想看看如何长期水位随时间变化。

每年,你都会去河边的某个地方进行测量。现在,可能那天下雨,甚至整个月都在下雨,或者你没有精确测量,因为你的设备不太好,对吧?因此,主要前提是您以额外的、不可控制的和随机的不精确性来测量水位。为了让事情更具体一点:

ObservedNileWaterLevelt =TrueNileWaterLevelt+MeasurementErrort

我们看到,我们每年测量水位,它是某个真实水位的函数,并且测量误差始终存在(但具有随机性)并且无法避免(这里我找到了雨的例子您测量得很好以说明误差项的来源)

这一切都很好,但假设真正的尼罗河水位随时间变化也是有道理的,对吧?也许人们建造水坝并阻止一些来自较小河流的流入或类似的东西。

那么,将以下等式也纳入其中是有意义的吗?:

TrueNileWaterLevelt =TrueNileWaterLevelt1+AdditiveErrort

今天真实的、未被观察到的水平取决于去年的水平和我们输入的其他部分,它是随机的,表示我们无法完美地估计事物。”

这大致是我向非技术人员解释的方式(但他们有金融背景,所以我以“经济的基本状况”为例)。

这也是随机游走 + 噪声模型,它是我能想到的最简单的 DLM(如果他们不知道什么是回归,就别再和他们谈论随机斜率等等了)。显然,如果您认为他们至少对统计模型有一些了解并讨论随机斜率等,您仍然可以扩大示例。

这是尼罗河级别的过滤值的代码(我从书中获取,您可以在此处找到它)如果找不到该书,您可以在此处从 JStatSoft 免费访问相应的文章

###
plot(Nile, type='o', col = c("darkgrey"),
     xlab = "", ylab = "Level")
mod1 <- dlmModPoly(order = 1, dV = 15100, dW = 755)
NileFilt1 <- dlmFilter(Nile, mod1)
lines(dropFirst(NileFilt1$m), lty = "longdash")
mod2 <- dlmModPoly(order = 1, dV = 15100, dW = 7550)
NileFilt2 <- dlmFilter(Nile, mod2)
lines(dropFirst(NileFilt2$m), lty = "dotdash")
leg <- c("data", paste("filtered,  W/V =",
                       format(c(W(mod1) / V(mod1),
                                W(mod2) / V(mod2)))))
legend("bottomright", legend = leg,
       col=c("darkgrey", "black", "black"),
       lty = c("solid", "longdash", "dotdash"),
       pch = c(1, NA, NA), bty = "n")

在此处输入图像描述 该示例显示了具有不同信噪比的拟合 - 信噪比越高,“拟合”越好。我认为看到这一点很有启发性,但您可以跳过它并只显示拟合线。

如果您的听众可以接受,请与他们讨论如何使用卡尔曼滤波器进行预测、过滤和平滑(但如果他们不是技术人员,请跳过它)。显然,您可以将其他模型拟合到该数据。

希望这会有所帮助,让我们知道您的想法以及您最后向他们展示的内容!

编辑:实际上我刚刚看到这个线程在 4 个月前被 necroed ...即使 OP 已经不需要这个了,我希望它对将来的某个人有用。

我建议你看几个例子。最常见的问题是“状态变量代表什么?” 答案取决于模型,但大多数 DLM 可以被认为是具有时变系数的回归。在这种情况下,这些时变系数通常是您的状态。

如果您在截距上回归,他们有时会将该模型称为本地模型。如果您回归该过程的过去值,有时他们称其为随时间变化的自动回归。您还可以及时回归谐波或多项式。所有这些都有一个共同点,它们基本上都是回归,但是你把动态放在系数上。

我能做的最好的就是有点冗长但可能更容易理解(第一次尝试):

因此,对于(静态)线性回归,通常的格式是 y = mx +b,就像一条线的方程(b 是常数,m 是斜率,x 是您的预测变量,y 是您的响应)。

回归的神奇之处在于它将这个方程放大到矩阵级别(所以现在我们在 n 维空间中有一条线,而不是像上面那样位于 xy 平面中的通常二维线),所以现在更像 Y = MX + b 其中 Y 和 X(和 M)是矩阵,回归通过一堆矩阵代数、似然估计等来确定我们的 M 和我们的 b。我们可以这样做,因为我们知道数据存在于多个观测值中,例如 Y (i) = MX(i)+b 对于 i 的所有值,直到我们的观察次数。

但是对于时间序列、顺序数据,这 i 实际上是一个时间步 t,所以现在更像 Y(t) = MX(t) + b,但是现在我们可以做一个技巧。与其假设 M 是由数据确定的静态斜率矩阵,不如假设 M 不是所有观测值随时间推移的一组固定值,而是一组变化的、动态的、可更新的斜率对于 t 的所有步骤,都与先前的时间步 t-1 相关?

这是有道理的,因为在时间序列中,y(t-1) 的最后一个值通常与 y(t) 的下一个值相关(这是自回归的,可以进行测试)。没有理由相信 M 不会随着时间而改变,所以为什么不检查一下。为此,我们在回归设置中插入了更多“内部参数”,允许在不同(但顺序)t 处更改条件,以利用这种 y(t) 到 y(t-1) 关系。

动态回归允许我们的 M、我们的斜率(即我们的回归参数,即我们的预测变量的影响大小)随时间而变化,并且可以让我们更好地了解正在发生的事情(而不是将 M 中的每个参数都视为“静态”) ' 在所有 t 中,但是随着 t 的流程演变和变化的参数) -- - -

有时它会有所帮助,有时其他“非平稳”分析会有所帮助(如 ARIMA 和直接自回归 AR(1) 等)- - -