[R] Kalman filter for a time series
Staff
rbertematti at gmail.com
Sun Jul 30 17:09:38 CEST 2017
Exactly. I'm doing:
x=c(1:length(t))
ssModel = SSModel( t~x, distribution="gaussian",H=NA)
but it is not plotting the Kalman filter line and not giving any errors.
I'm not sure what more the model needs?
On Sun, Jul 30, 2017 at 9:17 AM, Roy Mendelssohn - NOAA Federal <
roy.mendelssohn at noaa.gov> wrote:
> > structSSM
>
> Is no longer part of KFAS. All you needed to do was:
>
> library(KFAS)
> ?KFAS
>
> and you would have seen that if you went to the index. A structural state
> space model is now built up from its components, much like in LM. Look
> at;
>
> ?SSModel
>
> -Roy
>
> > On Jul 29, 2017, at 9:26 PM, Staff <rbertematti at gmail.com> wrote:
> >
> > I found an example at
> > http://www.bearcave.com/finance/random_r_hacks/kalman_smooth.html shown
> > below. But it seems the structSSM function has been removed from KFAS
> > library so it won't run. Does anyone know how to fix the code so that it
> > runs?
> >
> >
> >
> > library(KFAS)
> > library(tseries)
> > library(timeSeries)
> > library(zoo)
> > library(quantmod)
> >
> > getDailyPrices = function( tickerSym, startDate, endDate )
> > {
> > prices = get.hist.quote( instrument = tickerSym, start = startDate,
> > end = endDate,
> > quote="AdjClose", provider="yahoo",
> > compression="d", quiet=T)
> >
> > prices.ts = ts(prices)
> > return( prices.ts )
> > }
> >
> > kalmanFilter = function( x )
> > {
> > t = x
> > if (class(t) != "ts") {
> > t = ts(t)
> > }
> > ssModel = structSSM( y = t, distribution="Gaussian")
> > ssFit = fitSSM(inits=c(0.5*log(var(t)), 0.5*log(var(t))), model =
> ssModel )
> > kfs = KFS( ssFit$model, smoothing="state", nsim=length(t))
> > vals = kfs$a
> > lastVal = vals[ length(vals)]
> > return(lastVal)
> > }
> >
> > Start = "2011-01-01"
> > End = "2012-12-31"
> > SandP = "^GSPC"
> >
> > windowWidth = 20
> > tsLength = 100
> >
> > SAndP.ts = getDailyPrices( SandP, Start, End )
> > SAndP.ts = SAndP.ts[1:tsLength]
> > SAndP.smoothed = rollapply( data=SAndP.ts, width=windowWidth,
> FUN=kalmanFilter)
> >
> > par(mfrow=c(1,1))
> > prices = coredata( SAndP.ts[windowWidth:length(SAndP.ts)])
> > plot(prices, col="blue", type="l")
> > lines(coredata(SAndP.smoothed), col="magenta")
> > par(mfrow=c(1,1))
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/
> posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> **********************
> "The contents of this message do not reflect any position of the U.S.
> Government or NOAA."
> **********************
> Roy Mendelssohn
> Supervisory Operations Research Analyst
> NOAA/NMFS
> Environmental Research Division
> Southwest Fisheries Science Center
> ***Note new street address***
> 110 McAllister Way
> Santa Cruz, CA 95060
> Phone: (831)-420-3666
> Fax: (831) 420-3980
> e-mail: Roy.Mendelssohn at noaa.gov www: http://www.pfeg.noaa.gov/
>
> "Old age and treachery will overcome youth and skill."
> "From those who have been given much, much will be expected"
> "the arc of the moral universe is long, but it bends toward justice" -MLK
> Jr.
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list