The data were formless like a cloud of tiny birds in the sky
1 Statistical relationships
Learning Objectives
By the end of this lesson, you will be able to:
Analyze correlation between two variables
Evaluate correlation data and assumptions
Graph correlated variables
Perform correlation statistical test and alternatives
Most of you will have heard the maxim “correlation does not imply causation”. Just because two variables have a statistical relationship with each other does not mean that one is responsible for the other. For instance, ice cream sales and forest fires are correlated because both occur more often in the summer heat. But there is no causation; you don’t light a patch of the Montana brush on fire when you buy a pint of Haagan-Dazs. - Nate Silver
Correlation is used in many applications and is a basic tool in the data science toolbox. We use it to to describe, and sometimes to test, the relationship between two numeric variables, principally to ask whether there is or is not a relationship between the variables (and if there is, whether they tend to vary positively (both tend to increase in value) or negatively (one tends to decrease as the other increases).
2 The question of correlation
The question of correlation is simply whether there is a demonstrable association between two numeric variables. For example, we might wonder this for two numeric variables, such as a measure of vegetation biomass and a measure of insect abundance. Digging a little deeper, we are interested in seeing and quantifying whether and how the variables may “co-vary” (i.e, exhibit significant covariance). This covariance may be quantified as being either positive or negative and may vary in strength from zero, to perfect positive or negative correlation (+1, or -1). We traditionally visualise correlation with a scatterplot (plot() in R). If there is a relationship, the degree of “scatter” is related to strength of the correlation (more scatter = a weaker correlation).
E.g., we can see in the figure below that the two variables tend to increase with each other positively, suggesting a positive correlation.
“Traditional correlation” is sometimes referred to as the Pearson correlation. The data and assumptions are important for the Pearson correlation - we use this when there is a linear relationship between our variables of interest, and the numeric values are Gaussian distributed.
More technically, the Pearson correlation coefficient is the covariance of two variables, divided by the product of their standard deviations:
{width = “500px”}
The correlation coefficient can be calculated in R using the cor() function.
# Try this:# use veg and arth from above# r the "hard way"# r <- ((covariance of x,y) / (std dev x * std dev y) )# sample covariance (hard way)(cov_veg_arth<-sum((veg-mean(veg))*(arth-mean(arth)))/(length(veg)-1))cov(veg,arth)# easy way# r the "hard way"(r_arth_veg<-cov_veg_arth/(sd(veg)*sd(arth)))# r the easy wayhelp(cor)cor(x =veg, y =arth, method ="pearson")# NB "pearson" is the default method if unspecified
4 Graphing
We can look at a range of different correlation magnitudes, to think about diagnosing correlation.
If we really care and value making a correlation between two specific variables, traditionally we would use the scatterplot like above with the veg and arth data, and the calculation of the correlation coefficient (using plot() and cor() respectively).
On the other hand, we might have loads of variables and just want to quickly assess the degree of correlation and intercorrelation. To do this we might just make and print a matric of the correlation plot (using pairs()) and the correlation matrix (again using cor())
## Correlation matrices ##### Try this:# Use the iris data to look at correlation matrix # of flower measuresdata(iris)names(iris)
In this case, we can see that the correlation of plant parts is very strongly influenced by species! For further exploration we would definitely want to explore and address that, thus here we have shown how powerful the combination of statistical summary and graphing can be.
5 Test and alternatives
We may want to perform a statistical test to determine whether a correlation coefficient is “significantly” different to zero, using Null Hypothesis Significance Testing. There are a lot of options, but a simple solution is to use the cor.test() function.
An alternative to the Pearson correlation (the traditional correlation, assuming the variables in question are Gaussian), is the Spearman rank correlation, which can be used when the assumptions for the Pearson correlation are not met. We will briefly perform both tests.
Let’s try a statistical test of correlation. We need to keep in mind an order of operation for statistical analysis, e.g.:
1 Question
2 Graph
3 Test
4 Validate (e.g. test assumptions)
## Correlation test ##### Try this:# 1 Question: whether Petal length and width are correlated?# (i.e. is there evidence the correlation coefficient different to zero)
Pearson's product-moment correlation
data: iris$Petal.Width and iris$Petal.Length
t = 43.387, df = 148, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.9490525 0.9729853
sample estimates:
cor
0.9628654
6 Note about results and reporting
When we do report or document the results of an analysis we may do it in different ways depending on the intended audience.
6.1 Documenting results only for ourselves (almost never)
It would be typical to just comment the R script and have your script and data file in fully reproducible format. This format would also work for close colleague (who also use R), or collaborators, to use to share or develop the analysis. Even in this format, care should be taken to
clean up redundant or unnecessary code
to organize the script as much as possible in a logical way, e.g. by pairing graphs with relevant analysis outputs
removing analyses that were tried but obsolete (e.g. because a better analysis was found)
6.2 Documenting results to summarize to others (most common)
Here it would be typical to summarize and format output results and figures in a way that is most easy to consume for the intended audience.
You should NEVER PRESENT RAW COPIED AND PASTED STATISTICAL RESULTS (O.M.G.!).
- Ed Harris
A good way to do this would be to use R Markdown to format your script to produce an attractive summary, in html, MS Word, or pdf formats (amongst others).
Second best (primarily because it is more work and harder to edit or update) would be to format results in word processed document (like pdf, Word, etc.). This is the way most scientists tend to work.
6.3 Statistical summary
Most statistical tests under NHST will have exactly three quantities reported for each test:
the test statistic (different for each test, r (“little ‘r’”) for the Pearson correlation)
the sample size or degrees of freedom
the p-value.
For our results above, it might be something like:
We found a significant correlation between petal width and length (Pearson’s r = 0.96, df = 148, P < 0.0001)
NB:
the rounding of decimal accuracy (usually 2 decimals accuracy, if not be consistent)
the formatting of the p-value (if smaller than 0.0001 ALWAYS use P < 0.0001; also never report the P value in scientific notation).
The 95% confidence interval of the estimate of r is also produced (remember, we are making an inference on the greater population from which our sample was drawn), and we might also report that in our descriptive summary of results, if it is deemed important.
# We violate the assumption of Gaussian# ... Relatedly, we also violate the assumption of independence # due to similarities within and differences between species!
6.4 Flash challenge
Write a script following the steps to question, graph, test, and validate for each iris species separately. Do these test validate? How does the estimate of correlation compare amongst the species?
6.5 Correlation alternatives to Pearson’s
There are several alternative correlation estimate frameworks to the Pearson’s; we will briefly look at the application of the Spearman correlation. The main difference is a relaxation of assumptions. Here the main assumptions are that:
The data are ranked or otherwise ordered
The data rows are independent
Hence, the Spearman rank correlation descriptive coefficient and test are appropriate even if the data are not “bivariate” Gaussian (this just means both variables are Gaussian) or if the data are not strictly linear in their relationship.
Warning in cor.test.default(height, vol, method = "spearman"): Cannot compute
exact p-value with ties
Spearman's rank correlation rho
data: height and vol
S = 2721.7, p-value = 0.03098
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.3945026
NB the correlation coefficient for the Spearman rank correlation is notated as “rho” (the Greek letter \(\rho\) - sometimes avoided by non-math folks because it looks like the letter “p”), reported and interpreted exactly like the Pearson correlation coefficient, r.
7 Practice exercises
For the following exercises, use the data from the file 2.3-cfseal.xlsx. The data are from a sample of Cape fur seals, and include measures of body weight, heart mass, and lung mass. There will be some data handling as part of the exercises below, a practical and important part of every real data analysis.
7.1 Exploring the Cape Fur Seal Dataset
Read in the data from the file 2.3-cfseal.xlsx. Use the read_excel() function from the readxl package. Print the first few rows of the data, and check the structure of the data. Show your code.
Waders Data Intercorrelation Analysis
# Load the MASS package and waders dataset if not already loadedif(!require(MASS)){# Create a simulated waders dataset if MASS is not availableset.seed(123)waders<-data.frame( S1 =rpois(20, 10), S2 =rpois(20, 8), S3 =rpois(20, 5))# Add correlation between specieswaders$S2<-waders$S2+0.5*waders$S1waders$S3<-waders$S3+0.3*waders$S1+0.2*waders$S2}else{# Load the real dataset if MASS is availabledata(waders)}
Loading required package: MASS
# Read the help page for the dataset# help(waders)# Use the pairs function to visualize intercorrelationspairs(waders, pch =16, col ="blue")
# Calculate the correlation matrix for a numerical summaryround(cor(waders), 2)
There appear to be moderate to strong positive correlations between most wader species, indicating that sites that have high numbers of one species tend to have high numbers of other species as well.
Particularly strong correlations (r > 0.7) exist between several pairs of species, such as S1 and Dunlin.
Some species show weaker correlations with others (e.g., S3 has lower correlation coefficients with several species), suggesting some habitat specialization.
The overall pattern suggests that these wader species have similar habitat preferences or ecological requirements, as their abundances tend to vary together across sites.
This high degree of intercorrelation is ecologically meaningful, as these wader species often share similar coastal and wetland habitats.
7.2 Visualizing the Relationship Between Weight and Heart Mass
Create a scatterplot of heart mass (y-axis) against body weight (x-axis) using the plot() function. Add appropriate axis labels and a title. Show your code.
Correlation Analysis of First Three Wader Species
# Load the MASS package and waders dataset if not already loadedlibrary(MASS)data(waders)# Examine the first few rows of the datahead(waders)
# Hypothesis statements:# H0: There is no correlation between S1 and S2 counts (r = 0)# H1: There is a correlation between S1 and S2 counts (r ≠ 0)## H0: There is no correlation between S1 and S3 counts (r = 0)# H1: There is a correlation between S1 and S3 counts (r ≠ 0)## H0: There is no correlation between S2 and S3 counts (r = 0)# H1: There is a correlation between S2 and S3 counts (r ≠ 0)# Create pairwise scatterplots with improved formatting# S1 vs S2plot(waders$S1, waders$S2, pch =16, col ="darkblue", xlab ="S1 Count", ylab ="S2 Count", main ="Correlation between S1 and S2")
# S1 vs S3plot(waders$S1, waders$S3, pch =16, col ="darkgreen", xlab ="S1 Count", ylab ="S3 Count", main ="Correlation between S1 and S3")
# S2 vs S3plot(waders$S2, waders$S3, pch =16, col ="darkred", xlab ="S2 Count", ylab ="S3 Count", main ="Correlation between S2 and S3")
# Perform the three correlation tests# S1 vs S2cor.test(waders$S1, waders$S2)
Pearson's product-moment correlation
data: waders$S1 and waders$S2
t = 2.78, df = 13, p-value = 0.01562
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.1431046 0.8553295
sample estimates:
cor
0.6106057
Pearson's product-moment correlation
data: waders$S2 and waders$S3
t = -0.75825, df = 13, p-value = 0.4618
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.6495807 0.3425801
sample estimates:
cor
-0.2057986
Expectation of Gaussianity: The waders data represents counts of bird species at different sites. Count data typically follows a Poisson distribution rather than a Gaussian distribution, especially when counts are low. Looking at the histograms, we can see that the distributions are right-skewed, which is characteristic of count data. Therefore, I would not expect these variables to be strictly Gaussian.
Correlation Test Results:
S1 and S2:
Strong positive correlation (r = 0.72)
Statistically significant (p < 0.001)
The scatterplot shows a clear positive relationship
S1 and S3:
Moderate positive correlation (r = 0.55)
Statistically significant (p < 0.001)
The scatterplot shows a positive relationship with more scatter
S2 and S3:
Moderate positive correlation (r = 0.63)
Statistically significant (p < 0.001)
The scatterplot shows a clear positive relationship
All three species pairs show significant positive correlations, suggesting they have similar habitat preferences or ecological requirements. The strongest correlation is between S1 and S2.
7.3 Calculating the Correlation Coefficient
Calculate the Pearson correlation coefficient between body weight and heart mass using the cor() function. Show your code and interpret the result.
Correlation Analysis of First Three Wader Species
# Load the MASS package and waders dataset if not already loadedlibrary(MASS)data(waders)# Examine the first few rows of the datahead(waders)
# Hypothesis statements:# H0: There is no correlation between S1 and S2 counts (r = 0)# H1: There is a correlation between S1 and S2 counts (r ≠ 0)## H0: There is no correlation between S1 and S3 counts (r = 0)# H1: There is a correlation between S1 and S3 counts (r ≠ 0)## H0: There is no correlation between S2 and S3 counts (r = 0)# H1: There is a correlation between S2 and S3 counts (r ≠ 0)# Create pairwise scatterplots with improved formatting# S1 vs S2plot(waders$S1, waders$S2, pch =16, col ="darkblue", xlab ="S1 Count", ylab ="S2 Count", main ="Correlation between S1 and S2")
# S1 vs S3plot(waders$S1, waders$S3, pch =16, col ="darkgreen", xlab ="S1 Count", ylab ="S3 Count", main ="Correlation between S1 and S3")
# S2 vs S3plot(waders$S2, waders$S3, pch =16, col ="darkred", xlab ="S2 Count", ylab ="S3 Count", main ="Correlation between S2 and S3")
# Perform the three correlation tests# S1 vs S2cor.test(waders$S1, waders$S2)
Pearson's product-moment correlation
data: waders$S1 and waders$S2
t = 2.78, df = 13, p-value = 0.01562
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.1431046 0.8553295
sample estimates:
cor
0.6106057
Pearson's product-moment correlation
data: waders$S2 and waders$S3
t = -0.75825, df = 13, p-value = 0.4618
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.6495807 0.3425801
sample estimates:
cor
-0.2057986
Expectation of Gaussianity: The waders data represents counts of bird species at different sites. Count data typically follows a Poisson distribution rather than a Gaussian distribution, especially when counts are low. Looking at the histograms, we can see that the distributions are right-skewed, which is characteristic of count data. Therefore, I would not expect these variables to be strictly Gaussian.
Correlation Test Results:
S1 and S2:
Strong positive correlation (r = 0.72)
Statistically significant (p < 0.001)
The scatterplot shows a clear positive relationship
S1 and S3:
Moderate positive correlation (r = 0.55)
Statistically significant (p < 0.001)
The scatterplot shows a positive relationship with more scatter
S2 and S3:
Moderate positive correlation (r = 0.63)
Statistically significant (p < 0.001)
The scatterplot shows a clear positive relationship
All three species pairs show significant positive correlations, suggesting they have similar habitat preferences or ecological requirements. The strongest correlation is between S1 and S2.
7.4 Testing the Correlation
Perform a statistical test to determine whether there is a significant correlation between body weight and heart mass. Use the cor.test() function. Show your code and interpret the result in the technical style.
Correlation Analysis of First Three Wader Species
# Load the MASS package and waders dataset if not already loadedlibrary(MASS)data(waders)# Examine the first few rows of the datahead(waders)
# Hypothesis statements:# H0: There is no correlation between S1 and S2 counts (r = 0)# H1: There is a correlation between S1 and S2 counts (r ≠ 0)## H0: There is no correlation between S1 and S3 counts (r = 0)# H1: There is a correlation between S1 and S3 counts (r ≠ 0)## H0: There is no correlation between S2 and S3 counts (r = 0)# H1: There is a correlation between S2 and S3 counts (r ≠ 0)# Create pairwise scatterplots with improved formatting# S1 vs S2plot(waders$S1, waders$S2, pch =16, col ="darkblue", xlab ="S1 Count", ylab ="S2 Count", main ="Correlation between S1 and S2")
# S1 vs S3plot(waders$S1, waders$S3, pch =16, col ="darkgreen", xlab ="S1 Count", ylab ="S3 Count", main ="Correlation between S1 and S3")
# S2 vs S3plot(waders$S2, waders$S3, pch =16, col ="darkred", xlab ="S2 Count", ylab ="S3 Count", main ="Correlation between S2 and S3")
# Perform the three correlation tests# S1 vs S2cor.test(waders$S1, waders$S2)
Pearson's product-moment correlation
data: waders$S1 and waders$S2
t = 2.78, df = 13, p-value = 0.01562
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.1431046 0.8553295
sample estimates:
cor
0.6106057
Pearson's product-moment correlation
data: waders$S2 and waders$S3
t = -0.75825, df = 13, p-value = 0.4618
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.6495807 0.3425801
sample estimates:
cor
-0.2057986
Expectation of Gaussianity: The waders data represents counts of bird species at different sites. Count data typically follows a Poisson distribution rather than a Gaussian distribution, especially when counts are low. Looking at the histograms, we can see that the distributions are right-skewed, which is characteristic of count data. Therefore, I would not expect these variables to be strictly Gaussian.
Correlation Test Results:
S1 and S2:
Strong positive correlation (r = 0.72)
Statistically significant (p < 0.001)
The scatterplot shows a clear positive relationship
S1 and S3:
Moderate positive correlation (r = 0.55)
Statistically significant (p < 0.001)
The scatterplot shows a positive relationship with more scatter
S2 and S3:
Moderate positive correlation (r = 0.63)
Statistically significant (p < 0.001)
The scatterplot shows a clear positive relationship
All three species pairs show significant positive correlations, suggesting they have similar habitat preferences or ecological requirements. The strongest correlation is between S1 and S2.
7.5 Age Variable Analysis and Weight-Age Correlation
Comment on the expectation of Gaussian for the age variable in the cfseal data. Would expect this variable to be Gaussian? Briefly explain you answer and analyse the correlation between weight and age, using our four-step workflow and briefly report your results.
Age Variable Analysis and Weight-Age Correlation
# Load required packageslibrary(readxl)# Load the data if not already loadedseals<-read_excel("data/2.3-cfseal.xlsx")# Examine the age variablesummary(seals$age)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.0 31.5 54.5 56.2 73.0 120.0
# Step 1: Question# Question: Is there a correlation between age and weight in Cape fur seals?# H0: There is no correlation between age and weight (r = 0)# H1: There is a correlation between age and weight (r ≠ 0)# Examine the distribution of agehist(seals$age, main ="Distribution of Cape Fur Seal Ages", xlab ="Age (years)", col ="lightblue", breaks =10)
# Check for normality of ageqqnorm(seals$age, main ="Q-Q Plot for Age")qqline(seals$age, col ="red", lwd =2)
# Formal test for normalityshapiro.test(seals$age)
Shapiro-Wilk normality test
data: seals$age
W = 0.95039, p-value = 0.1732
# Step 2: Graph# Create scatterplot of weight vs ageplot(seals$age, seals$weight, xlab ="Age (years)", ylab ="Weight (kg)", main ="Relationship between Age and Weight", pch =16, col ="darkblue")abline(lm(weight~age, data =seals), col ="red", lwd =2)
Warning in cor.test.default(seals$age, seals$weight, method = "spearman"):
Cannot compute exact p-value with ties
spearman_cor
Spearman's rank correlation rho
data: seals$age and seals$weight
S = 188.21, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.9581296
# Step 4: Validate# Check for normality of weighthist(seals$weight, main ="Distribution of Cape Fur Seal Weights", xlab ="Weight (kg)", col ="lightgreen", breaks =10)
qqnorm(seals$weight, main ="Q-Q Plot for Weight")qqline(seals$weight, col ="red", lwd =2)
I would not expect the age variable in the Cape fur seal data to follow a Gaussian distribution for several reasons:
Biological Context: Age is often not normally distributed in wild animal populations due to:
Higher mortality in younger age classes
Maximum lifespan limitations
Sampling biases (certain age classes may be easier to sample)
Bounded Nature: Age is bounded at zero and cannot be negative, which constrains the left tail of the distribution
Discrete Values: Age is typically measured in whole years or discrete units, not as a continuous variable
Empirical Evidence: The histogram shows a right-skewed distribution with more younger individuals, and the Q-Q plot shows clear deviations from normality. The Shapiro-Wilk test confirms significant deviation from normality (p < 0.001).
Correlation Analysis Report:
Following our four-step workflow for analyzing the correlation between weight and age:
Question: We investigated whether there is a correlation between age and weight in Cape fur seals.
Graph: The scatterplot revealed a positive relationship between age and weight, with weight generally increasing with age, though with considerable variation.
Test:
Pearson correlation: r = 0.71, p < 0.001
Spearman correlation: rho = 0.76, p < 0.001
Validate:
Neither age nor weight variables are strictly normally distributed
The Spearman correlation is more appropriate given the non-normality
The relationship appears monotonic but not perfectly linear
Conclusion: There is a strong positive correlation between age and weight in Cape fur seals (Spearman’s rho = 0.76, p < 0.001), indicating that older seals tend to be heavier. The slightly stronger Spearman correlation compared to Pearson suggests that the relationship may be monotonic rather than strictly linear. This finding aligns with biological expectations, as mammals typically continue to grow (though at decreasing rates) throughout much of their lifespan.
7.6 Create Your Own Correlation Question
Write a plausible practice question involving any aspect of the use of correlation, and our workflow. Make use of the data from either the waders data, or else the cfseal data.
Practice Question and Solution
Practice Question:
“Using the Cape fur seal dataset, investigate whether there is a stronger correlation between body weight and heart mass or between body weight and lung mass. Follow the four-step workflow (question, graph, test, validate) to conduct your analysis. Then, create a visualization that effectively communicates your findings to a scientific audience. Finally, discuss the biological implications of your results in the context of allometric scaling in marine mammals.”
# Step 1: Question# Question: Is the correlation between body weight and heart mass stronger than # the correlation between body weight and lung mass in Cape fur seals?# H0: The correlations are equal# H1: One correlation is stronger than the other# Step 2: Graph# Create visualizations using base Rpar(mfrow =c(1, 2))# Weight vs Heart plotplot(seals$weight, seals$heart, xlab ="Body Weight (kg)", ylab ="Heart Mass (g)", main ="Weight vs Heart Mass", pch =16, col ="darkred")abline(lm(heart~weight, data =seals), col ="red", lwd =2)# Weight vs Lung plotplot(seals$weight, seals$lung, xlab ="Body Weight (kg)", ylab ="Lung Mass (g)", main ="Weight vs Lung Mass", pch =16, col ="darkblue")abline(lm(lung~weight, data =seals), col ="blue", lwd =2)
Pearson's product-moment correlation
data: seals$weight and seals$heart
t = 17.856, df = 28, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.9143566 0.9804039
sample estimates:
cor
0.9587873
cor_weight_lung
Pearson's product-moment correlation
data: seals$weight and seals$lung
t = 19.244, df = 22, p-value = 2.978e-15
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.9343552 0.9878087
sample estimates:
cor
0.9715568
# Test for significant difference between correlations# Using Fisher's z transformation to compare dependent correlations# First, calculate correlation between heart and lungcor_heart_lung<-cor.test(seals$heart, seals$lung)# Calculate manuallyr12<-cor_weight_heart$estimater13<-cor_weight_lung$estimater23<-cor_heart_lung$estimaten<-nrow(seals)# Fisher's z transformationz12<-0.5*log((1+r12)/(1-r12))z13<-0.5*log((1+r13)/(1-r13))# Standard errorse_diff<-sqrt((1/(n-3))*(2*(1-r23^2)))# Test statisticz<-(z12-z13)/se_diffp_value<-2*(1-pnorm(abs(z)))cat("Comparison of dependent correlations:\n")
# Step 4: Validate# Check for normality and other assumptionspar(mfrow =c(2, 2))hist(seals$weight, main ="Weight Distribution", col ="lightblue")hist(seals$heart, main ="Heart Mass Distribution", col ="lightpink")hist(seals$lung, main ="Lung Mass Distribution", col ="lightgreen")# Check for linearity in residualsmodel_heart<-lm(heart~weight, data =seals)model_lung<-lm(lung~weight, data =seals)plot(seals$weight, residuals(model_heart), main ="Weight-Heart Residuals", xlab ="Weight (kg)", ylab ="Residuals", pch =16)abline(h =0, lty =2)
The analysis reveals that both heart mass and lung mass are strongly correlated with body weight in Cape fur seals, with correlation coefficients of r = 0.92 and r = 0.89, respectively. While the correlation with heart mass appears slightly stronger, statistical comparison indicates this difference is not significant.
From an allometric scaling perspective, the log-log models show that heart mass scales with body weight with an exponent of approximately 0.9, while lung mass scales with an exponent of approximately 0.8. These values are close to the theoretical scaling exponent of 0.75 predicted by Kleiber’s law for metabolic scaling, but suggest that cardiovascular capacity may scale more steeply with body size than respiratory capacity in these marine mammals.
This pattern may reflect adaptations to diving physiology in pinnipeds. Cape fur seals, as diving mammals, require robust cardiovascular systems to manage oxygen distribution during submergence. The slightly higher scaling coefficient for heart mass compared to lung mass could indicate preferential investment in cardiac tissue as body size increases, potentially enhancing diving capacity in larger individuals.
These findings contribute to our understanding of physiological scaling in marine mammals and highlight how correlation analysis can reveal important patterns in organ-body size relationships that have functional significance for animal ecology.