       Re: fitting

• To: mathgroup at smc.vnet.net
• Subject: [mg104753] Re: [mg104711] fitting
• From: danl at wolfram.com
• Date: Sun, 8 Nov 2009 06:50:54 -0500 (EST)
• References: <200911071150.GAA10169@smc.vnet.net>

```> Hi!
>
> I am very new to Mathematica and I am failing in trying to do
> something very simple.
> I am have the following data:
>
> x = {8, 36, 74, 96, 123, 152, 201, 269, 415, 460, 444, 579, 711, 731,
>    602, 364, 151};
>
> Which is a curve, similar to PDF function of Beta distribution:
>
> ListLinePlot[x]
>
> And I am trying to fit it to:
>
>
> finding Alpha and Beta values.
>
> I will appreciate it somebody can give me a hint how to do this
> properly using FindFit or
> any other means. I am too embarrassed to post my modest attempts here,
> but trust
> me, I've spent few hours trying before posting :)
>

There are a few ways to go astray, and I imagine I replicated some of
them. Here is something that seems to work. Rescale along the x axis so
that those values are evenly spaced between zero and one. Now you can
either also rescale on the y axis (e.g. divide each value by the total),
or else simply make that scaling a part of the fit parametrization. I do
the latter below.

data = {8, 36, 74, 96, 123, 152, 201, 269, 415, 460, 444, 579, 711,
731, 602, 364, 151};

In:= bfit =
FindFit[Transpose[{(Range[Length[data]])/(Length[data] + 1), data}],
n*PDF[BetaDistribution[a, b], x], {a, b, n}, x]

Out= {a -> 4.69588, b -> 2.34725, n -> 291.736}

To test this, you might do

Show[{ListPlot[
Transpose[{(Range[Length[data]])/(Length[data] + 1), data}]] /.
bfit, Plot[n*PDF[BetaDistribution[a, b], x] /. bfit, {x, 0, 1}]}]

One other thing I tried was to augment data by zeros at each end (and have
x values starting at zero and ending at one). This did not work, at least
not with the code I used. Another thing that failed was to let FindFit
find scaling along the x axis. Hence the explicit scaling used above.

Daniel Lichtblau
Wolfram Research

```

• References:
• fitting