在R中拟合多维平面

时间:2017-05-05 13:36:17

标签: r geometry plane

我有多维(100+变量)数据,我期望的子集,或多或少,符合平面。 在R中将飞机拟合到该子集的最佳方法是什么?

我想使用这个平面来计算其他一些点的距离,并绘制它的一些尺寸。

1 个答案:

答案 0 :(得分:1)

主要组件可以为您解决此问题。假设您的数据确实与平面匹配,前两个主要组件应该很好地描述该平面。

您不提供任何样本数据,因此我将使用一些人工数据进行说明。我的数据是十维的,但所有点都靠近一个平面(在其他八个方向上有一些误差)。

<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<script src="//unpkg.com/vuex@latest/dist/vuex.js"></script>
<div id="app">
  Anything? {{authenticated}}
</div>

由于所有变量都是x和y的线性组合(加上一个小误差),因此数据只是二维的,并且靠近x-y平面。在这里,我将x和y视为潜在变量。它们不会出现在数据中,但会驱动所有其他变量的行为。

## 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)
}

PCA Plot

是的,数据看起来基本上是二维的。剩下的就是获得前两个主要组件。它们存储在从## Principal Components Analysis PCA = prcomp(MyData) plot(PCA) 返回的结构中。

prcomp

我们正在寻找的平面是这两个向量所跨越的平面。