我想想象一下用薄板回归样条拟合的三阶相互作用

时间:2018-01-29 08:14:52

标签: r spline

我是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时,通过回归样条估计的等值线。

2 个答案:

答案 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)