一个例子:
library(mgcv)
N=1000
x1 = seq(1:N)
x2 = log(x1)
x3 = sqrt(x1)
fac1 = ceiling(rnorm(N)*3)
fac2 = ceiling(runif(N)*3)
y = fac1*x2 + x1*x2 + x2 + x3*x2 + x2*(x1/x3)^(.8+fac2/10) + rnorm(N)*x2
mod = gam(y~
s(as.factor(fac1),bs="re",by=x2)
+ s(x2)
+ s(x1,by=x2)
+ s(x3,by=x2)
+ te(x1,x3,by=x2, by=as.factor(fac2))
)
最后一个张量不想让我交互它两次。第一个是与模型矩阵中的每一项相乘的连续变量,第二个是一个因子——它为每个因子水平生成不同的表面。
编辑:最后一个术语将相当于te(x1*x2,x1*x3,by=as.factor(fac2))
. 但是如果我发明了一个新变量x1x2 = x1*x2
,我就失去了调用的能力predict.gam
我该如何编程?我需要上诉SmoothCon
吗?如果是这样,如何实施的示例将非常有帮助。
谢谢!
(PS:我知道模型的异方差性质。功能,而不是错误。)