【问题标题】:Expand a Time Series to a specific number of periods将时间序列扩展到特定数量的期间
【发布时间】:2014-05-02 05:46:33
【问题描述】:

我是 R 新手,我正在尝试获取一组时间序列并通过条件推理树运行它们,以帮助对时间序列的形状进行分类。问题是并非所有的时间序列都具有相同的周期数。我正在尝试将每个时间序列扩展为 30 个周期,但仍保持相同的“形状”。这是据我所知

     Require(zoo)

                test<-c(606,518,519,541,624,728,560,512,777,728,1014,1100,930,798,648,589,680,635,607,544,566)
            accordion<-function(A,N){
                x<-ts(scale(A), start=c(1,1), frequency=1)
                X1 <- zoo(x,seq(from = 1, to = N, by =(N-1)/(length(x)-1) ))
                X2<-merge(X1, zoo(order.by=seq(start(X1), end(X1)-1, by=((N-1)/length(x))/(N/length(x)))))
            X3<-na.approx(X2)
            return(X3)}
        expand.test<-accordion(test,30)
plot(expand.test); lines(scale(test))
        length(expand.test)

上面的代码对时间序列进行缩放,然后将其平均间隔为 30 个周期并插入缺失值。然而,返回序列的长度是 42 个单位而不是 30,但它保留了与原始时间序列相同的“形状”。有谁知道如何修改它,使函数accordian 产生的结果有 30 个周期长并且时间序列形状保持相对不变?

【问题讨论】:

  • 此代码无法运行。在为它赋值的同一行中调用X2。更好地定义“形状”也可能会有所帮助。我不熟悉这个名字/技术。
  • Richard,我编辑了代码...应该读的是 X1 而不是 X2,抱歉。 “形状”是指保持相同的相对幅度,但降低频率。

标签: r time-series expand


【解决方案1】:

我认为这里有一个基本的 R 解决方案。查看approx(),它使用您指定的点n 进行线性(或常数)插值。这里我想你想要n = 30

test2 <- approx(test, n=30)
plot(test2)
points(test, pch="*")

这将返回一个列表test2,其中第二个元素y 是您的插值。我还没有使用你的时间序列对象,但它似乎完全在你的函数内部,对吗?

【讨论】:

  • 理查德...这太棒了!我不知道这个函数存在于基础 R 中。感谢您向我指出这一点
  • 我认为大多数东西都存在于基础 R 中,你只需要知道去哪里看。如果可以的话,我会尽力坚持使用基础 R。
猜你喜欢
  • 2018-11-15
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多