[英]I have fitted an equation using GAMs (generalized additive models) in R using model1 <- mgcv::gam( x1..xn). How do i get the equation format?
library(mgcv)
model1 <- gam(x1,x2.....,xn)
我可以获得带有预测变量的部分依赖图,也可以使用预测 function 进行 model 预测。 但是我想在研究期刊上发表 model,因此我需要将方程式格式的 model 发表在论文中,以便阅读该文章的人可以使用 model 来预测某些元素,因为 R 文件无法共享与杂志。 获得 GAM model 等式的任何帮助,如 f(x1,x2..xn) = intercept+ coef1 * s(x1)+...+ coefn * s(xn)。 样条 function 的精确数学 function 是什么?
拟合非线性 model GAM 显示拟合良好,但无法为我提供方程式。
这些模型的全部要点是,我们通常没有拟合 function 的数学方程。当然,在某种程度上我们确实有一个数学方程,但它将根据平滑协变量的基础展开来写(秒)。
我们没有的是形式的方程
$$ \hat{y}_i = \alpha + \beta_1 s_1(x_{1i}) + \beta_2 s_2(x_{2i}) + \cdots $$因为那甚至不是你安装的 model - 你是不将平滑的 function ( $s_j()$ ) 乘以 model 参数$\beta_j$ 。 您通常适合 GAM 的是:
$$ \hat{y}_i = \alpha + \sum_{k=1}^{K_1} { \beta_{1k} b_1(x_{1i}) } + \sum_{k=1}^{K_2} { \beta_{2k} b_2(x_{2i}) } + \cdots $$
其中$b_j$是特定类型的基础 function(低秩薄板回归样条、三次回归样条、b 样条...)及其相关系数( $\beta_{jk}$ ),其中将有$ K_j$这样的基函数和系数对每平滑 function $s_j()$ 。
您显示的伪代码( gam(x1, x2, ..., xn)
)作为装有gam()
的有效 GAM model 根本没有任何意义:如果应该采用以下形式
gam(y ~ s(x1) + s(x2) + ... + s(xn),
data = foo, method = "REML", family = fam, ...)
所以甚至不清楚你装的是什么形式的GAM。
共享您的 model 的选项有:
分享原始数据和用于匹配 model 的代码,以及您使用的软件的任何特定版本信息。
通过saveRDS()
将拟合的 model 序列化到磁盘作为 RDS object 加上代码来展示如何使用它来预测(这实际上不是一件简单的事情,因为因子需要具有正确的水平等,如果你有更复杂的模型)。
您可以预先计算 model 的$L_p$矩阵或线性预测矩阵。假设您有一个简单的 model,其形式为:
m <- gam(y ~ s(x1), data = foo, ...)
然后您将在精细网格上为x1
生成新值(您可能希望使用 model 的实际和科学目的所需的精细网格,当然不会比x1
的精度更精细),并创建$L_p$矩阵通过predict()
方法:
newd <- data.frame(x1 = seq(min(x1), max(x1), by = 0.1)) # for example Xp <- predict(m, newdata = newd, type = "lpmatrix")
您还需要提取 model 系数
betas <- coef(m)
并通过saveRDS()
将所有这些( newd
、 Xp
和betas
)保存到磁盘。
然后,新用户可以将其数据中的每个值分配给newd
中的一行(到newd
中最接近的值),从Xp
中提取相同的行,然后通过生成预测/拟合值
fit <- Xp[want, ] %*% betas
这将在链接尺度上产生预测值,如果需要,您可以通过应用相关链接 function 的逆函数将其转换为响应尺度。
您也可能可以使用预测 Model 标记语言 (PMML) 来做一些事情,但我不熟悉 R 中的此功能或特别是 {mgcv} GAM。
这些方法中哪一种最有效将取决于您论文的读者的预期用途,选项 1 是最广泛有用的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.