首页 文章

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

提问于
浏览
-1

我是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

    要制作等高线图,可以使用轮廓(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, ] )
    
  • 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)
    

相关问题