R中的时间序列和STL:错误只有单变量序列被允许(Time series and stl in R:

2019-06-24 06:24发布

我在一个文件,是杂乱无章每小时的降水量做分析。 不过,我设法把它清理干净,并将其存储在数据框(称为CA1),它采用的形式如下:

  Station_ID Guage_Type   Lat   Long       Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5        H6        H7        H8        H9       H10       H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
1    4457700         HI 41.52 124.03 1948-07-01         8        LST  0  0  0  0  0  0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0  0  0   0   0   0   0   0   0
2    4457700         HI 41.52 124.03 1948-07-05         8        LST  0  1  1  1  1  1  2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000   4   7   1   1   0 0  10  13   5   1   1   3
3    4457700         HI 41.52 124.03 1948-07-06         8        LST  1  1  1  0  1  1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0   0  0   0   0   0   0   0   0
4    4457700         HI 41.52 124.03 1948-07-27         8        LST  3  0  0  0  0  0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0   0 0   0   0   0   0   0   0
5    4457700         HI 41.52 124.03 1948-08-01         8        LST  0  0  0  0  0  0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0   0 0   0   0   0   0   0   0
6    4457700         HI 41.52 124.03 1948-08-17         8        LST  0  0  0  0  0  0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889   6   1   0   0   0 0   0   0   0   0   0   0

当H0通过H23代表每天24小时(行)

仅使用CA1(以上数据帧),I取每一天(行)的24点和垂直方向转置它并连接所有的剩余天数(行)到一个变量,我称之为DAT1:

 > dat1[1:48,]
  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   2   4   5   5   4   7   1   1   0  0  10  13   5   1   1   3 

使用变量DAT1,我输入它作为一个参数得到一个时间序列数据:

> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    frequency = 24)

有几件事情需要注意:

>dim(CA1)
  [1] 5636   31
>length(dat1)
  [1] 135264

因此5636 * 24(总的数据点[24]每行)= 135264总点数。 长度(rainCA1)与上面的点一致。 但是,如果我把一个结束的TS功能,如

>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon),
    frequency = 24)

我拿点,我在哪里丢失了大量数据的1134总长度。 我假定这是由于不是连续的日期,因为我只适用月份和年份作为论据的起点。

接着,在我认为是正确的路径,使用第一TS计算没有结束的说法,我提供它作为STL输入:

>rainCA1_2 <-stl(rainCA1, "periodic")

不幸的是,我得到一个错误:

Error in stl(rainCA1, "periodic") : only univariate series are allowed

我不理解或如何去做。 但是,如果我回到TS功能,并提供最终的说法,STL没有任何错误工作正常。

我已经研究了很多论坛,但没有一个人(或我的理解)提供了一个良好的解决方案,以获得每小时数据的数据属性。 如果有人可以帮助我,我将非常感激。 谢谢!

Answer 1:

这错误数据的形状的结果。 尝试> dim(rainCA1) ; 我怀疑它给像> [1] 135264 1 。 更换rainCA1 <- ts(dat1 ...rainCA1 <- ts(dat1[[1]] ... ,它应该工作。

无论这样做正确,我不知道......在我看来,你的首要任务是让你的统一的格式的数据。 确保ts()得到正确的输入。 检查出的精确规范ts

ts()不解释日期时间格式。 ts()需要具有一个固定的时间间隔连续数据点。 它使用一个主计数器和次要计数器(其frequency放入一个主要计数器)。 举例来说,如果你的数据是每小时,你希望在日线级别的季节性, frequency等于24. startend ,因此,主要是化妆品: start只是表示T(0)的各大专柜,而end表示T(完) 。



Answer 2:

我试图用一个非常简单的例子来说明写的方式来避免这些样的错误的另一个问题,链接在这里:

STL()分解将不接受单变量TS对象?



Answer 3:

一种解决方案,我发现是time_series_var <- ts(data[, c("var_of_interest")])然后time_series_var <- ts(as.vector(time_series_var))然后随着尺寸现在是正确的相关的单变量消失的误差。



文章来源: Time series and stl in R: Error only univariate series are allowed