我是R的初学者,所以这可能是一个简单的问题。
我现在正试图使用薄板回归样条拟合一个四维点。一个变量是目标变量,三个变量是解释变量。
我创建了一个具有三阶交互的模型,并将数据拟合到此。
library(mgcv)
dat <- read.csv('../data//data.csv')
model <- gam(Y ~ s(x1, x2, x3), data=dat)
通过给出x3,我想要想象一个样条曲线或估计等高线图的三维图,但我该怎么办?
如果你能回答,那将非常有帮助。 感谢。
这是样本数据。
n = 100
x1 <- runif(n, min = 0, max = 100)
x2 <- runif(n, min = 0, max = 100)
x3 <- runif(n, min = 0, max = 100)
Y = numeric(n)
for(i in 1:n){
Y[i] <- x1[i]**0.5*x2[i]**2*x3[i]/10000
}
dat = data.frame(Y=Y, x1=x1, x2=x2, x3=x3)
我使用此数据进行薄平面回归样条。
model <- gam(Y ~ s(x1, x2, x3, k= 50), data=dat)
然后,我想得到一个三维薄平面回归样条拟合曲线,或者当x3 = 25时,通过回归样条估计的等值线。
答案 0 :(得分:0)
要制作等高线图,可以使用轮廓(x,y,z,...)。 z是你的数据矩阵(在你的情况下,Y [x1,x2,],x和y是从0到1的索引向量,长度为nrow(Y [x1,x2,])和ncol(Y [x1,x2] ,])。
您应该可以使用它类似于:
contour( x = seq(0, 1, length.out = length(x1)), y = seq(0, 1, length.out = length(x2)), z = Y[x1,x2, ] )
答案 1 :(得分:0)
我找到了一个参考d0d0答案的解决方案。
n=100
const=25
x = y = seq(0, n, 1)
f = function(x,y){
dtmp <- data.frame(x1=(x), x2=(y), x3=(const))
pred <- predict.gam(model, dtmp)
}
z = outer(x, y, f)
contour(x,y,z)