Search code examples
rcsvtime-seriesforecasting

Having trouble with R's time series objects


I have a column of 84 monthly expenditures from 1/2004 - 12/2010, which in Excel looks like...

12247815.55
11812697.14
13741176.13
21372260.37
27412419.28
42447077.96
55563235.3
45130678.8
54579583.53
43406197.32
34318334.64
25321371.4
...(74 more entries)

I am trying to run an stl() from the forecast package on this series, and so I load the data:

d <- ts(read.csv("deseason_vVectForTS.csv",
header = TRUE),
start=c(2004,1),
end=c(2010,12),
frequency = 12)

(If I do header=FALSE it will absorb the first entry - 122...- as the header for the second column, and name the first column's header 'X')

But instead of my environment being populated with a Time Series Object from 2004 to 2011 (as it has said before) it simply says ts[1:84, 1].

Probably related is the fact that,

fit <- stl(d) 

throws

Error in stl(d) : only univariate series are allowed.

despite the fact that

head(d)
[1] 12247816 11812697 13741176 21372260 27412419 42447078

and

d
          Jan      Feb      Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
2004 12247816 11812697 13741176 21372260 27412419 42447078 55563235 45130679 54579584 43406197
("years 2005-2010 look exactly the same, and all rows have columns for Jan-Dec; it just doesn't fit on here neatly - just trying to show the object has taken the ts labeling structure.")

What am I doing wrong? As far as I know this is the same way I have been building my time series objects in the past...


Solution

  • read.csv reads in a matrix. If it only has one column, it is still a matrix. To make it a vector use

    d <- ts(read.csv("deseason_vVectForTS.csv",
    header = TRUE)[,1],
    start=c(2004,1),
    end=c(2010,12),
    frequency = 12)
    

    Also, please check your facts. stl is in the stats package, not the forecast package. This is easily checked by using help(stl).