Установка многомерной плоскости в R

У меня есть многомерные (более 100 переменных) данные, подмножество которых я ожидаю более или менее соответствовать плоскости. Как лучше всего подогнать плоскость под это подмножество в R?

Я хотел бы использовать плоскость для расчета расстояния до некоторых других точек и построения некоторых ее размеров.


person vuzun    schedule 05.05.2017    source источник


Ответы (1)


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

Вы не предоставляете никаких образцов данных, поэтому я проиллюстрирую некоторые искусственные данные. Мои данные десятимерны, но все точки лежат близко к плоскости (с некоторой погрешностью в остальных восьми направлениях).

## Sample data
set.seed(2018)
NPts = 1000
x = runif(NPts)
y = runif(NPts)

cx = rnorm(1)
cy = rnorm(1)
V1 = cx*x + cy*y + rnorm(NPts, 0, 0.1)

MyData = data.frame(V1)
for(i in 2:10) {
    cx=rnorm(1)
    cy= rnorm(1)
    name = paste0("V", i)   
    MyData[,name] = cx*x + cy*y + rnorm(NPts, 0, 0.1)
}

Поскольку все переменные представляют собой линейные комбинации x и y (плюс небольшая ошибка), данные являются только двумерными и находятся вблизи плоскости x-y. Здесь я рассматриваю x и y как скрытые переменные. Они не появляются в данных, но управляют поведением всех остальных переменных.

## Principal Components Analysis
PCA = prcomp(MyData)
plot(PCA)

Сюжет PCA

Да, данные выглядят в основном двухмерными. Остается только получить первые две главные компоненты. Они хранятся в структуре, возвращенной из prcomp.

PCA$rotation[,1:2]
            PC1          PC2
V1   0.42752681 -0.204894748
V2  -0.64546573 -0.056503044
V3   0.04606707 -0.009614603
V4   0.01956126 -0.539070667
V5   0.15987617  0.600122935
V6  -0.06255399  0.054053476
V7   0.26497132  0.388920891
V8   0.21645814 -0.366709584
V9   0.49363625 -0.116954131
V10  0.08874645  0.040656622

Плоскость, которую мы ищем, — это плоскость, натянутая на эти два вектора.

person G5W    schedule 12.02.2018