This practical session is intended to explore tumor growth data and interpret it using mathematical models. It is divided into three parts (only the first two parts will be covered in this session):
The data provided consists of measurements of tumor volumes from tumors implanted subcutaneously in the back of mice. The cells are from a murine lung cancer cell line (Lewis Lung Carcinoma). The volumes were computed from two one dimensional measures recorded using a caliper (the length $L$ and width $w$) and using the formula $V = \frac{1}{2}L\times w^2$. Volumes are given in mm$^3$ as a function of days following injection of the cells ($10^6$ cells $\simeq$ 1 mm$^3$ injected on day 0.
Are you ready to start your exploration?
Good luck on your adventure! :)
% matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Load the data file data_table.xlsx
as a pandas Dataframe and display it
df = pd.read_excel('data_table.xlsx')
df
Get the time vector. It is in days
time = df.index
time
Plot the growth of the first three mice.
# Mouse 1
plt.figure(1)
plt.plot(time, df[1], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
# Mouse 2
plt.figure(2)
plt.plot(time, df[2], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
# Mouse 3
plt.figure(3)
plt.plot(time, df[3], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
Plot all tumor growth on the same panel
for mouse in df.columns:
plt.plot(time, df[mouse], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
Plot the average of the data with error bars as standard deviations
# Generate columns with mean
df['mean'] = df.mean(axis=1)
# Generate columns with std
df['std'] = df.std(axis=1)
df[['mean']].plot(fmt='o', yerr=df['std'])
plt.legend(loc='upper left')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
From the individual plots, what tumor growth pattern/equation would you suggest? How could you simply graphically test it? What do you conclude?
# Exponential growth
# Should be linear in log scale
# Mouse 1
plt.figure(1)
plt.semilogy(time, df[1], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
# Mouse 2
plt.figure(2)
plt.semilogy(time, df[2], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
# Mouse 3
plt.figure(3)
plt.semilogy(time, df[3], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')
# Mouse 4
plt.figure(4)
plt.semilogy(time, df[4], 'o')
plt.xlabel('Days')
plt.ylabel('Volume (mm^3)')