Re: Re: Re: finding periodicity in a set
- To: mathgroup at smc.vnet.net
- Subject: [mg39321] Re: [mg39304] Re: [mg39283] Re: finding periodicity in a set
- From: "Mihajlo Vanevic" <mvane at eunet.yu>
- Date: Tue, 11 Feb 2003 04:41:58 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Here is something similar to Dr Bob's idea for small sample size...
(but more accurate, I think)
<< Statistics`DescriptiveStatistics`
Clear[mihajlo2];
mihajlo2[xlist_, dr_:0.1, error_:0.01] :=
Module[
{xxlist, gaps, ratios, rationalRatios, lcm, intRatios, xvals, linefit,
a, b},
xxlist = Mean /@ Split[Sort[xlist], #2 - #1 < error &];
gaps = ListConvolve[{1., -1.}, xxlist];
ratios = gaps/Min[gaps];
rationalRatios = Rationalize[ratios, dr];
lcm = LCM @@ Denominator[rationalRatios];
intRatios = rationalRatios*lcm;
xvals = FoldList[Plus, lcm, intRatios];
linefit = Fit[Transpose[{xvals, xxlist}], {1, x}, x];
{a, b} = CoefficientList[linefit, x];
{Mod[a, b], b, Max[xvals]}
];
test:
xlist := 0.202 + 1.618 Table[0.001 Random[] + Random[Integer, {3, 17}], {20}];
TableForm[Table[{{mihajlo2[xlist]}}, {50}]]
and
xlist := 0.202 + 1.618 Table[0.001 Random[] + Random[Integer, {3, 17}], {4}];
TableForm[Table[{{mihajlo2[xlist]}}, {50}]]
Mihajlo
**************************************************************
* At 2003-02-10, 01:07:00
* Dr Bob, drbob at bigfoot.com wrote:
**************************************************************
>Mihajlo's method doesn't work well with small sample sizes, so I'd suggest
>this:
>
><< Statistics`DescriptiveStatistics`
>xlist = 0.202 + 1.618 Table[0.001 Random[] + Random[Integer, {3, 17}],
>{20}];
>error = 0.5;
>xxlist = Mean /@ Split[Sort[xlist], #2 - #1 < error &];
>Fit[xxlist, {1, x, x^2}, x];
>{a, b, c} = CoefficientList[, x];
>{Mod[a, b], b}
>gaps = Subtract @@@ Transpose@{Rest@xxlist, Drop[xxlist, -1]};
>ratios = gaps/Min@gaps;
>gcd[ratios_List] := Module[{n = 2, k},
> While[n < 10 && (k = n/GCD @@ Round[n*ratios]) â?¥ n, n++];
> k
> ]
>b2 = Min[gaps]/gcd@ratios;
>{a2 = Mean@Mod[xxlist, b2], b2}
>
>{1.18984, 1.39711} (* Mihajlo's method with Mean in place of First *)
>{0.207753, 1.6175} (* better *)
>
>With as few as four samples, this often returns the right period, while the
>other method rarely gets it right even with 20 samples.
>
>You shouldn't make the error estimate too small --- a fourth of the period
>is about right. (But you don't know the period in advance.) A more
>complete method would adjust the error estimate after estimating the
>period, to see if the answer changes.
>
>Bobby
- Follow-Ups:
- Re: Re: Re: Re: finding periodicity in a set
- From: Dr Bob <drbob@bigfoot.com>
- Re: Re: Re: Re: finding periodicity in a set