Построение простой равнины в 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 кажется настолько трудным, потому что, в конце концов, все, что нам нужно для однозначного определения равнины, - это три точки в пространстве. И все же все фреймворки требуют от меня использования довольно сложных вызовов функций?

Прошу прощения, если решение моей проблемы тривиально. Я проверил довольно много похожих тем, но все еще не могу понять, что мне нужно сделать, поскольку проблема должна быть такой простой.

1 ответ

Все намного проще: просто используйте 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")
Другие вопросы по тегам