Given the following data:
weight <- c(20,300,341,658,1100,2000,2300,8750,71000)
pulse <- c(1000,185,378,300,190,312,240,193,65)
df <- data.frame(weight,pulse)
df
## weight pulse
## 1 20 1000
## 2 300 185
## 3 341 378
## 4 658 300
## 5 1100 190
## 6 2000 312
## 7 2300 240
## 8 8750 193
## 9 71000 65
The first question is to form a relationship between blood flow and weight.
Blood flow is also called as “cardiac output”, and it is a function of Stroke volume and heart rate (for a detailed information on Cardiac output, please refer to http://www.biosbcc.net/doohan/sample/htm/COandMAPhtm.htm).
\[BloodFlow = f(StrokeVolume, HeartRate)\] where BloodFlow = amount of blood pumped by the animal’s heart in a unit time, Strokevolume is the amount of blood pumped per beat, and heart rate is the number of times a heart beats per unit of time.
Therefore \(StrokeVolume \propto V\), where \(V\) is the volume of the anilam’s body. But \(V\) is proportional to Weight (\(W\) of the animal). Hence, \(StrokeVolume \propto W\). There should be an association between HeartRate and StrokeVolume, since depending on the weight, a certain amount of blood has to be pumped by the heart. As the HeartRate increases, the amount of blood pumped also increases. Similarly as the amount of StrokeVolume increases, the blood pumped also increases. For light weight animals, the heart beats at a much higher rate than heavy weight animals. However light weight animals need smaller amount of blood to maintain their body temperature. On the other hand, heavy weight animals have much lower heart rate, but needed some good amount of blood to maintain body temperature. Hence the blood pumped must be proportional to the product of animal’s weight and animal’s heart rate. \[BloodFlow \propto Weight.HeartRate\]
As the animal’s weight increases, the heart rate decreases, however the BloodFlow still increases (due the the Weight factor in the above model). Similarly, as the animal’s weight decreases, the HeartRate increases, keeping the BloodFlow optimal (as per the animal’s surface area).
In the problem, it is given that the energy available is proportional to the BloodFlow, and the energy used to maintain body temperature is proportional to the surface area of the animal. And at rest, these two energies should be the same.
Therefore, \[S \propto Weight.HeartRate\] Where S is the surface area. But \[S \propto Weight^{2/3}\] Hence \[Weight^{2/3} \propto Weight.HeartRate\] Finally, we have \[Weight = K (\frac{1}{HeartRate^3})\] where K is the proportionality constant.
Let us find K using the graph:
library(ggplot2)
df$pulse_mod <- 1/pulse^3
ggplot(df,aes(x=pulse_mod,y=weight)) +
geom_point() +
labs(title="Plot between 1/pulse^3 and Weight")
df
## weight pulse pulse_mod
## 1 20 1000 1.000000e-09
## 2 300 185 1.579373e-07
## 3 341 378 1.851504e-08
## 4 658 300 3.703704e-08
## 5 1100 190 1.457938e-07
## 6 2000 312 3.292579e-08
## 7 2300 240 7.233796e-08
## 8 8750 193 1.391003e-07
## 9 71000 65 3.641329e-06
Let us use the point (weight,1/pulse^3) = (341,1.851504e-08), to obtain the slope of the line passing via origin as 18417459536.
Hence, we cen get the following model:
\[Weight = \frac{18417459536}{Pulse^3}\] Where Weight = weight in Grams, and Pulse = Heart beat per minute
Let us predict the weights for the given data using the above model:
weight_pred <- 18417459536/pulse^3
df <- data.frame(pulse,actual_weight=weight,predicted_weight=weight_pred)
library(reshape)
df_melt <- melt(df,id="pulse")
ggplot(df_melt,aes(x=pulse,y=value,color=variable)) +
geom_point()
df
## pulse actual_weight predicted_weight
## 1 1000 20 18.41746
## 2 185 300 2908.80454
## 3 378 341 340.99996
## 4 300 658 682.12813
## 5 190 1100 2685.15229
## 6 312 2000 606.40942
## 7 240 2300 1332.28151
## 8 193 8750 2561.87418
## 9 65 71000 67064.03108
The model is not really predicting very well. But given the amount of data, I believe this is the best we can do.