在 R 中拟合多维平面

Fitting a multidimensional plane in R

我有多维(100 多个变量)数据,我希望其中的子集或多或少符合一个平面。 将平面与 R 中的该子集相匹配的最佳方法是什么?

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

主成分可以帮你解决这个问题。假设您的数据确实与平面匹配,前两个主成分应该能很好地描述该平面。

你没有提供任何样本数据,所以我将用一些人工数据来说明。我的数据是十维的,但所有点都靠近一个平面(其他八个方向有一些误差)。

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

是的,数据基本上是二维的。剩下的就是获得前两个主成分。它们存储在从 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

我们要找的平面就是这两个向量所跨越的平面。