Эллипс, содержащий процент заданных точек в R - PullRequest
7 голосов
/ 11 июля 2011

Я рисую график гласных F1 / F2 ( пример здесь ). Каждая гласная имеет несколько точек / значений, и я хотел бы нарисовать эллипс вокруг точек, так что:

  • эллипс покрывает не менее 80% точек (т. Е. На рисунке выше «i» имеет несколько значений, но они содержатся в эллипсе).
  • позиционируется в направлении минимальных / максимальных значений.

Возможно, я все усложняю, но тригонометрия и математика для меня греческие. Ниже я попробовал.

Ellipsoidhull ()

Ellipsoidhull () находится в пакете пакета "cluster". Если я передаю функции матрицу с F1 и F2, кажется, что она вычисляет центр эллипса, но значения направления огромны. Например:

> olm
      ol.f1 ol.f2 # f1/f2 data
 [1,] 501.3 850.5
 [2,] 488.5 906.5
 [3,] 456.3 857.0
 [4,] 505.8 895.3
 [5,] 499.5 898.0
 [6,] 431.8 891.5
 [7,] 416.3 870.5
 [8,] 506.0 887.8
 [9,] 500.3 985.8
[10,] 513.5 955.3
[11,] 531.5 958.0
[12,] 483.0 847.3
[13,] 533.3 982.8
[14,] 480.8 881.8
[15,] 484.3 884.5

Если передано ellipsoidhull:

> ellipsoidhull(olm)
'ellipsoid' in 2 dimensions:
 center = ( 480.69 904.33 ); squared ave.radius d^2 =  2 
 and shape matrix =
       ol.f1  ol.f2
ol.f1 2115.5 1449.5
ol.f2 1449.5 3558.2
  hence, area  =  14636 

Полагаю, было бы нетрудно понять, как нарисовать эллипс, но «матрица формы» (максимальные / минимальные значения радиуса?) Слишком высока. Кстати, спасибо #R на Freednode за советы.

Исходный код от EMU-R

Затем я взглянул на код пакета EMU-R, R, который работает с EMU , который, помимо прочего, может рисовать F1 / F2 с эллипсоидами. Код, который, кажется, делает это здесь , но я не понимаю, как нарисован эллипс.

Любая помощь приветствуется.

1 Ответ

13 голосов
/ 12 июля 2011
require(car)
 x=rnorm(100)
 y=1+.3*x+.3*rnorm(100)
 dataEllipse(x,y, levels=0.80)

Итак, с вашими данными:

with(olm ,dataEllipse(ol.f1, ol.f2, levels=0.8) )

Другой пакет, mixtools, имеет аналогичные возможности, но использует альфа-уровень, а не 1-альфа:

 mu <- with(olm, c(mean(ol.f1), mean(ol.f2)) )
 sigma <- var(olm)  # returns a variance-covariance matrix.
 sigma
#          ol.f1     ol.f2
#ol.f1 1077.2098  865.9306
#ol.f2  865.9306 2090.2021

require(mixtools)
#Loading required package: mixtools
#Loading required package: boot
# And you get a warning that ellipse from car is masked.

ellipse(mu, sigma, alpha=0.2, npoints = 200, newplot = FALSE)

Чтоналожит предыдущий график на новую оценку (которая в данном случае немного уже. This is the comparison of the two methods

...