From: Bob Hanlon on

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(a)gmail.com> wrote:

=============
On 11 Jan, 23:54, Darren Glosemeyer <darr...(a)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



From: Ktota on
Of course i clear the paramater for which i'm trying to find a best
fit... that is not the problem! . You can exchange ltime with P in the
nonlinearmodelfit... in case of P it will work.. in case of ltime it
won't work.
Nevetheless thank you for your new suggestion, i will see if i can get
it to work now.

Thank you for your help again :)

Konstantin

From: Ktota on
Sorry, my problem is not to find the best fit value of ltime. That
worked.. But i can't get confidence intervals and other values from
nonlinearmodelfit... also bob's version of my code doesn't work for
that. But i can see what i can do with that, as at least it is not the
same error i get. Just again to say again: my problem is not getting
best fits.. my problem is to get confidence intervals and other
statistics (or even just getting a parametertable).

Best wishes

First  |  Prev  | 
Pages: 1 2
Prev: Occurrences in Mathematica
Next: ODE Stiff Systems