我正试图从GAM模型中提取节点的位置,以便将我的预测变量划分为另一个模型的类别。我的数据包含一个二进制响应变量(已使用)和一个连续预测器(打开)。
data <- data.frame(Used = rep(c(1,0,0,0),1250),
Open = round(runif(5000,0,50), 0))
我符合GAM的要求:
mod <- gam(Used ~ s(Open), binomial, data = data)
我可以在predict.gam
函数中使用type=c("response", "lpmatrix")
来获得预测值和模型矩阵等,但我很难提取系数变化的节点位置。任何建议都非常感谢!
out<-as.data.frame(predict.gam(model1, newdata = newdat, type = "response"))
如果可能的话,我也有兴趣做一些事情,比如:
http://www.fromthebottomoftheheap.net/2014/05/15/identifying-periods-of-change-with-gams/
其中识别了样条曲线的统计增加/减少,然而,我在这一点上没有使用GAMM,因此,在识别从他的GAMM模型中提取的GAM中的相似模型特征时遇到了问题。第二件事更多的是出于好奇。
评论:
- 你应该在提问时用
R
和mgcv
标记你的问题 - 首先,我想将您的问题标记为与mgcv重复:如何在自适应平滑中提取P样条曲线的结、基、系数和预测?昨天提出,我在那里的回答应该很有用。但后来我意识到其实有一些不同。因此,我将在这里做一些简短的解释
答案:
在您的gam
呼叫中:
mod <- gam(Used ~ s(Open), binomial, data = data)
您没有在s()
中指定bs
参数,因此将使用默认基础:bs = 'tp'
。
'tp'
,薄板回归样条曲线的缩写,不是一个具有传统节点的光滑类。薄板样条曲线确实有节点:它将节点精确地放置在数据点上。例如,如果具有n
唯一的Open
值,则它具有n
节。在单变量的情况下,这只是一个平滑样条曲线。
然而,薄板回归样条是基于截断特征分解的全薄板样条的低阶近似。这是一个类似于主成分分析(PCA)的想法。它不使用原始的n
数薄板样条基,而是使用第一个k
主分量。这将计算复杂度从O(n^3)
降低到O(nk^2)
,同时确保最佳秩k近似。
因此,对于拟合的薄板回归样条曲线,实际上没有可以提取的结。
由于您使用的是单变量样条曲线,因此实际上不需要使用'tp'
。只需使用bs = 'cr'
,cubicr分离样条。在2003年tp
可用之前,这曾经是mgcv
中的默认值。cr
有结,您可以提取结,如我在回答中所示。不要被这个问题中的bs = 'ad'
弄糊涂:P样条、B样条、自然三次样条都是基于节点的样条。