我正在尝试运行GAM模型,其中X和Y之间的交互是使用高斯过程进行建模的。在s()
中使用默认的平滑(mgcv
)时,下面的代码可以正常工作,但是据我了解,{{1} }产品专门解决各向异性相互作用。但是,当我使用te()
时,似乎无法将所需参数传递给模型。下面的示例。
te
答案 0 :(得分:0)
我意识到必须在d
函数内部显式设置te()
后解决了这个问题。下面的代码有效。
library(mgcv)
set.seed(540)
df <- gamSim(2, n = 300, scale = 0.15)[[1]]
df$x <- scales::rescale(df$x, to = c(-180,180))
df$y <- scales::rescale(df$y, to = c(-90,90))
head(df)
m1 <- gam(z ~ s(x, y, bs = "gp", m = c(2, 5, 2), k = 30), data = df, method = "ML")
mp <- list(c(2, 5, 2))
m2 <- gam(z ~ te(x, y, bs = "gp", m = mp, d = 2, k = 30), data = df, method = "ML")
答案 1 :(得分:0)
您想要的东西似乎还不存在(还好吗?),即高斯过程(GP)平滑本质上是各向同性的。您可以从MGCV包中的GP平滑可用的可能自相关函数中看到它们是各向同性的(请参见Wood 2017中的第242页,或在加载库后在R中简单键入“?gp.smooth”):它们均取决于< em> only 表示数据点之间的距离d。如果存在各向异性GP平滑之类的东西,则可以为每个轴的自相关比例定义不同的值,这似乎并非如此。
如果您的x和y数据具有不同的单位,而您确实需要GP平滑,那么据我所知,您唯一可以做的就是将它们缩放为单位(“就像通常在LOESS平滑中所做的那样,参见第227页,Wood 2017)。
Wood 2017:“广义加法模型。R。第二版简介”。