LESSON QUESTIONS: Rates of change

FOCUS QUESTION: How can I characterize rates of change?

Contents

EXAMPLE 1: Load the fetal size data

    load toRump.txt;
    load toHeel.txt;

EXAMPLE 2: Merge the time and weight (mass) variables from the two data sets

   weeks = [toRump(:, 1); toHeel(2:end, 1)];
   mass =  [toRump(:, 3); toHeel(2:end, 3)];
   weight = mass .* 0.00220462262;

Questions Answers
What does end mean? The end identifier names the last element along a dimension of an array.
If x is a vector, what does x(2:end) mean? This expression is a vector with the same elements as those in x except that the first element has been omitted.
Why do we omit the first row of toHeel in forming weeks? Both toRump and toHeel have a row corresponding to week 20.

EXAMPLE 3: Calculate the weekly rate of change of fetal weight

   poundsPerWeek = diff(weight) ./ diff(weeks);
   weekMid = (weeks(1:(end-1)) + weeks(2:end))./2;

Questions Answers
What does the diff function do? The diff function calculates the difference between adjacent values in an array. (See the handout on the diff function for more details.)
What does the variable poundsPerWeek correspond to? The variable poundsPerWeek contains a numerical estimate of the slope of fetal weight as a function of gestational week. Since gestational week is a time variable, you can also interpret it as the weekly fetal growth rate.
If x is a vector, how many elements does diff(x) have? The result of diff(x) has one fewer value than x does. (Think of the values of x as being fence posts and the differences corresponding to the spaces between them. There is one fewer space than post.)
How big is weeks(1:(end-1))? The weeks variable contains a vector with 36 rows. the result of weeks(1:(end-1)) is a vector containing the first 35 rows of weeks.
What is the first element of the vector weeks(2:end)? The expression weeks(2:end) is a vector with the same values as weeks starting with the second element of weeks. Therefore, its first element has the value weeks(2).
Why does weekMid contain a vector containing locations half-way between the values in weeks? The two vectors weeks(1:(end-1)) and weeks(2:end)) each contain one less element than the vector weeks. The first element of weeks(1:(end-1)) is weeks(1), while the first element of weeks(2:end) is weeks(2). The expression adds the two vectors and divides by 2. The first element of this evaluation is just (weeks(1) + weeks(2))/2.

EXAMPLE 4: Plot the weight and rate of change of weight

   figure('Color', [1, 1, 1])
   ax = plotyy(weeks, weight, weekMid, poundsPerWeek);
   xlabel(ax(1), 'Weeks')
   ylabel(ax(1), 'Fetal weight (lbs)')
   ylabel(ax(2), 'Fetal growth rate (lbs/wk)')
   title('Characterization of fetal weight during pregnancy')

Questions Answers
Why did we plot poundsPerWeek versus the weekly midpoints rather than the weeks themselves? The rate of change or slope is a relationship between pairs of points, and there is one fewer slope value than points on the curve. It makes sense to plot the slopes versus points halfway between these rather than associating the slopes with the smallest end or the largest end.
What is the relationship between the blue curve and the green curve? The green curve is the slope of the blue curve.
When is the slope 0? The slope is 0 at points where the curve has a relative maximum or minimum.
When does the slope have its largest positive value? The slope has its largest positive value at points where the curve is climbing most steeply upward.
When does the slope have its largest negative value? The slope has its largest negative value at points where the curve is climbing most steeply downward. The slope is never negative in this particular case (babies don't lose weight during gestation).
How does the Color property affect the Figure Window? Setting the Color property in the figure command sets the color of the border region around the axes. A color value of three 1's represents white.

EXAMPLE 5: Calculate rate of change (slope) of fetal length in inches per week

   weeksRump = toRump(:, 1);
   weeksHeel = toHeel(:, 1);
   inchesRump = toRump(:, 2).* 0.393800888;
   inchesHeel = toHeel(:, 2).*  0.393800888;
   inchesPerWeekRump = diff(inchesRump) ./ diff(weeksRump);
   inchesPerWeekHeel = diff(inchesHeel) ./ diff(weeksHeel);

Questions Answers
Why didn't we append the toRump length measurements and the toHeel length measurements together in the same way as we did with the weight measurements? The method of measuring the length is different in the two data files, so these length measurements need to be treated as distinct curves.

EXAMPLE 6: Find the midpoints of the weeks intervals for plotting

   rumpMid = (weeksRump(1:(end-1)) + weeksRump(2:end))./ 2;
   heelMid = (weeksHeel(1:(end-1)) + weeksHeel(2:end))./ 2;

EXAMPLE 7: Plot the weekly rate of change of fetal length in inches/week

   figure('Color', [1, 1, 1])
   subplot(2, 1, 1, 'XGrid', 'on')
   hold on
   plot(weeksRump, inchesRump, 'k');
   plot(weeksHeel, inchesHeel, 'r');
   ylabel('Length (in)')
   title ('Characterization of fetal length during pregancy')
   box on
   hold off
                                                %
   subplot(2, 1, 2, 'XGrid', 'on')
   hold on
   plot(rumpMid, inchesPerWeekRump, 'k');
   plot(heelMid, inchesPerWeekHeel, 'r');
   xlabel('Gestational week')
   ylabel('Growth rate (in/wk)')
   legend({'Crown-to-rump', 'Crown-to-heel'}, 'Location', 'SouthOutside', ...
       'Orientation', 'Horizontal')
   box on
   hold off

EXAMPLE 8: Calculate the percentage change in fetal weight

Create a new cell in which you type and execute:

     percentChangeWeight = 100.*diff(weight)./weight(1:end-1);

EXAMPLE 9: Calculate the percentage change in fetal weight

Create a new cell in which you type and execute:

   figure('Color', [1, 1, 1])                  % New figure
   ax = plotyy(weeks, weight, weekMid, percentChangeWeight); % Save axes
   xlabel(ax(1), 'Weeks')                      % Label x-axis of left axis
   ylabel(ax(1), 'Fetal weight (lbs)')         % Label y-axis of left axis
   ylabel(ax(2), '% change') % Label y-axis of right axis
   title('Characterization of fetal weight during pregnancy') % Title one of the axes

You should see a Figure Window with the following graph:

Questions Answers
How can I add grid lines to a plot? Set the 'XGrid' and/or 'YGrid' properties of the axes. The subplot function creates a new axes. This example shows how to set XGrid property at axes creation. You can also add the grid using the plottools or in your script using the set command.
Why did only one subplot have a legend? Since both subplots use the same color scheme, a second legend would have been redundant and resulted in over-crowding.

These lesson questions were written by Kay A. Robbins of the University of Texas at San Antonio and last modified on 24-May-2015.