如何从R的dataEllipse函数中提取轴
答
看起来像这样会有用的信息,但由于某些原因,它需要一些额外的工作。
基于源代码和robust
参数的描述,该中心使用的是从统计包或者MASS:::cov.trob
或cov.wt
计算:
tmp <- dataEllipse(Duncan$income, Duncan$education, levels=0.1*1:9,
ellipse.label=0.1*1:9, lty=2, fill=TRUE, fill.alpha=0.1)
MASS:::cov.trob(tmp[[1]])$center
# x y
# 42.08207 52.91766
stats::cov.wt(tmp[[1]])$center
# x y
# 42.02314 52.81859
您还需要使用任何weights
如果你使用的在dataEllipse
。所以,你可以写一个简单的函数来得到每个椭圆所有中心:
get_centers <- function(de, robust = FALSE) {
if (robust)
l <- lapply(seq_along(de), function(x) MASS:::cov.trob(tmp[[x]])$center)
else l <- lapply(seq_along(de), function(x) stats::cov.wt(tmp[[x]])$center)
do.call('rbind', l)
}
(cent <- get_centers(tmp))
# x y
# [1,] 42.02314 52.81859
# [2,] 42.09468 52.93887
# [3,] 42.15538 53.04091
# [4,] 42.21279 53.13742
# [5,] 42.27070 53.23476
# [6,] 42.33239 53.33846
# [7,] 42.40228 53.45595
# [8,] 42.48882 53.60144
# [9,] 42.61681 53.81659
dataEllipse(Duncan$income, Duncan$education, levels=0.1*1:9,
ellipse.label=0.1*1:9, lty=2, fill=TRUE, fill.alpha=0.1)
points(cent[1, 1], cent[1, 2], pch = 4, cex = 2)
它看起来稍微断点的中心,但我不知道为什么。我不知道你的意思是通过提取主轴和副轴。
我认为这是关闭的,因为dataEllipse
返回标签的椭圆的结果,在本例中它起始于.1而不是中心椭圆,所以标记的中心点将是.1椭圆而不是中心椭圆。但这只是一个猜测。