Getting the parameters of a data ellipse produced by the car package in R -
i using dataellipse function car package in r elliptic confidence region data. example:
datapoints_x = c(1,3,5,7,8,6,5,4,9) datapoints_y = c(3,6,8,9,5,8,7,4,8) ellipse = dataellipse(cbind(datapoints_x, datapoints_y), levels=0.95) the output 2 vectors x , y corresponding points define ellipse:
head(ellipse) # x y # [1,] 12.79906 10.27685 # [2,] 12.74248 10.84304 # [3,] 12.57358 11.34255 # [4,] 12.29492 11.76781 # [5,] 11.91073 12.11238 # [6,] 11.42684 12.37102 but rather interested in length of ellipsis axes , center. there way without carrying out pca myself?
from ?dataellipse read these functions plotting functions, not functions designed give fitted ellipse. reading source code of dataellipse, becomes clear function used fit ellipse cov.wt stats package. function should able give center , covariance matrix used specify ellipse location , shape:
set.seed(144) x <- rnorm(1000) y <- 3*x + rnorm(1000) (ell.info <- cov.wt(cbind(x, y))) # $cov # x y # x 1.022985 3.142274 # y 3.142274 10.705215 # # $center # x y # -0.09479274 -0.23889445 # # $n.obs # [1] 1000 the center of ellipse readily available ell.info$center. directions of axes accessible eigenvectors of covariance matrix (columns of eigen.info$vectors below).
(eigen.info <- eigen(ell.info$cov)) # $values # [1] 11.63560593 0.09259443 # # $vectors # [,1] [,2] # [1,] 0.2839051 -0.9588524 # [2,] 0.9588524 0.2839051 finally need know length of axes (i'll give length center ellipse, aka radius on axis):
(lengths <- sqrt(eigen.info$values * 2 * qf(.95, 2, length(x)-1))) # [1] 8.3620448 0.7459512 now can 4 endpoints of axes of ellipse:
ell.info$center + lengths[1] * eigen.info$vectors[,1] # x y # 2.279234 7.779072 ell.info$center - lengths[1] * eigen.info$vectors[,1] # x y # -2.468820 -8.256861 ell.info$center + lengths[2] * eigen.info$vectors[,2] # x y # -0.81004983 -0.02711513 ell.info$center - lengths[2] * eigen.info$vectors[,2] # x y # 0.6204643 -0.4506738 we can confirm these accurate using dataellipse:
library(car) dataellipse(x, y, levels=0.95) 
Comments
Post a Comment