Re: Re: NonlinearModelFit and ParameterTable
- To: mathgroup at smc.vnet.net
- Subject: [mg106490] Re: [mg106469] Re: NonlinearModelFit and ParameterTable
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Thu, 14 Jan 2010 05:49:36 -0500 (EST)
- Reply-to: hanlonr at cox.net
First, you cannot assign a value to ltime if it is the parameter of the NonlinearModelFit.
As stated before, use Piecewise instead of If.
Clear[ltime, mtest1, parameterWT2];
var1 = 40;
qtime = 40;
var2 = 10;
P = 7/10;
ExperimentalData = Rationalize[{
{10, 0}, {20, 0}, {30, 0}, {40, 0},
{50, 0}, {60, 0.00585596},
{70, 0.00978394}, {80, 0.014027},
{90, 0.0193965}, {100, 0.033127},
{110, 0.0229201}, {120, 0.0342658},
{130, 0.038038}, {140, 0.0467315},
{150, 0.0599289}, {160, 0.0843373},
{170, 0.0933467}, {180, 0.0972515},
{200, 0.124476}, {220, 0.126171},
{240, 0.149213}, {260, 0.125667},
{280, 0.131284}, {300, 0.111403},
{20, 0}, {30, 0}, {40, 0}, {50, 0},
{60, 0.00504185}, {70, 0.00105643},
{80, 0.00476066}, {90, 0.0199289},
{100, 0.0278976}, {110, 0.0363378},
{120, 0.0487953}, {130, 0.0592385},
{140, 0.0586732}, {150, 0.0720589},
{160, 0.0790288}, {170, 0.0908122},
{180, 0.098357}, {200, 0.120454},
{220, 0.133432}, {240, 0.137956},
{270, 0.159881}, {300, 0.152705},
{330, 0.170188}, {360, 0.125013},
{20, 0}, {30, 0},
{40, 0}, {50, 0.0057359},
{60, 0.00883602}, {70, 0.0155384},
{80, 0.0219417}, {90, 0.0356022},
{100, 0.0309318}, {110, 0.0378177},
{120, 0.0602476}, {130, 0.0657433},
{140, 0.0676202}, {150, 0.0840599},
{160, 0.100496}, {170, 0.0842674},
{180, 0.113089}, {200, 0.0969867},
{220, 0.123612}, {240, 0.119192},
{270, 0.115528}, {300, 0.129542},
{330, 0.119207}, {360, 0.124696}}, 0];
mtest1[t_, ltime_] =
FullSimplify[Piecewise[{{
Sum[
Piecewise[
{{6600*(1 - P), var1*(tsum + var2 - qtime) > 6600}},
var1*(tsum + var2 - qtime)*(1 - P)],
{tsum, t - ltime + 1, t, 1}],
var1*(t + var2 - qtime) > 6600}},
Max[{
Sum[{var1*(tsum + var2 - qtime)*(1 - P)},
{tsum, t - ltime + 1, t, 1}]
}, 0]]/156000, 0 <= t <= 360]
parameterWT2[t_] = Normal[NonlinearModelFit[
ExperimentalData, mtest1[t, ltime], {ltime}, t]] // FullSimplify
Plot[parameterWT2[t], {t, 0, 360},
Epilog -> {Red, AbsolutePointSize[3],
Point[ExperimentalData]}]
Bob Hanlon
---- Ktota <nuktobi at gmail.com> wrote:
=============
On 11 Jan, 23:54, Darren Glosemeyer <darr... at wolfram.com> wrote:
> Ktota wrote:
> > mtest1[t_,ltime_]:=If [var1*(t+var2-qtime)>8000,Sum[If [var1*(tsum
> > +var2-qtime)>8000,8000*(1-P),var1*(tsum+var2- qtime)*(1-P)],{tsum,t-
> > ltime+1, t,1}],Max[{Sum[{var1*(tsum+var2- qtime)*(1-P)},{tsum,t-ltime
> > +1, t,1}]},0]]/156000
>
> > i optimize the model above with:
>
> > parameter2=
> > NonlinearModelFit[ExpData, mtest1[t, ltime], {ltime},
> > t]
>
> > which is perfectly fine...
>
> > but as soon i want to see the ParameterTable or the
> > ConfidenceIntervals by doing this:
>
> > parameter2["ParameterTable"]
>
> > I get the following error message:
>
> > and this only happens if i want to fit for ltime.. parameters P and
> > var1 are perfectly fine....
>
> > In[374]:= parameter2["ParameterTable"]
> > During evaluation of In[374]:= General::ivar: 9.125191604503259` is
> > not a valid variable. >>
> > During evaluation of In[374]:= General::ivar: 9.125191604503259` is
> > not a valid variable. >>
> > During evaluation of In[374]:= General::ivar: 9.125191604503259` is
> > not a valid variable. >>
> > During evaluation of In[374]:= General::stop: Further output of
> > General::ivar will be suppressed during this calculation. >>
> > Out[374]= $Aborted
>
> > if i only want to see the result it gives me no error:
> > In[370]:= parameter2["BestFitParameters"]
> > Out[370]= {ltime->9.12519}
>
> > hope somebody can help...as this drives me mad...
>
> > thank you very much
>
> > NuKtoBi
>
> A working example would be needed to figure out what is happening. My
> best guess is that there is a problem with the model specification
> (Daniel and Bob mentioned a couple possible issues) or that this example
> runs into trouble computing derivatives of the model which are needed
> for standard errors and such. If it is trouble with derivatives, it may
> be a bug in need of fixing, but a full working example would be needed.
>
> Darren Glosemeyer
> Wolfram Research
Dear All,
thank you for your replies. I try to post a working example again... i
though i send it yesterday. I guess I didn't actually press the send
button as my message still doesn't appear.
Even with the nice changes suggested by bob it didn't work (Daniel:
clearing didn't help :( ), it made the code certainly more elegant.
Nevertheless this is what happened when I introduced the changes:
Mathematica got stuck, till I was forced to abort the evaluation with
no result (mathematica prompted me several times to abort the
evaluation... if i don't do that the mathematica crashes after a
time). When I tried to see what happens if I use StepMonitor or
EvaluationMonitor I could see that Mathematica didn't even try to give
my parameters a value... so it must have got stuck at the very
beginning.
again: Using my code I get the same error messages as described in my
previous post.
Ok, I want to provide yo with an working example:
This are the optimum parameter sets:
1.Please replace the 8000 with 6600, it should not matter to much at
the end... but well, this would be the optimum number to set.
2.Here are the constant values:
ltime = 10
var1=40
qtime=40
var2=10
P=0.7
suitable ranges for t <360 (but you can see that from the example data
provided)
Right now i proceed the following way: I clear the parameter i'm
looking for and set the rest (and update replace the corresponding
line of code). So if you fitting for ltime or P you need to set the
values above correspondingly. Usually what i get if i fit for P is
approx. 0.7, if i fit for ltime approx. 9.5.
3. A working dataset for tests:
{{10, 0}, {20, 0}, {30, 0}, {40, 0}, {50, 0}, {60, 0.00585596}, {70,
0.00978394}, {80, 0.014027}, {90, 0.0193965}, {100, 0.033127},
{110,
0.0229201}, {120, 0.0342658}, {130, 0.038038}, {140, 0.0467315},
{150,
0.0599289}, {160, 0.0843373}, {170, 0.0933467}, {180, 0.0972515},
{200,
0.124476}, {220, 0.126171}, {240, 0.149213}, {260, 0.125667}, {280,
0.131284}, {300, 0.111403}, {20, 0}, {30, 0}, {40, 0}, {50, 0},
{60,
0.00504185}, {70, 0.00105643}, {80, 0.00476066}, {90, 0.0199289},
{100,
0.0278976}, {110, 0.0363378}, {120, 0.0487953}, {130, 0.0592385},
{140,
0.0586732}, {150, 0.0720589}, {160, 0.0790288}, {170, 0.0908122},
{180,
0.098357}, {200, 0.120454}, {220, 0.133432}, {240, 0.137956}, {270,
0.159881}, {300, 0.152705}, {330, 0.170188}, {360, 0.125013}, {20,
0}, {30,
0}, {40, 0}, {50, 0.0057359}, {60, 0.00883602}, {70, 0.0155384},
{80,
0.0219417}, {90, 0.0356022}, {100, 0.0309318}, {110, 0.0378177},
{120,
0.0602476}, {130, 0.0657433}, {140, 0.0676202}, {150, 0.0840599},
{160,
0.100496}, {170, 0.0842674}, {180, 0.113089}, {200, 0.0969867},
{220,
0.123612}, {240, 0.119192}, {270, 0.115528}, {300, 0.129542}, {330,
0.119207}, {360, 0.124696}}
3. For convinience here also an updated model:
mtest1[t_,ltime_]:=If [var1*(t+var2-qtime)>6600,Sum[If [var1*(tsum
+var2-qtime)>6600,6600*(1-P),var1*(tsum+var2- qtime)*(1-P)],{tsum,t-
ltime+1, t,1}],Max[{Sum[{var1*(tsum+var2- qtime)*(1-P)},{tsum,t-ltime
+1, t,1}]},0]]/156000
This is how i do the fitting:
parameterWT2 =
NonlinearModelFit[ExperimentalData, mtest1[t, ltime], {ltime},
t]
I hope i didn't miss out anything.
Best Wishes