在 3D R 中创建平滑线
Creating a Smooth Line in 3D R
我有一组 3 维点,如下面的示例数据。我想从中创建一条平滑的线。那里有关于在 3D 中平滑 2D 表面的信息 space 但我如何在 3D 中平滑 1D 线 space?
Z = seq(0, 1, 0.01)
X = rnorm(length(Z), mean = 0, sd = 0.1)
Y = 2 * Z ^ 2 + rnorm(length(Z), mean = 0, sd = 0.1)
data = data.frame(X = X, Y = Y, Z= Z)
这是一个多元回归的例子。如果你正好知道和Z
的关系应该是二次的,你可以做
fit <- lm(cbind(X, Y) ~ poly(Z, 2))
但我假设您不知道这一点,并且想要某种总体上更平滑的东西。我不认为 loess
、lowess
或 gam
处理多元回归,但您可以在 lm
:
中使用自然样条
library(splines)
fit <- lm(cbind(X, Y) ~ ns(Z, df = 4))
predict(fit)
将在两列矩阵中返回拟合值。
要绘制结果,您可以使用 rgl
:
library(rgl)
plot3d(X, Y, Z, col = "red")
lines3d(cbind(predict(fit), Z))
我有一组 3 维点,如下面的示例数据。我想从中创建一条平滑的线。那里有关于在 3D 中平滑 2D 表面的信息 space 但我如何在 3D 中平滑 1D 线 space?
Z = seq(0, 1, 0.01)
X = rnorm(length(Z), mean = 0, sd = 0.1)
Y = 2 * Z ^ 2 + rnorm(length(Z), mean = 0, sd = 0.1)
data = data.frame(X = X, Y = Y, Z= Z)
这是一个多元回归的例子。如果你正好知道和Z
的关系应该是二次的,你可以做
fit <- lm(cbind(X, Y) ~ poly(Z, 2))
但我假设您不知道这一点,并且想要某种总体上更平滑的东西。我不认为 loess
、lowess
或 gam
处理多元回归,但您可以在 lm
:
library(splines)
fit <- lm(cbind(X, Y) ~ ns(Z, df = 4))
predict(fit)
将在两列矩阵中返回拟合值。
要绘制结果,您可以使用 rgl
:
library(rgl)
plot3d(X, Y, Z, col = "red")
lines3d(cbind(predict(fit), Z))