[R] date in plot, can't add regression line
Norbert Skalski
Norbert.Skalski at ronin-capital.com
Tue Aug 28 18:48:32 CEST 2012
Hello all,
I have been using R for about 3 weeks and I am frustrated by a problem. I have read R in a nutshell, scoured the internet for help but I either am not understanding examples or am missing something completely basic. Here is the problem:
I want to plot data that contains dates on the x axis. Then I want to fit a line to the data. I have been unable to do it.
This is an example of the data (in a dataframe called "tradeflavorbyday"), 40 lines of it (I'm sorry it's not in a runnable form, not sure how to get that from R) :
tradeflavor timestamp x
1 1 2009-01-22 1
2 2 2009-01-22 1
3 1 2009-01-23 1
4 1 2009-01-27 54
5 1 2009-01-28 105
6 2 2009-01-28 2
7 16 2009-01-28 2
8 1 2009-01-29 71
9 16 2009-01-29 2
10 1 2009-01-30 42
11 1 2009-02-02 19
12 16 2009-02-02 2
13 1 2009-02-03 36
14 4 2009-02-03 2
15 8 2009-02-03 3
16 1 2009-02-04 73
17 8 2009-02-04 12
18 16 2009-02-04 7
19 1 2009-02-05 53
20 8 2009-02-05 6
21 16 2009-02-05 9
22 1 2009-02-06 38
23 4 2009-02-06 6
24 8 2009-02-06 2
25 16 2009-02-06 3
26 1 2009-02-09 42
27 2 2009-02-09 2
28 4 2009-02-09 1
29 8 2009-02-09 2
30 1 2009-02-10 87
31 4 2009-02-10 2
32 8 2009-02-10 4
33 16 2009-02-10 3
34 1 2009-02-11 55
35 2 2009-02-11 6
36 4 2009-02-11 4
37 8 2009-02-11 2
38 16 2009-02-11 8
39 1 2009-02-12 153
40 2 2009-02-12 6
The plot displays the x column as the yaxis and the date as the x axis, grouped by the tradetype column.
The timestamp column:
> class(tradeflavorbyday$timestamp)
[1] "POSIXlt" "POSIXt"
So in this case I want to plot tradetype 1 (method 1):
xdates <- tradeflavorbyday$timestamp[tradeflavorbyday$tradeflavor == 1]
ydata <- tradeflavorbyday$x[tradeflavorbyday$tradeflavor == 1]
plot(xdates, ydata, col="black", xlab="Dates", ylab="Count")
Up to here it works great.
Now a abline through lm:
xylm <- lm(ydata~xdates) <------ this fails, can't do dates as below
abline(xylm, col="black")
> lm(ydata~xdates)
Error in model.frame.default(formula = ydata ~ xdates, drop.unused.levels = TRUE) :
invalid type (list) for variable 'xdates'
So I try this instead (method 2):
xdata <- 1:length(tradeflavorbyday$timestamp[tradeflavorbyday$tradeflavor == 1])
ydata <- tradeflavorbyday$x[tradeflavorbyday$tradeflavor == 1]
xylm <- lm(ydata~xdata) <------ now this works, great
abline(xylm, col="black")
The problem now is that I can't get the dates onto the xaxis. I have tried turning off the axis using xaxt="n" and reploting using the axis.POSIXct() call but it does not want to display the dates:
dateseq = seq(xdates[1], xdates[length(xdates)], by="month")
axis.POSIXct(1, at=dateseq, format="%Y\n%b")
I have tried combining both approaches by plotting dates and trying to fit the line using method 2:
xdates <- tradeflavorbyday$timestamp[tradeflavorbyday$tradeflavor == 1]
xdata <- 1:length(tradeflavorbyday$timestamp[tradeflavorbyday$tradeflavor == 1])
ydata <- tradeflavorbyday$x[tradeflavorbyday$tradeflavor == 1]
plot(xdates, ydata, col="black", xlab="Dates", ylab="Count", xaxt="n")
dateseq = seq(xdates[1], xdates[length(xdates)], by="month")
axis.POSIXct(1, at=dateseq, format="%Y\n%b")
xylm <- lm(ydata~xdata) <- works
abline(xylm, col="black") <- does nothing
In this case the call to lm and abline "works" but nothing is drawn. Confused I plugged in the coefficients manually (I have complete data, so they will be different than the example data I pasted):
> lm(ydata~xdata)
Call:
lm(formula = ydata ~ xdata)
Coefficients:
(Intercept) xdata
6.11491 -0.02577
Abline(6.11491, -0.02577) <- call worked, but nothing shown
Just by chance I added many 0 to flatten out the slope:
Abline(6.11491, -0. 0000000002577) <- call worked and a horizontal line appeared?????
So I took off a 0:
Abline(6.11491, -0. 000000002577) <- the line moved significantly down
So I took off another 0:
Abline(6.11491, -0. 00000002577) <- line disappeared
I guess the slope causes it to go vertical and disappear of the graph.
I have no idea how to solve my issue. If anyone can see my basic idiotic error please point it out, or maybe you have another suggestion, I will gladly try it.
Thanks for your help!!
More information about the R-help
mailing list