r - 平面 GLS 的曲面逼近
问题描述
有一个由二维数组形式的点定义的表面。即数组索引是x和y坐标,数组元素的值是对应点的z坐标值。
需要找到一个从最小二乘点出发最优的函数a·x+b·y+c=z,即计算对应的系数a、b、c。有没有办法在 R 中做到这一点?
谢谢!
解决方案
这是为 3D 空间中的点集合找到最佳拟合平面的问题。
有一个简单的方法来看待这个问题。将矩阵中的每个元素视为具有两个自变量(x 和 y)和一个因变量(z)的“观察”。
然后,您可以通过简单地运行线性模型通过最小二乘法找到您的系数:
lm(z ~ x_indices + y_indices)
实际上,我们可以使用它来构造一个简单的函数,该函数以矩阵为输入并给出 a、b 和 c 的值作为输出:
best_plane <- function(any_2d_matrix)
{
x_values <- rep(seq(ncol(any_2d_matrix)), each = nrow(any_2d_matrix))
y_values <- rep(seq(nrow(any_2d_matrix)), ncol(any_2d_matrix))
z <- as.vector(any_2d_matrix)
suppressWarnings(result <- summary(lm(z ~ x_indices + y_indices))$coef)
return(c(a = result[2, 1], b = result[3, 1], c = result[1, 1]))
}
为了在工作中看到这一点,让我们使用 a、b 和 c 的预设值构造一个矩阵:
a <- 3.2
b <- 0.5
c <- -4
x_indices <- rep(1:10, each = 10)
y_indices <- rep(1:10, 10)
my_matrix <- matrix(a * x_indices + b * y_indices + c, nrow = 10)
my_matrix
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,] -0.3 2.9 6.1 9.3 12.5 15.7 18.9 22.1 25.3 28.5
#> [2,] 0.2 3.4 6.6 9.8 13.0 16.2 19.4 22.6 25.8 29.0
#> [3,] 0.7 3.9 7.1 10.3 13.5 16.7 19.9 23.1 26.3 29.5
#> [4,] 1.2 4.4 7.6 10.8 14.0 17.2 20.4 23.6 26.8 30.0
#> [5,] 1.7 4.9 8.1 11.3 14.5 17.7 20.9 24.1 27.3 30.5
#> [6,] 2.2 5.4 8.6 11.8 15.0 18.2 21.4 24.6 27.8 31.0
#> [7,] 2.7 5.9 9.1 12.3 15.5 18.7 21.9 25.1 28.3 31.5
#> [8,] 3.2 6.4 9.6 12.8 16.0 19.2 22.4 25.6 28.8 32.0
#> [9,] 3.7 6.9 10.1 13.3 16.5 19.7 22.9 26.1 29.3 32.5
#> [10,] 4.2 7.4 10.6 13.8 17.0 20.2 23.4 26.6 29.8 33.0
现在让我们看看我们是否可以检索我们的系数:
best_plane(my_matrix)
#> a b c
#> 3.2 0.5 -4.0
如果我们添加大量随机噪声,我们仍然相当接近:
best_plane(my_matrix + rnorm(100))
#> a b c
#> 3.2486162 0.5054093 -4.3669805
推荐阅读
- swift - 需要建议从字典中删除数据
- android - 无法在 Android Studio 模拟器中安装 Android KitKat
- c# - 如何超过 System.Web.UI.WebControls.Unit(value) 的最大值
- android - How can I connect my send button in a popup to an email adress?
- reporting-services - SSRS Truncate text rather than soft return
- types - Roslyn: How to create generic method type constraints
- javascript - Selectable on Kendo Grid results in "Page not found"
- javascript - inject message via javascript and pseudo selector in PHP?
- php - 未加载 ActiveForm
- java - 无法在 WebStorm 中创建 Java 文件