我有 3 个参数:A、B 和 C,每个参数都有 20000 个数据。当我将它们放在 3D 图中时,它们形成一个点云,其中 A 在 X 轴,B 在 Y 轴,C 在 Z 轴。我想在 90% 协方差误差椭圆体中修复此点云,并分别确定 > 1000 个样本中的长度,即宽度、高度和拉伸度。宽度将在 X 轴上,高度将在 Y 轴上,拉伸将在 Z 轴上)。因此,对于每个样本:
1) 我用 var() 计算 协变矩阵
covMat <- var(cbind(A,B,C))
covMat
A B C
A 0.08269010 0.05330448 0.05329601
B 0.05330448 0.33033311 0.14017367
C 0.05329601 0.14017367 0.18732865
2) 我用 eigen() 计算 特征值
evals<-eigen(covMat)$values
evals
[1] 0.43162433 0.10861830 0.06010923
#我得到3个特征值,从大到小排序
3) 我确定 90% 协方差误差椭圆体的 长度
ell.len <- 2*sqrt(6.251*evals)
ell.len
[1] 2.971533 1.666728 1.325708
棘手的事情:由于特征值总是按递减顺序,我如何知道 ell.len 的哪个数字对应于每个长度(宽度、高度和拉伸),因为有时高度可能会更大比宽度和拉伸以及其他组合。我想知道这一点,因为我想在每个样本中确定椭圆体何时是长长(高度 > 宽度 > 拉伸)、扁圆(高度 > 宽度 > 拉伸)和其他可能的组合 (n = 1000)。
提前非常感谢您,希望我的问题很清楚。
eigen
功能并仅使用
evals <- .Internal(La_rg(covMat, TRUE))$values