难以理解 veganCovEllipse 协方差椭圆计算

Trouble understanding veganCovEllipse covariance ellipse calculation

我无法理解 vegan 包 v 2.5-7 中的 veganCovEllipse() 函数如何计算椭圆。

veganCovEllipse <- function (cov, center = c(0, 0), scale = 1, npoints = 100) 
{
  theta <- (0:npoints) * 2 * pi/npoints
  Circle <- cbind(cos(theta), sin(theta))
  t(center + scale * t(Circle %*% chol(cov)))
}

具体来说,函数的最后一行发生了什么。此函数基于协方差矩阵计算椭圆,但我不确定计算的是哪种类型的椭圆。这会是一个错误椭圆吗?如果是这样,比例参数代表什么? 这是从 PCA 分数创建椭圆的示例:

library(stats)

# fit pca on mtcars dataset
mtcars_pca <- prcomp(mtcars[,c(1:7,10,11)], center = TRUE,scale. = TRUE)

# dataframe of pc1 and pc2 scores
pcs <- data.frame(PC1 = mtcars_pca$x[,1],
                  PC2 = mtcars_pca$x[,2])

# calculate weighted covariance of PC1 and PC2
weight_cov <- cov.wt(cbind(pcs$PC1, pcs$PC2), wt=rep(1/length(pcs$PC1), length(pcs$PC1)))$cov

# calculate mean of PC1 and PC2, used as the center of the ellipse
center <- c(mean(pcs$PC1),
            mean(pcs$PC2))

# fit ellipse given weighted covariance and center
ellipse <- veganCovEllipse(weight_cov, center)

veganCovEllipse 不是导出函数。这意味着它不适合交互使用,但它是一个支持函数,只能从 vegan 中的其他函数调用。因此没有记录。然而,答案很简单:它可以根据输入计算 any 种椭圆。在 vegan 中,例如从 ordiellipse 调用该函数,它可以绘制标准误差椭圆、“置信度”椭圆(标准误差乘以从统计分布中选取的某个值)、标准差椭圆、标准差椭圆乘以类似的常量作为标准误差,或包含一组所有点的封闭椭圆,具体取决于函数的输入。在 showvarparts 函数中只是 re-used 画圆。实际上 veganCovEllipse 不适合任何东西:它只是计算坐标来绘制你要求它绘制的内容,你的输入定义了椭圆坐标的形状、大小、方向和位置。

其他包中的其他函数也执行相同的操作:return 您需要根据输入数据绘制椭圆的点。例如,标准(推荐)包集群在 non-exported 函数 cluster:::ellipsoidPoints 中使用有效相同的数学进行类似计算,但方式完全不同。此函数也是 non-exported,旨在从用户函数 cluster::predict.ellipsoid 中调用。 vegan 实现类似于 car 包中的 ellipse 函数,其中这些计算嵌入在该函数中,不能与 car::ellipse.

分开调用