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

问题描述:

有谁知道如何从R的car:::dataEllipse函数中提取中心坐标,主轴和副轴?我正在使用这个函数在一个XY散点图上叠加一个椭圆。如何从R的dataEllipse函数中提取轴

看起来像这样会有用的信息,但由于某些原因,它需要一些额外的工作。

基于源代码和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) 

enter image description here

它看起来稍微断点的中心,但我不知道为什么。我不知道你的意思是通过提取主轴和副轴。

我认为这是关闭的,因为dataEllipse返回标签的椭圆的结果,在本例中它起始于.1而不是中心椭圆,所以标记的中心点将是.1椭圆而不是中心椭圆。但这只是一个猜测。