I am trying to understand minimum determinant covariance. I gather from this stack exchange post that it tries to select a subset of data that is tightly distributed to exclude anomalies, and it does so by minimizing the determinant of the covariance matrix.
The point which I am stuck at is why does the determinant of a covariance matrix measures how broad a distribution is?
Below are two specific sub-points I'm confused about
This stack exchange post describes the determinant of a matrix as a measure of how much space it takes up (area in 2d and volume in 3d). So I get a sense of a large determinant occupies more space and is therefore more spread out. But what does it mean for a covariance matrix to occupy more space? How does a spread out covariance matrix link to spread out data samples?
Using a 2-feature dataset as an example, it is easy to see that the larger the variance for each feature (1) the wider the data is spread out (2) the larger the determinant of the covariance matrix. But the effect of covariance is less obvious (to me). I plotted out some sample points in Python (code provided below), and it seems like the larger the covariance, the wider the distribution but the smaller the determinant of the covariance matrix. This suggests a larger determinant can get a tighter distribution, and this contradicts the explanation that we choose the subset of samples that gives the minimum determinant covariance in order to pick tighter data.
Here is the Python code I used to generate the example.
from scipy.stats import multivariate_normal
import numpy as np
import matplotlib.pyplot as plt
mu1 = 5
mu2 = 10
std1 = 5
std2 = 10
corr1 = 0.8
corr2 = 0.2
cov1 = std1 * std2 * corr1
cov2 = std1 * std2 * corr2
print('cov1', cov1)
print('cov2', cov2)
mean = np.array([mu1, mu2])
cov_mtx1 = np.array([[std1 ** 2, cov1], [cov1, std2 ** 2]])
cov_mtx2 = np.array([[std1 ** 2, cov2], [cov2, std2 ** 2]])
print('det1', np.linalg.det(cov_mtx1))
print('det2', np.linalg.det(cov_mtx2))
samples1 = multivariate_normal(mean=mean, cov=cov1).rvs(500)
samples2 = multivariate_normal(mean=mean, cov=cov2).rvs(500)
plt.scatter(samples1[:, 0], samples1[:, 1], color='blue')
plt.scatter(samples2[:, 0], samples2[:, 1], color='red')