What Time Is It?

November 28, 2012
By

(This article was first published on Statistical Research » R, and kindly contributed to R-bloggers)

A common scenario that I run into is time and how to deal with it. I often will do a  variety of summaries and analysis that need to be measured at different points in time. Whether I want to graph the data or review the results I need to be able to perform measurements relative to time and interpret the time output in human readable form. R has several functions to handle those time related scenario.

For starters one thing needs to be acknowledged. On Unix based system the beginning of time is January 1, 1970. At that moment exactly zero (0) seconds have passed and it is known as Unix epoch. Anything before that is negative and anything after that time is positive. This measure of time is defined in seconds.

This piece of code shows the Unix epoch and how it compares to the current time.  In this example the origin is zero (0) but as one can see it can easily be changed to calculate the length of time that has past since any given time.


##Local Time in EDT (GMT-5). If local time IS GMT then the date would be January 1, 1970
iso <- ISOdatetime(1969,12,31,19,0,0) # (YYYY,MM,DD,HH,MM,SS)
origin <- as.double(iso)

t <- Sys.time()
curr.time <- as.double(t)

curr.time - origin

 

The following bit of code simulates a cumulative process where each consecutive process follows a Poisson distribution  and \lambda (lambda) is a random variable distributed uniformly.  This would be comparable to a process where election vote counts are being collected throughout Election Night.


set.seed(1234)
time.series <- seq(Sys.time(), Sys.time()+4*60*60, by=60*5) #Add 4 hours to time series
vals <- matrix(NA, ncol=3, nrow=length(time.series))

for(i in 1:length(time.series)){

if( is.numeric(vals[i-1,1]) &amp;amp; is.numeric(vals[i-1,2]) ){
vals[i,1] <- vals[i-1,1]+rpois(n=1, runif(1, 700,1000))
vals[i,2] <- vals[i-1,2]+rpois(n=1, runif(1, 850,1000))
} else {
vals[i,1] <- runif(1, 700,1000)
vals[i,2] <- runif(1, 850,1000)
}

}
vals[,3] <- vals[,1]/(vals[,1]+vals[,2])
prop <- vals[,3]*100
prop2 <- (1-vals[,3])*100

plot(time.series,prop, type="o", cex=.6, lty=1, col="blue", pch=1,
ylim=c(46,54)
, ylab="Percent", xlab="Time of Computation"
, main=paste("Example of Cumulative Process Using Time")
, sub="Cumulative Proportional Process", cex.sub=.60
, xaxt = "n", yaxt = "n");
lines(time.series, prop2, type="o", cex=.6, lty=1, col="red", pch=4);

xaxis.seq.half<- seq(strptime(c(min(time.series)), "%Y-%m-%d %H"),
strptime(c(max(time.series)), "%Y-%m-%d %H")+3600, by=1800)
xaxis.seq.hour <- seq(strptime(c(min(time.series)), "%Y-%m-%d %H"),
strptime(c(max(time.series)), "%Y-%m-%d %H")+3600, by=3600)
axis(1, at=(xaxis.seq.hour), tcl = -0.7, lty = 1, lwd = 0.8, labels=FALSE)
axis(1, at=(xaxis.seq.half), tcl = -0.3, lty = 2, lwd = 0.5, labels=FALSE)
axis(2, at=seq(46,54,by=1), labels=FALSE, tcl = -0.2, lty = 1, lwd = 0.5)
axis(2, at=seq(46,54,by=1), labels=TRUE, tcl = -0.7, lty = 1)
axis.POSIXct(1, as.POSIXlt(xaxis.seq.hour), at=as.POSIXlt(xaxis.seq.hour),
format="%H:%M", tcl = 0.3, las=0, lty = 2, lwd = 0.5, cex.axis=.7, labels=TRUE)

To leave a comment for the author, please follow the link and comment on his blog: Statistical Research » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.