Re: FittedModel object type
- To: mathgroup at smc.vnet.net
- Subject: [mg110859] Re: FittedModel object type
- From: Darren Glosemeyer <darreng at wolfram.com>
- Date: Thu, 8 Jul 2010 20:34:00 -0400 (EDT)
Vincent wrote:
> Is there an easy way to get Mathematica to interpret custom code when
> a FittedModel is called with a custom argument, for example if I have
>
> modelfit = NonlinearModelFit[...]
>
> modelfit ["EstimatedPower"]
>
> which would then call my own code using the modelfit object to compute
> something?
> I know that it's trivial to achieve the same functionality just
> calling the function on the variable, but I rather like the object
> orientet like syntax of adding my own figures to the FittedModel
> object.
>
>
There currently isn't a mechanism in place for this. A possibility if
you really want an object oriented approach could be to define a new
operator that will get properties via FittedModel if possible and from
other definitions when added.
In[1]:= nlm = NonlinearModelFit[Range[10]^2, b*Exp[a*x], {a, b}, x];
(* get property from built-in code for defined properties *)
In[2]:= myModelProperties[model : FittedModel[{"Nonlinear", __},
__]][prop_] :=
model[prop] /; MemberQ[model["Properties"], prop]
(* give the definition for a new property *)
In[3]:= myModelProperties[model : FittedModel[{"Nonlinear", __}, __]][
"SinVariance"] := Sin[model["EstimatedVariance"]]
(* define a construct for lists of properties *)
In[4]:= myModelProperties[model : FittedModel[{"Nonlinear", __}, __]][
vals : {_String ...}] := Map[myModelProperties[model], vals]
(* this is our new object *)
In[5]:= op = myModelProperties[nlm];
(* get single newly defined and pre-existing properties and get both in
a list at once *)
In[6]:= op["SinVariance"]
Out[6]= 0.618074
In[7]:= op["BestFit"]
0.288603 x
Out[7]= 5.86625 E
In[8]:= op[{"SinVariance", "BestFit"}]
0.288603 x
Out[8]= {0.618074, 5.86625 E }
For lists of properties, the code above may be slower than the built-in
FittedModel property code because the FittedModel code re-uses shared
intermediate results while the code above does not.
Darren Glosemeyer
Wolfram Research