在 3D 中绘制一个简单的平面
Plotting a simple plane in 3D
我正在尝试在多元回归的上下文中绘制 3D 环境中的平面。我有一个形式为 f(x)=beta_1 + beta_2*x_1 + beta_3 * x_3.
的线性回归多项式
显然这个公式描述了 R^3 中的一个平面。我想绘制这个,但我看不出如何有效地做到这一点。显然,我需要做的是创建一种网格,在其上计算回归多项式的值。
到目前为止,这是我拥有的:
beta <- c(1, 1, 1) # Placeholder. This is the output of my regression analysis
p <- function(k) { t(beta) %*% k }
n <- 20
m <- 50
x <- seq(from=5, to=13, length.out=n)
z <- seq(from=20, to=50, length.out=m)
M <- mesh(x, z)
现在据我了解,无论我使用的是 plot3D 还是 rgl,我都需要在这些网格元素上计算 p
的值并将其存储在维度为 [=13= 的矩阵中].显然,在其他语言中,我只是遍历两个矩阵并手动填充 y
中的值,但这对我来说似乎非常丑陋且不适合 R。因此,经过一些研究,我偶然发现了函数 mapply
,它在两个矩阵上应用了一个函数。请注意,p
的输入要求在调用之前将 1 附加到参数。
mapply(function (x1, x2) { p(c(1, x1, x2)) }, M$x, M$y)
但是这个输出非常、非常、非常丑陋,与我的预期相去甚远。有人可以帮帮我吗?令我惊讶的是,在 3D 中绘制一个平面似乎如此困难,因为毕竟我们唯一确定一个平面所需的只是 space 中的三个点。然而所有的框架都要求我使用相当复杂的函数调用?
如果我的问题的解决方案微不足道,我深表歉意。我已经检查了很多类似的线程,但我仍然无法完全理解我需要做什么,因为手头的问题应该很简单。
在 rgl
中要简单得多:只需使用 planes3d
。该函数使用参数化 a x + b y + c z + d = 0
定义平面,因此如果我们假设 x1
、f(x)
和 x3
在您的符号中是 x
、y
和z
在 rgl
符号中,您将使用
绘制平面
planes3d(beta2, -1, beta3, beta1)
一个复杂的问题是平面是无限的,因此您必须指定要以其他方式绘制的部分。通常的做法是使用plot3d()
来建立坐标系,例如
plot3d(x1, y, x3, xlab = "x_1", ylab = "f(x)", zlab = "x_3")
我正在尝试在多元回归的上下文中绘制 3D 环境中的平面。我有一个形式为 f(x)=beta_1 + beta_2*x_1 + beta_3 * x_3.
的线性回归多项式显然这个公式描述了 R^3 中的一个平面。我想绘制这个,但我看不出如何有效地做到这一点。显然,我需要做的是创建一种网格,在其上计算回归多项式的值。
到目前为止,这是我拥有的:
beta <- c(1, 1, 1) # Placeholder. This is the output of my regression analysis
p <- function(k) { t(beta) %*% k }
n <- 20
m <- 50
x <- seq(from=5, to=13, length.out=n)
z <- seq(from=20, to=50, length.out=m)
M <- mesh(x, z)
现在据我了解,无论我使用的是 plot3D 还是 rgl,我都需要在这些网格元素上计算 p
的值并将其存储在维度为 [=13= 的矩阵中].显然,在其他语言中,我只是遍历两个矩阵并手动填充 y
中的值,但这对我来说似乎非常丑陋且不适合 R。因此,经过一些研究,我偶然发现了函数 mapply
,它在两个矩阵上应用了一个函数。请注意,p
的输入要求在调用之前将 1 附加到参数。
mapply(function (x1, x2) { p(c(1, x1, x2)) }, M$x, M$y)
但是这个输出非常、非常、非常丑陋,与我的预期相去甚远。有人可以帮帮我吗?令我惊讶的是,在 3D 中绘制一个平面似乎如此困难,因为毕竟我们唯一确定一个平面所需的只是 space 中的三个点。然而所有的框架都要求我使用相当复杂的函数调用?
如果我的问题的解决方案微不足道,我深表歉意。我已经检查了很多类似的线程,但我仍然无法完全理解我需要做什么,因为手头的问题应该很简单。
在 rgl
中要简单得多:只需使用 planes3d
。该函数使用参数化 a x + b y + c z + d = 0
定义平面,因此如果我们假设 x1
、f(x)
和 x3
在您的符号中是 x
、y
和z
在 rgl
符号中,您将使用
planes3d(beta2, -1, beta3, beta1)
一个复杂的问题是平面是无限的,因此您必须指定要以其他方式绘制的部分。通常的做法是使用plot3d()
来建立坐标系,例如
plot3d(x1, y, x3, xlab = "x_1", ylab = "f(x)", zlab = "x_3")