如何从R的dataEllipse函数中提取轴

时间:2014-12-12 23:45:30

标签: r

有谁知道如何从R car:::dataEllipse函数中提取中心坐标,长轴和短轴?我使用此功能在XY散点图上叠加椭圆。

1 个答案:

答案 0 :(得分:2)

这似乎是有用的信息,但由于某种原因,它需要一些额外的工作。

根据源代码和robust参数的说明,使用统计资料包中的MASS:::cov.trobcov.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

enter image description here

看起来稍微偏离中心点,但我不明白为什么。而且我不确定你提取主轴和副轴的意思。

我认为它已关闭,因为{{1}}返回标记椭圆的结果,在此示例中,它从.1开始而不是中心椭圆,因此标记的中心点将是.1椭圆而不是中心一个。但这只是猜测。