我在理解vegan软件包V2.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)))
}

具体来说,函数中最后一行发生了什么.这个函数根据协方差矩阵计算椭圆,但我不确定计算的椭圆类型.这会是一个错误椭圆吗?如果是这样,scale参数代表什么?

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函数中,它只是用来画圆.实际上,veganCovEllipse并不适合任何东西:它只是计算坐标来绘制你要求它绘制的东西,而你的输入定义了椭圆坐标的形状、大小、方向和位置.

在其他软件包中还有其他函数可以实现同样的功能:返回从输入数据绘制椭圆所需的点.例如,标准(推荐)包集群在非导出函数cluster:::ellipsoidPoints中进行类似的计算,其数学原理实际上相同,但方式完全不同.该函数也是非导出的,并且打算从用户函数cluster::predict.ellipsoid调用它.vegan实现与car包中的ellipse函数类似,其中这些计算嵌入到该函数中,不能与car::ellipse分开调用.

R相关问答推荐

R:对于没有数据的缓冲区,加权平均值为0

从具有随机模式的字符串中提取值

基于现有类创建类的打印方法(即,打印tibles更长时间)

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

咕噜中的元素列表:map

如何根据组大小应用条件过滤?

gt()从gt为相同内容的单元格 colored颜色 不同?

获取列中值更改的行号

根据模式将一列拆分为多列,并在R中进行拆分

为什么横向页面会导致officeverse中的页码/节头/页脚出现问题?

使用ggsankey调整Sankey图中单个 node 上的标签

标识R中多个列中缺少的唯一值

矩阵的堆叠条形图,条形图上有数字作为标签

将. xlsx内容显示为HTML表

哪一行和行和 Select 特定行,但是考虑到Nas

远离理论值的伽马密度曲线下面积的近似

使用同一行中的前一个值填充R矩阵中的缺失值

GOGPLATE geom_boxploy色彩疯狂

位置_道奇在geom_point图中不躲避

R,将组ID分配给另一个观测ID变量中的值的组合