为什么时间序列数据在R中向后绘制?

时间:2014-10-22 12:53:26

标签: r time-series

我坚持为什么会发生这种情况,并试图到处寻找答案。当我尝试在R中绘制一个时间序列对象时,生成的绘图反过来出现。

我有以下代码:

library(sqldf)
stock_prices <- read.csv('~/stockPrediction/input/REN.csv')
colnames(stock_prices) <- tolower(colnames(stock_prices))
colnames(stock_prices)[7] <- 'adjusted_close'
stock_prices <- sqldf('SELECT date, adjusted_close FROM stock_prices')
head(stock_prices)

    date adjusted_close
1 2014-10-20           3.65
2 2014-10-17           3.75
3 2014-10-16           4.38
4 2014-10-15           3.86
5 2014-10-14           3.73
6 2014-10-13           4.09

tail(stock_prices)
       date adjusted_close
1767 2007-10-15           8.99
1768 2007-10-12           9.01
1769 2007-10-11           9.02
1770 2007-10-10           9.06
1771 2007-10-09           9.06
1772 2007-10-08           9.08

但是当我尝试以下代码时:

stock_prices_ts <- ts(stock_prices$adjusted_close, start=c(2007, 1), end=c(2014, 10), frequency=12)
plot(stock_prices_ts, col='blue', lwd=2, type='l')

结果的形象如下:

enter image description here

即使我用这段代码反转时间序列对象:

plot(rev(stock_prices_ts), col='blue', lwd=2, type='l')

我明白了

enter image description here 它有任意数字。

知道为什么会这样吗?任何帮助深表感谢。

1 个答案:

答案 0 :(得分:3)

这是因为一旦你应用了rev函数,你的对象就会失去它的时间系列结构。 例如:

set.seed(1)
gnp <- ts(cumsum(1 + round(rnorm(100), 2)),
          start = c(1954, 7), frequency = 12)

gnp  ## gnp has  a real  time serie structure 
        Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
1954                                             0.37   1.55   1.71   4.31   5.64   5.82
1955   7.31   9.05  10.63  11.32  13.83  15.22  15.60  14.39  16.51  17.47  18.45  20.39
1956  22.21  23.80  25.72  27.50  28.57  27.58  29.20  30.14  30.98  30.51  31.03  32.45
1957
rev(gnp)  ## the reversal is just a vector

[1] 110.91 110.38 110.60 110.17 110.45 108.89 106.30 104.60 102.44 ....

一般来说,操纵班级ts会有点痛苦。一个想法是使用xts对象,通常&#34;保存其结构,您可以对其进行常规操作。

即使在这种情况下,{x}对象没有实现generic方法rev,也很容易使用as.xts将生成的动物园时间序列强制转换为xts one。

par(mfrow=c(2,2))
plot(gnp,col='red',main='gnp')
plot(rev(gnp),type='l',col='red',main='rev(gnp)')
library(xts)
xts_gnp <- as.xts(gnp)
plot(xts_gnp)
## note here that I apply as.xts again after rev operation
## otherwise i lose xts structure
rev_xts_gnp = as.xts(rev(as.xts(gnp))) 
plot(rev_xts_gnp)

enter image description here