Создание нескольких эллипсоидов в rgl для отображения стандартного отклонения в значениях позиции

У меня есть набор данных, который содержит 13 камер, каждое местоположение камеры было реконструировано 5 раз. Я сгруппировал измерения в среднее и стандартное отклонение для каждой из 6 переменных, которые относятся к положению камеры [X, Y, Z, Омега, Фи, Каппа]. Я хотел бы нанести на график положения камер на основе средних значений XYZ, но затем создать эллипсоид для каждого местоположения на основе значений стандартного отклонения для каждого из значений XYZ. (например, панель ошибок, которая также была бы приемлемой, но моя первая цель - создать цветные эллипсоиды, показывающие направления наибольшей дисперсии или ошибки... для этого примера я использую значение стандартного отклонения.)

я использую rgl построить среднее положение каждой камеры, но я не уверен, как изменить форму каждой нанесенной точки на значения из другого вектора или столбца.

Данные о местоположении агрегируются в средние значения здесь

pos.mean

PhotoID           X           Y        Z
DSC_7120 -269.697307 -359.608029 2390.520
DSC_7121 -323.537075 -312.080524 2388.374
DSC_7122 -381.084880 -259.807930 2386.175
DSC_7123 -434.500687 -212.438305 2384.080
DSC_7707 -297.275547  -12.954589 2352.626
DSC_7708 -238.105775  -61.327624 2353.830
DSC_7709 -178.910977 -110.464992 2354.912
DSC_7710 -124.471751 -155.745775 2356.300
DSC_7711  -65.107734 -205.164167 2358.239
DSC_7794   -2.828331    9.167357 2308.687
DSC_7795  -61.841640   56.621020 2307.068
DSC_7796 -118.768896  104.237722 2306.107
DSC_7797 -176.829418  150.560971 2304.887

и значения стандартного отклонения:

pos.sd

PhotoID         X         Y            Z
DSC_7120 0.1507733 0.3651178 0.0018517456
DSC_7121 0.1508845 0.3633876 0.0005815413
DSC_7122 0.1512489 0.3671259 0.0021316858
DSC_7123 0.1498382 0.3667440 0.0050629647
DSC_7707 0.1495099 0.3600409 0.0016483624
DSC_7708 0.1470677 0.3583582 0.0014911045
DSC_7709 0.1458569 0.3596208 0.0021194229
DSC_7710 0.1396953 0.3604535 0.0033336396
DSC_7711 0.1414401 0.3620422 0.0047287867
DSC_7794 0.1442061 0.3691425 0.0056096078
DSC_7795 0.1516369 0.3688717 0.0016928413
DSC_7796 0.1565440 0.3672701 0.0038089509
DSC_7797 0.1547617 0.3726132 0.0079183205

Основной 3D-сюжет в настоящее время можно рассматривать как таковой

library(rgl)
with(smry.mean, 
     plot3d(X, Y, Z,
            type="s"))

Есть ли способ превратить точки в цветные эллипсоиды, где размеры и цвет эллипсоидов построены из значений стандартного отклонения для каждой точки?

Спасибо

1 ответ

Вы можете сделать это с помощью ellipse3d функции, но вам придется рисовать эллипсоиды по одному. Например,

for (id in pos.mean$PhotoID) 
  ellipse3d(diag(pos.sd[id, c("X", "Y", "Z")])^2, centre = pos.mean[id, c("X", "Y", "Z")], col = "red", t = 10)

Вы хотите поиграть с этим t параметр для установки масштаба: ваши значения SD довольно малы по сравнению с диапазоном средних значений, поэтому t = 10 может просто дать невидимые маленькие эллипсоиды. Если так, попробуйте большее значение.

Еще одна вещь: если вы знаете только значения SD, вы не получите "направления наибольшей дисперсии или ошибки". Вероятно, для этого нужна полная ковариационная матрица, а не диагональная, которую я построил.

Другие вопросы по тегам