filter() on zoo objects
One comment (caution?) to add to Gabor's excellent points: If you use the *timeSeries* class - be careful as to the conversion of irregular series to regular. as.ts.timeSeries converts what _may_ be an irregular series into a _regular_ one by dropping the time altogether - much like the ts(coredata(z)) approach outlined by Gabor. While this may be what you want - it is not necessarily correct IMO. In fact just the choice of class can lead to unintended consequences: Please ignore the simplicity of the example:
getSymbols("MSFT",ret='zoo')
arima(Cl(MSFT),order=c(2,0,0))
Call:
arima(x = Cl(MSFT), order = c(2, 0, 0))
Coefficients:
ar1 ar2 intercept
0.8375 0.1437 30.1932
s.e. 0.0631 0.0633 1.0612
sigma^2 estimated as 0.2238: log likelihood = -239.51, aic = 487.01
arima(as.ts(coredata(Cl(MSFT))),order=c(2,0,0))
Call:
arima(x = as.ts(coredata(Cl(MSFT))), order = c(2, 0, 0))
Coefficients:
ar1 ar2 intercept
0.9582 0.0190 30.1612
s.e. 0.0569 0.0569 1.0718
sigma^2 estimated as 0.2359: log likelihood = -216.81, aic = 441.62
getSymbols("MSFT",ret='timeSeries')
[1] "MSFT"
arima(Cl(MSFT),order=c(2,0,0))
Call:
arima(x = Cl(MSFT), order = c(2, 0, 0))
Coefficients:
ar1 ar2 intercept
0.9582 0.0190 30.1612
s.e. 0.0569 0.0569 1.0718
sigma^2 estimated as 0.2359: log likelihood = -216.81, aic = 441.62
To me, the timeSeries class is making a decision that is not necessarily the intended one (in general) - and the results are therefore possibly different than what you might expect. Jeff On Thu, Mar 27, 2008 at 12:06 PM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
Two points: 1. If you have a routine that accepts ts but not zoo then you have a problem even beyond representations since the routine is assuming equally spaced points. Assuming your data is not equally spaced, e.g. no data on weekends, then its up to you to figure out how you want to map it to equally spaced points. Two possibilities for zoo object z are: - as.ts(z) which will make it equally spaced by inserting NAs (e.g. where weekends are) - ts(coredata(z)) which uses the time base 1, 2, 3, ... or you can use other args of ts to use a different time base. If the routine you are calling returns a ts object, out, then it may or may not be that as.zoo(out) or zoo(coredata(out), time(z)) make sense. It will all depend on the situation. You may have to write a custom mapping to the time base or not use that ts-only routine in the first place -- see first paragraph above. 2. Aside from rollapply and friends, The last question in the zoo faq gives a list of the packages that work with zoo objects -- there are now about 20 of them. For example, dyn and dynlm packages can perform regression on zoo series with lags and diffs and keep track of the time base. You want to stick with zoo-capable routines if possible. On Thu, Mar 27, 2008 at 6:17 AM, Vorlow Constantinos <CVorlow at eurobank.gr> wrote:
Dear all,
>
> Am I right in understanding you cannot directly apply functions such as
> loess() (filter() as well ?) to zoo objects and you need to use the
> rollapply/rollmean functions instead?
>
> For example:
>
> library("tseries")
> DJ<- get.hist.quote("^DJI", start = "1990-01-01", quote = "Close")
> DJret<-diff(log(DJ))
>
> # the
>
> loess(DJret, time(DJret))
>
> does not work(?). What am I understanding wrong? I found a reply by
> Achim on a similar issue.
>
> http://finzi.psych.upenn.edu/R/Rhelp02a/archive/88599.html
>
> Is Achim's answer all there is to it?
>
> I.e., my problem is a little bit more general:
>
> Say I want to produce fits and then forecasts on a time series (zoo
> mostly) using a non-zoo routine which "understands" ts or timeSeries
> objects (or simple vectors). Do I always have to "translate" zoo
> objects to vectors or to ts/simeSeries ones, run the routines and then
> put back the zoo attribute with the appropriate dates so as to produce
> correct time-series plots (with dates etc, especially correct dates
> alligned to the forecast period - which could be postsample)?
>
> Is there an easier way to shift between zoo-ts/timeSeries objects and
> produce plots statistical analysis that will have the dates correctly
> aligned on (to account for example for irregularly sampled sequences
> such as stock prices with non-trading days etc. etc.)?
>
> Thanks in advance,
> Costas
>
>
>
> P Think before you print.
>
> Disclaimer:
> This e-mail is confidential. If you are not the intended recipient, you should not copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete the copy from your system.
> EFG Eurobank Ergasias S.A. is not responsible for, nor endorses, any opinion, recommendation, conclusion, solicitation, offer or agreement or any information contained in this communication.
> EFG Eurobank Ergasias S.A. cannot accept any responsibility for the accuracy or completeness of this message as it has been transmitted over a public network. If you suspect that the message may have been intercepted or amended, please call the sender.
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
>
_______________________________________________ R-SIG-Finance at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. -- If you want to post, subscribe first.
There's a way to do it better - find it. Thomas A. Edison