平面GLS的曲面近似值。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平面GLS的曲面近似值。相关的知识,希望对你有一定的参考价值。
有一个由点以二维数组的形式定义的曲面。即数组的指数为x、y坐标,数组元素的值为对应点的z坐标值。
需要从最小二乘点出发,找到一个最优的函数a - x + b - y + c = z,也就是计算出相应的系数a、b、c,在R中有没有办法做到?
谢谢!请问有什么方法?
答案
这就是寻找三维空间中点的集合的最佳拟合平面的问题。
有一个简单的方法来看待这个问题。将矩阵中的每个元素视为一个 "观测值",有两个独立变量(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
以上是关于平面GLS的曲面近似值。的主要内容,如果未能解决你的问题,请参考以下文章