有谁知道如何从R car:::dataEllipse
函数中提取中心坐标,长轴和短轴?我使用此功能在XY散点图上叠加椭圆。
答案 0 :(得分:2)
这似乎是有用的信息,但由于某种原因,它需要一些额外的工作。
根据源代码和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开始而不是中心椭圆,因此标记的中心点将是.1椭圆而不是中心一个。但这只是猜测。