本文介绍了如何在 R 中分析不规则的时间序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 R 中有一个 zoo 时间序列:

I have a zoo time series in R:

d <- structure(c(50912, 50912, 50912, 50912, 50913, 50913, 50914,
50914, 50914, 50915, 50915, 50915, 50916, 50916, 50916, 50917,
50917, 50917, 50918, 50918, 2293.8, 2302.64, 2310.5, 2324.02,
2312.25, 2323.93, 2323.83, 2338.67, 2323.1, 2320.77, 2329.73,
2319.63, 2330.86, 2323.38, 2322.92, 2317.71, 2322.76, 2286.64,
2294.83, 2305.06, 55.9, 62.8, 66.4, 71.9, 59.8, 65.7, 61.9, 67.9,
38.5, 36.7, 43.2, 30.3, 42.4, 33.5, 48.8, 52.7, 61.2, 30, 41.7,
50, 8.6, 9.7, 10.3, 11.1, 9.2, 10.1, 9.6, 10.4, 5.9, 5.6, 6.6,
4.7, 6.5, 5.2, 7.5, 8.1, 9.5, 4.6, 6.4, 7.7, 9.29591864400155,
10.6585128174944, 10.4386464748912, 11.5738448647708, 10.9486074772952,
10.9546547052814, 10.3733963771546, 9.15627378048238, 8.22993822910891,
5.69045896511178, 6.95269658370746, 7.78781665368086, 7.20089569039135,
4.9759716583555, 8.99378907920762, 10.0924594632635, 10.3909638115674,
6.28203685114275, 9.16021859457356, 7.56829801052175, 0.695918644001553,
0.9585128174944, 0.138646474891241, 0.473844864770827, 1.74860747729523,
0.854654705281426, 0.773396377154565, -1.24372621951762, 2.32993822910891,
0.0904589651117833, 0.352696583707458, 3.08781665368086, 0.700895690391349,
-0.224028341644497, 1.49378907920762, 1.99245946326349, 0.890963811567351,
1.68203685114275, 2.76021859457356, -0.131701989478247), .Dim = c(20L,
6L), .Dimnames = list(NULL, c("station_id", "ztd", "zwd", "iwv",
"radiosonde", "error")), index = structure(c(892094400, 892116000,
892137600, 892159200, 892180800, 892245600, 892267200, 892288800,
892332000, 892353600, 892375200, 892418400, 892440000, 892461600,
892504800, 892526400, 892548000, 892591200, 892612800, 892634400
), class = c("POSIXct", "POSIXt")), class = "zoo")

我想执行 ts 包允许我执行的一些分析,例如将时间序列分解为趋势和季节性,以及查看自相关函数.但是,尝试执行其中任何一项都会导致错误:Error in na.fail.default(as.ts(x)) : missing values in object.

I want to perform some of the analyses that the ts package allows me to do, such as decomposing the time-series into the trend and seasonality, and looking at the auto-correlation function. However, trying to do any of these gives an error of: Error in na.fail.default(as.ts(x)) : missing values in object.

更深入地研究这一点,似乎所有这些函数都适用于 ts 对象,根据定义,这些对象具有规则间隔的观察值.我的观察结果不是,所以我最终得到了很多 NA 并且一切都失败了.

Looking into this in more depth, it seems that all of these functions work on ts objects that have, by definition, regularly-spaced observations. My observations aren't, so I end up with a lot of NAs and everything fails.

有没有办法分析 R 中的不规则时间序列?还是我需要以某种方式将它们转换为常规?如果是这样,有没有一种简单的方法可以做到这一点?

Is there a way to analyse the irregular time-series in R? Or do I need to convert them to be regular somehow? If so, is there a simple way to do this?

推荐答案

我过去曾使用加法模型对此类不规则数据进行分析,以分解"季节性和趋势分量.由于这是一种基于回归的方法,您需要将残差建模为时间序列过程,以解决残差缺乏独立性的问题.

I have analysed such irregular data in the past using an additive model to "decompose" the seasonal and trend components. As this is a regression-based approach you need to model the residuals as a time series process to account for lack of independence in the residuals.

我使用 mgcv 包进行这些分析.基本上拟合的模型是:

I used the mgcv package for these analysis. Essentially the model fitted is:

require(mgcv)
require(nlme)
mod <- gamm(response ~ s(dayOfYear, bs = "cc") + s(timeOfSampling), data = foo,
            correlation = corCAR1(form = ~ timeOfSampling))

适合季节项的一年中的一天变量 dayOfYear 中的循环样条,趋势由 timeOfSampling 表示,它是一个数字变量.残差在此建模为连续时间 AR(1),使用 timeOfSampling 变量作为 CAR(1) 的时间分量.这假设随着时间间隔的增加,残差之间的相关性呈指数下降.

Which fits a cyclic spline in the day of the year variable dayOfYear for the seasonal term and the trend is represented by timeOfSampling which is a numeric variable. The residuals are modelled here as a continuous-time AR(1) using the timeOfSampling variable as the time component of the CAR(1). This assumes that with increasing temporal separation, the correlation between residuals drops off exponentially.

我已经写了一些关于这些想法的博客文章:

I have written some blog posts on some of these ideas:

  1. 平滑时间相关数据
  2. 添加剂建模和 HadCRUT3v 全球平均温度系列

其中包含额外的 R 代码供您遵循.

which contain additional R code for you to follow.

这篇关于如何在 R 中分析不规则的时间序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 02:57