当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R KalmanLike 卡尔曼滤波


R语言 KalmanLike 位于 stats 包(package)。

说明

使用卡尔曼滤波查找(高斯)对数似然,或用于预测或平滑。

用法

KalmanLike(y, mod, nit = 0L, update = FALSE)
KalmanRun(y, mod, nit = 0L, update = FALSE)
KalmanSmooth(y, mod, nit = 0L)
KalmanForecast(n.ahead = 10L, mod, update = FALSE)

makeARIMA(phi, theta, Delta, kappa = 1e6,
          SSinit = c("Gardner1980", "Rossignol2011"),
          tol = .Machine$double.eps)

参数

y

单变量时间序列。

mod

说明状态空间模型的列表:请参阅“详细信息”。

nit

计算初始化的时间。 nit = 0L 意味着初始化是为了一步预测,因此 Pn 不应在第一步计算。

update

如果TRUE,则更新mod对象将作为结果的属性"mod"返回。

n.ahead

需要预测的前方步骤数。

phi, theta

长度为 的数字向量给出 AR 和 MA 参数。

Delta

差分系数向量,因此 ARMA 模型适合 y[t] - Delta[1]*y[t-1] - ...

kappa

差分模型中过去观测值的先验方差(作为创新方差的倍数)。

SSinit

指定计算状态空间初始化的 Pn 部分的算法的字符串;查看具体信息'。

tol

SSinit = "Rossignol2011" 时,容差最终传递给 solve.default

细节

这些函数与具有状态向量‘的一般单变量状态空间模型一起使用⁠a⁠”,过渡“⁠a <- T a + R e⁠’, 和观测方程‘⁠y = Z'a + eta⁠’, 。可能性是估计后的轮廓可能性 .

该模型被指定为至少包含组件的列表

T

转移矩阵

Z

观测系数

h

观察方差

V

'⁠RQR’⁠

a

当前状态估计

P

状态不确定性矩阵的当前估计

Pn

状态不确定性矩阵 在时间 的估计(未由 KalmanForecast 更新)。

KalmanSmoothtsSmooth 的主力函数。

makeARIMA 构造 ARIMA 模型的状态空间模型,另请参阅 arima

状态空间初始化多年来一直使用 Gardner 等人的方法 (SSinit = "Gardner1980")。然而,当接近非平稳时,有时会出现缺陷。因此,将来它可能会被替换为默认值,并且仅出于可重复性的原因而保留。因此,建议显式指定 SSinit,特别是在 arima() 中。 "Rossignol2011" 方法已由 Raphael Rossignol 大学提出并部分记录。格勒诺布尔,于 2011 年 9 月 20 日(请参阅下面的 PR#14682),后来由 Matwey V. Kornilov 移植到 C。它通过差分方程的方法(Brockwell 和 Davis 第 93 页)计算 的协方差矩阵,这显然是由 Gardner 等人的裁判建议的(参见他们论文的第 314 页)。

对于 KalmanLike ,包含组件 Lik (对数似然减去一些常数)和 s2 的列表,即 的估计值。

对于 KalmanRun ,包含组件 values 的列表,长度为 2 的向量,给出 KalmanLikeresid (残差)和 states 的输出,同时状态估计,每个矩阵一行观察时间。

对于 KalmanSmooth ,包含两个组件的列表。组件 smooth 是基于所有观测值的状态估计 n x p 矩阵,每次一行。分量 var 是方差矩阵的 n by p by p 数组。

对于 KalmanForecast ,包含组件 pred 、预测和 var 、预测误差的未缩放方差(乘以 s2 )的列表。

对于 makeARIMA ,包含其参数组件的模型列表。

警告

这些函数被设计为从其他函数调用,这些函数检查传递的参数的有效性,因此很少进行检查。

例子

## an ARIMA fit
fit3 <- arima(presidents, c(3, 0, 0))
predict(fit3, 12)
## reconstruct this
pr <- KalmanForecast(12, fit3$model)
pr$pred + fit3$coef[4]
sqrt(pr$var * fit3$sigma2)
## and now do it year by year
mod <- fit3$model
for(y in 1:3) {
  pr <- KalmanForecast(4, mod, TRUE)
  print(list(pred = pr$pred + fit3$coef["intercept"], 
             se = sqrt(pr$var * fit3$sigma2)))
  mod <- attr(pr, "mod")
}

参考

Durbin, J. and Koopman, S. J. (2001). Time Series Analysis by State Space Methods. Oxford University Press.

Gardner, G, Harvey, A. C. and Phillips, G. D. A. (1980). Algorithm AS 154: An algorithm for exact maximum likelihood estimation of autoregressive-moving average models by means of Kalman filtering. Applied Statistics, 29, 311-322. doi:10.2307/2346910.

R bug report PR#14682 (2011-2013) https://bugs.r-project.org/show_bug.cgi?id=14682.

也可以看看

arimaStructTStsSmooth

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Kalman Filtering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。