рассчитать площадь 2-мерного эллипсоида в R - PullRequest
0 голосов
/ 24 сентября 2011

Итак, у меня есть преобразованные в лог данные измерений, сгруппированные в простую таблицу:

      x         y
1.158362492 1.322219295
1.1430148   1.267171728
1.11058971  1.252853031
1.120573931 1.260071388
1.149219113 1.278753601
1.123851641 1.276461804
1.096910013 1.222716471

Я знаю, что есть функции для построения доверительного эллипса для этих данных, но как рассчитать площадь сгенерированнойформа?

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 сентября 2011

Сначала вычислите эллипс, затем определите длины большой и вспомогательной осей, а затем рассчитайте площадь .

Вот безмозглое приближение.

Сначала ваши данные.

dat <- structure(list(x = c(1.158362492, 1.1430148, 1.11058971, 1.120573931, 
          1.149219113, 1.123851641, 1.096910013), y = c(1.322219295, 1.267171728, 
          1.252853031, 1.260071388, 1.278753601, 1.276461804, 1.222716471
          )), .Names = c("x", "y"), class = "data.frame", row.names = c(NA, 
          -7L))

Затем загрузите пакет car; dataEllipse может использоваться для вычисления эллипса с использованием двумерного нормального приближения к данным.

require(car)
dataEllipse(dat$x, dat$y, levels=0.5)

Вызов ellipse может дать точки вдоль эллипса, которые dataEllipse строит.

me <- apply(dat, 2, mean)
v <- var(dat)
rad <- sqrt(2*qf(0.5, 2, nrow(dat)-1))
z <- ellipse(me, v, rad, segments=1001)

Затем мы можем рассчитать расстояние от каждой точки эллипса до центра.

dist2center <- sqrt(rowSums((t(t(z)-me))^2))

Минимум и максимум этих расстояний - половина длины малой и большой осей. Таким образом, мы можем получить площадь следующим образом.

pi*min(dist2center)*max(dist2center)
0 голосов
/ 25 сентября 2011

Вы можете использовать пакет mclust, есть скрытая функция с именем mvn_plot, входные параметры mean и std. Вы можете попытаться прочитать его код и изменить его, чтобы получить длину каждой оси.

...