Эллипс, содержащий процент заданных точек в R

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

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

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

Эллипсоидкорпус()

Ellipsoidhull() находится в пакете пакет «кластер». Если я передам функции матрицу с 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 с помощью эллипсоидов. Код, который, похоже, это делает, находится здесь, но я не понимаю, как рисуется эллипс .

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


person marw    schedule 11.07.2011    source источник


Ответы (1)


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)

Это наложило бы более ранний график на новую оценку (которая в данном случае немного уже.Это сравнение двух  методы

person IRTFM    schedule 11.07.2011
comment
+1 Спасибо за это. Я потратил немало времени на написание собственной функции именно для этого... Я с интересом изучу этот код. - person Andrie; 12.07.2011
comment
Должна быть довольно распространенная задача. Я не думаю, что это исчерпывает список функций в пакетах CRAN, которые выполняют эту услугу. Почти уверен, что я нашел других в прошлом, когда работал с плотностью. - person IRTFM; 12.07.2011
comment
Спасибо за такой подробный и иллюстрированный ответ! Я с нетерпением жду реализации этого как можно скорее. - person marw; 12.07.2011
comment
Можете ли вы извлечь точки внутри эллипса в новый вектор? - person M. Beausoleil; 10.07.2018
comment
Наверняка это отдельный вопрос. Вы должны написать пример, показать, какое исследование вы провели, и опубликовать его, если его еще нет. - person IRTFM; 10.07.2018
comment
Я нашел ответ здесь: stackoverflow.com/questions/18154434/ Спасибо за помощь! (будет полезно для дальнейшего использования: D) - person M. Beausoleil; 10.07.2018