Thanks, Bo. I'll look at it when I get back, probably over the weekend. Ian
On Fri, Jun 22, 2012 at 12:44 AM, Bo Jacoby <bojac...@yahoo.dk> wrote: > Hi Ian. > The following is a tool, but not yet a solution. > > FT is a slow Fourier Transform. When the problem has been solved it is time > to optimize. This FT has the nice property that FT^:_1 is identical to FT. > > NB.FT =: Fourier Transformation > FT =: +/&(+*((%:%~_1&^&+:&(%~(*/])&i.))&#)) > NB.rd =: round complex number. > rd =: (**|)&.+. > NB.H =: Heaviside step function > H =: (]#0:),-#1: > 10 H 3 > 0 0 0 1 1 1 1 1 1 1 > NB. FT = FT^:_1 > rd FT FT 10 H 3 > 0 0 0 1 1 1 1 1 1 1 > > > NB. For fixed C the values of A and B to minimize +/*:X-A+B*(#X)H C are found > by solving (2{.FT X) = 2{.FT A+B*(#X)H C > > - Bo > > > > >>________________________________ >> Fra: Ian Clark <earthspo...@gmail.com> >>Til: Programming forum <programming@jsoftware.com> >>Sendt: 18:15 torsdag den 21. juni 2012 >>Emne: Re: [Jprogramming] Kalman filter in J? >> >>Yes, Bo, that looks like a fair statement of the problem, in terms of >>least-squares minimization. >> >> >>On Thu, Jun 21, 2012 at 4:46 PM, Bo Jacoby <bojac...@yahoo.dk> wrote: >>> Consider the step functions >>> >>> H=:(]#0:),-#1: >>> 10 H 0 >>> 1 1 1 1 1 1 1 1 1 1 >>> 10 H 3 >>> 0 0 0 1 1 1 1 1 1 1 >>> 10 H 10 >>> 0 0 0 0 0 0 0 0 0 0 >>> The problem is to find constants A,B,C to minimize the expression >>> >>> +/*:X-A+B*(#X)H C >>> Right? >>> -Bo >>> >>> >>> >>>>________________________________ >>>> Fra: Ian Clark <earthspo...@gmail.com> >>>>Til: Programming forum <programming@jsoftware.com> >>>>Sendt: 14:34 torsdag den 21. juni 2012 >>>>Emne: Re: [Jprogramming] Kalman filter in J? >>>> >>>>Thanks, Bo and Ric. Yes, I'd tried searching jwiki on "Kalman" and >>>>Pieter's page was the only instance. >>>> >>>>I neglected to mention that in the most general case I can't really be >>>>confident that X1 and X2 have the same distribution function, let >>>>alone the same variance. But looking at it again, I see that under the >>>>restrictions I've placed the problem simplifies immensely to fitting a >>>>step-function H to: X=: K+G+H. If I can just do that, I'll be happy >>>>for now. >>>> >>>>Repeated application of FFT should allow me to subtract the noise >>>>spectrum F(G), or at least see a significant change in the overall >>>>spectrum emerge after point T, and that might handle the more general >>>>cases as well. >>>> >>>>Anyway it's simple-minded enough for me, and worth a try. FFT is, >>>>after all, "fast" :-) >>>> >>>>But won't an even faster transform do the trick, such as (+/X)? On the >>>>above model, X performs a drunkard's walk around a value M1 until some >>>>point T, after which it walks around M2. Solution: simply estimate M1 >>>>and M2 on an ongoing basis. >>>> >>>>I get the feeling I ought to be searching on terms like "edge >>>>detection", "step detection" and CUSUM. >>>> >>>>Anyway, there's enough here to try. >>>> >>>>On Thu, Jun 21, 2012 at 10:28 AM, Ric Sherlock <tikk...@gmail.com> wrote: >>>>> Hi Ian, >>>>> >>>>> A quick search of the J wiki finds this: >>>>> http://www.jsoftware.com/jwiki/Stories/PietdeJong >>>>> Sounds like he might have what you're after? >>>>> >>>>> Cheers, >>>>> Ric >>>>> >>>>> On Thu, Jun 21, 2012 at 4:33 PM, Ian Clark <earthspo...@gmail.com> wrote: >>>>>> Can anyone help? Has anyone written a Kalman filter in J? >>>>>> >>>>>> I'm not a specialist in either statistics or control theory, so I'm >>>>>> only guessing a Kalman filter is what I need. Though I do have a >>>>>> passing acquaintance with the terms: stochastic control and linear >>>>>> quadratic Gaussian (LQG) control. I am aware that a "Kalman filter" >>>>>> (like ANOVA) is more a topic than a black-box. >>>>>> >>>>>> So let me explain what I want it for. >>>>>> >>>>>> I have a time series X which I am assuming can be modelled like this: >>>>>> >>>>>> X=: K + G + (X1,X2) >>>>>> >>>>>> where >>>>>> >>>>>> K is constant >>>>>> G is Gaussian noise >>>>>> X1 is a random variable with mean: M1 and variance: V1 >>>>>> X2 is a random variable with mean: M2 and variance: V2 >>>>>> >>>>>> Typically X is a sequence of sensor readings, but may also be >>>>>> measurements from a series of user trials conducted on a working >>>>>> prototype, which suffers a design-change at a given point T. >>>>>> >>>>>> Simplifying assumptions (which unfortunately I may need to relax in due >>>>>> course): >>>>>> >>>>>> (a) X is not multivariate >>>>>> (b) X1 and X2 are Gaussian >>>>>> (c) V1=V2 (only the mean value changes, not the variance). >>>>>> >>>>>> The problem: >>>>>> >>>>>> 1. Estimate T=: 1+#X1 -- the point at which X1 gives way to X2. >>>>>> >>>>>> 2. Given T, estimate (M2-M1) -- the "underlying improvement", if any, >>>>>> of the change to the prototype. >>>>>> >>>>>> 3. (subcase of 2.) Given T, test the null hypothesis: M1=M2, viz that >>>>>> there has been no underlying improvement. >>>>>> >>>>>> 4. Estimate U=: #X2 -- the minimum number of samples needed after T in >>>>>> order to achieve 1-3 above with 95% confidence. >>>>>> >>>>>> In other words, detect the signal-in-noise: M1-->M2, and do so in >>>>>> real-time. >>>>>> >>>>>> Because of 4, the need to estimate T and (M2-M1) on an ongoing basis, >>>>>> I can't do a randomised block design. I gather that a Kalman filter, >>>>>> or some sort of adaptive filter, will handle this problem. >>>>>> >>>>>> But maybe something simpler will turn out good enough? >>>>>> >>>>>> Supposing I can get hold of a "black box" Kalman filter, I propose to >>>>>> test it out on generated data and compare its performance to some >>>>>> simple-minded approach, like estimating M1 / M2 from a simple moving >>>>>> average of the last U samples, or applying the F-test to 2 sets of U >>>>>> samples taken either side of T. >>>>>> >>>>>> But since the technique aims to be published, or at least critically >>>>>> scrutinised (and maybe incorporated in a software product), I'd rather >>>>>> depend on a state-of-art packaged solution than reinvent the wheel: a >>>>>> large and very well-turned wheel it appears to me. >>>>>> >>>>>> Ian Clark >>>>>> ---------------------------------------------------------------------- >>>>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>>---------------------------------------------------------------------- >>>>For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>>> >>>> >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>---------------------------------------------------------------------- >>For information about J forums see http://www.jsoftware.com/forums.htm >> >> >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm