我有多维(100+变量)数据,我期望的子集,或多或少,符合平面。 在R中将飞机拟合到该子集的最佳方法是什么?
我想使用这个平面来计算其他一些点的距离,并绘制它的一些尺寸。
答案 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)
}
是的,数据看起来基本上是二维的。剩下的就是获得前两个主要组件。它们存储在从## Principal Components Analysis
PCA = prcomp(MyData)
plot(PCA)
返回的结构中。
prcomp
我们正在寻找的平面是这两个向量所跨越的平面。