Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 71

Modeling the population of the U.S.

Objective: To use historical data from the U.S. Census Bureau to develop differential equation models for population trends in the U.S.

Warmup: Given the following estimates from the Census Bureau, find the population of the U.S. in 2004:  
        * Population in 2001: 285,102,075
        * Births, deaths, and net international immigration:
                2002: 4,006,985; 2,429,999; 1,262,159
                2003: 4,055,469; 2,432,874; 1,225,161
                2004: 4,099,399; 2,453,984; 1,221,013  
This warmup need not be turned in with the rest of your report.

Lab tasks:

Explore and develop two different differential equation models for the total population of the U.S., using census data for the period 1900 through 1999

  1. an exponential model
  2. a logistic model
Use your models to predict the current population of the U.S. How close are they to reality?

Census datafiles are available in 2 different forms: original data in plain text format, and cleaned up version in csv format

Some pointers and issues to consider:

  • What units will you use for each of the variables?

  • A standard exponential model offers only 1 parameter to play with -- i.e., the growth rate. What is the best value for it? Justify your choice.

  • In a logistic model you get to pick 2 parameters -- the intrinsic growth rate and the carrying capacity. What are good ways to estimate them?

  • What if we try a 3rd model in which we let the intrinsic growth rate vary with time. How would you model its dependence on time?
 

What to turn in:

All lab reports are expected to contain the following minimum components (or, you can think of them as section headings):
  • Problem statement and objectives
  • Methodology
  • Results and interpretation/conclusion(s)
Your report should also contain equations, graphs, figures and/or tables, as needed, to support your written work. However, it is not necessary to "overdo" these items! Feel free to include only the minimum needed graphs/tables that illustrate and clarify your analysis, claims and conclusions.

What to turn in:

All lab reports will be graded based on a simple rubric, on a 10 point scale. Grading will consider mathematical content, as well as clarity and completeness of your written discussion. The rubric for this lab will consist of my assessment of the following items on a 1-point scale:

  1. Are the objective(s), goal(s) or problem statement clear?
  2. Is the organizational structure of the report effective?
  3. Does the report define all variables and clarify units used?
  4. Is there adequate exploration of math and/or modeling?
  5. Are the explorations explained clearly?
  6. Are there needed graphs, figures, tables, etc.?
  7. Are the graphs/ figures/ tables clearly labeled?
  8. Are the spelling, grammar, and punctuation correct?
  9. Are the results and their presentation adequate?
  10. Are the interpretations/conclusions clear?
Some potentially useful Sage code segments
(I) Here is how to read csv datafiles and store needed data in local variables that you get to define (ydata in this example):
f = open('./us_population_1900_1999.csv') # This file has comma separated data, with a plain text header line. ydata = [] # This will assemble my y-data (i.e., the population) in the form of a list headerline = f.readline() # Read & discard the header line line = f.readline() # This is the first line of actual data while (line !=''): xy = line.split(',') # The comma splits each line into two items of data ydata.append(float(xy[1])) # Append to xdata # print xy[1] # optional: to check whether it's doing what I am thinking line = f.readline() # Read the next line # print ydata # optional: to check whether it's working correctly
(II) Here is one way to create an independent variable (e.g., tdata) containing the years 1900-1999:
tdata = [ 1900+j for j in range(100) ] tdata # just to print and check whether it did what I expect
[1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999]
(III) Here's one way to view a plot of the data:
point(zip(tdata, ydata), axes_labels=['year', 'population'], pointsize=30)
(IV) Here are worksheets containing examples of some related tasks that may be potentially useful:

* How to solve a DE; how to plot direction fields, etc.

* How to find best-fit straight line, or other curve, to given data.