我试图在多变量回归的背景下,在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
的值,并将其存储在维度为m * n
的矩阵中。显然,在其他语言中,我只需迭代两个矩阵并手动填充y
中的值,但对我来说,这似乎非常丑陋且不适合R。所以经过一些研究,我偶然发现了函数mapply
,它将一个函数应用于两个矩阵。请注意,p
的输入要求在调用之前将1附加到参数后面。
mapply(function (x1, x2) { p(c(1, x1, x2)) }, M$x, M$y)
但是这个的输出是非常非常丑陋的,和我期望的相去甚远。有谁能帮帮我吗?令我惊讶的是,在3D中绘制平面似乎是如此困难,因为毕竟,我们需要唯一确定一个平面的是空间中的三个点。然而,所有的框架都要求我使用相当复杂的函数调用?
如果我的问题的解决方案微不足道,我很抱歉。我已经查看了相当多类似的帖子,但我仍然不能完全理解我需要做什么,因为手头的问题应该是如此简单。
发布于 2021-05-21 04:01:04
在rgl
中,这要简单得多:只需使用planes3d
。该函数使用参数化a x + b y + c z + d = 0
定义平面,因此,如果我们假设表示法中的x1
、f(x)
和x3
是rgl
表示法中的x
、y
和z
,则可以使用
planes3d(beta2, -1, beta3, beta1)
一个复杂的问题是平面是无限的,因此您必须指定要以某种其他方式绘制的部分。通常的方法是使用plot3d()
来建立一个坐标系,例如
plot3d(x1, y, x3, xlab = "x_1", ylab = "f(x)", zlab = "x_3")
https://stackoverflow.com/questions/67627004
复制相似问题