Technology for Chapter 4: Empirical Modeling in Maple
We will use the following to illustrate the use of technology.
1. PURPOSE: To provide the student the opportunity to develop and use Empirical modeling techniques using technology.
2. OBJECTIVE: Determine if the hearts of mammals are geometrically similar using your knowledge of proportionality models and technology. Provide a summary of your analysis using the following data to support or refute your argument.
Heart Weight Length of cavity of
Animal (in grams) left ventricle (in)
Mouse 0.13 0.55
Rat 0.64 1.00
Rabbit 5.80 2.20
Dog 102.00 4.00
Sheep 210.00 6.50
Ox 2030.00 12.00
Horse 3900.00 16.00
3. PROCEDURE:
a. Obtain a scatter plot and note the trends.
b. Use ladder of powers to try to obtain a model (see ladder of powers steps below), Use Divided Difference table to obtain a low order polynomial (see Divided Difference steps below), or Use Cubic Splines (see Cubic Splines information below)
Ladder of Powers
Step 1. If trend of data allows for use of Ladder of Powers begin using a transformation by the ladder on only one variable. Obtain a plot of the transformed data and continue until you have the most linear plot.
Step 2. Use least squares to fit the parameters of the model as per Chapter 3 technology.
Step 3. Interpret results
Divided Difference
Step 1. Put the ordered data into the divided difference table and interpret,
Step 2. Fit the complete low order polynomial suggested using the least squares technology from Chapter 3 (but now use y=ax^2+bx+c form).
Step 3. Interpret Results
Cubic Splines
Step 1. Put the ordered data into the spline library
Step 2. Interpret Results.
Example using Maple Template
Empirical Models for Lab
>
>
>
>
>
>
>
> #Interpret your scatterplot: Increasing and curved upsilon
>
>
Basic Steps
Step 1. Plot the raw data and describe trends
Step 2, Identify any potential outliers. Resolve if possible.
Step 3. Choose one or more empirical technique(s) to try
Build a simple 1 term model. Use Least squares to fit. Analyzie residuals for model adequacy.
Build a model from another transformation, such as ln-ln model
Build a higher order (n-1) polynomial. Analyze model for possible snaking and oscilations.
Use Divided Difference Table to qualitatively access information about low order polyomials for your data. Fit data with a low
order polynomial using least squares and analyze residuals.
Use Cubic Splines if your have precise data and need a perfect fit.
Empirical Models
Empirical Modeling
>
Simple One Term Models
> restart;
> Xdata := [.55, 1, 2.2, 4, 6.5, 12, 16]:
> Ydata := [.13, .64, 5.8, 102, 210, 2030, 3900]:
> XY:=array(1..2,1..7,[Xdata,Ydata]);
>
> with(plots):
> pointplot({seq([Xdata[i],Ydata[i]],i=1..7)},style=point,symbol=box,view=[0..20,0..4000], title=`Scatterplot`);
Note: this looks like a function that is concave up and increasing. The ladder of powers (for tranforming x) would make x^2, x^3, etc. If we were to tranform y then we would try sqrt(y), log(y), -1/sqrt(y),-1/y, etc. We do this graphically trying to obtain a "straight line".
> tran2:=map(x->x^2,Xdata):
> tran2XY:=array(1..2,1..7,[X^2,Ydata]);
> tran3:=map(x->x^3,Xdata):
> tran3xy:=array(1..2,1..7,[x^3,Ydata]);
> pointplot({seq([tran2[i],Ydata[i]],i=1..7)}, style=point,symbol=box,title=`y versus x^2`);
> pointplot({seq([tran3[i],Ydata[i]],i=1..7)}, style=point,symbol=box, title=`y versus x^3`);
>
>
>
>
>
>
The cubic model does better if this example.
> #Fit with least Squares and Analyze the adequacy of the model.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> eq_fit:= fit[leastsquare[[x,y], y=a*x^3, {a}]]([xobs, yobs]);
>
Transform this into a procedure
> eq_function:=unapply(rhs(eq_fit),x);
Then give the predicted values (we could have used map() in this case, since the data does not involve classes or weights)
> Yvaluespredicted:=transform[apply[eq_function]](xobs);
Find the residuals:
> Residuals:=transform[multiapply[(x,y)-> x-y]]([yobs, Yvaluespredicted]);
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> eq_fit:= fit[leastsquare[[x,y], y=a*x+b, {a,b}]]([lnX, lnY]);
>
>
>
>
>
>
>
>
>
>
>
Divided Difference Tables
>
> ddproc:=proc(x,y) local len,xym,j,k;
> len:=describe[count](y):
> xym:=matrix(len,len):
> for j from 1 to len do for k from 1 to len do xym[j,k]:=0:od:od:
> for j from 1 to len do xym[j,1]:=x[j]:od:for j from 1 to len do xym[j,2]:=y[j]:od:
> for j from 2 to (len-1) do for k from j to len do
> xym[k,j+1]:=(xym[k,j]-xym[k-1,j])/(xym[k,1]-xym[k-(j-1),1]):
> if abs(xym[k,j+1])<10^(-5) then xym[k,j+1]:=0:fi:od:od:
> Digits:=4:
> return(evalf(evalm(xym)))
> end:
> with(stats):with(linalg):
>
> ddproc(xobs,yobs);
> # Interpret the DD table.
The negative value (-2.382) in the second DD column makes all further columns invalid. Therefore, the DD table does not specifically led to a lower order polynomial to try.
>
>
Interpolating Polynomials
Interpolating Polynomials
Maple has instrinsic functions to call for interploating polynomials.
Here are some examples.
>
>
>
> FI:=interp(xobs,yobs,z);
> convert(%,float);
>
> plot(-0.01564695895 *z^6+0.5804947800 *z^5-21.94291846-7.457535872* z^4+78.39266569* z+41.07995156* z^3-89.99701075* z^2,z=0..17);
>
>
>
>
>
>
Cubic Splines
>
This is our example and now we are fitting with cubic splines.
> readlib(spline):
> spline(xobs,yobs,x,cubic):
> s:=unapply(%,x):
> with(plots):
>
> dxy:=pointplot({seq([xobs[i],yobs[i]],i=1..7)}):
> curve:=plot(s(x),x=0..17):
> display({dxy,curve});