Елипса, съдържаща процент от дадените точки в R

Чертая диаграма на гласните F1/F2 (примерът е тук). Всяка гласна има няколко точки/стойности и бих искал да начертая елипса около точките, така че:

  • елипсата покрива най-малко 80% от точките (т.е. на снимката по-горе "i" има няколко стойности, но те се съдържат в елипсата).
  • е позициониран в посока на мин./макс. стойности.

Може да усложнявам нещата, но тригонометрията и математиката са гръцки за мен. По-долу е това, което опитах.

Ellipsoidhull()

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