【问题标题】:Fitting a multidimensional plane in R在 R 中拟合多维平面
【发布时间】:2018-02-13 02:40:31
【问题描述】:

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

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

【问题讨论】:

    标签: r geometry plane


    【解决方案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)
    

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      相关资源
      最近更新 更多