R 使用样条线从gam中提取节点值

R 使用样条线从gam中提取节点值,r,extract,spline,gam,R,Extract,Spline,Gam,我在许多样本上运行GAM,并以如下所示的方式从结果中提取系数/t值/r平方。作为背景,我使用的是自然样条线,所以正则lm()在这里可以很好地工作,也许这就是为什么这个方法可以很好地工作 tvalsm93exf=ldply(fitsm93exf, function(x) as.data.frame(t(coef(summary(x))[,'t value', drop=FALSE]))) r2m93exf=ldply(fitsm93exf, function(x) as.data.frame(t

我在许多样本上运行GAM,并以如下所示的方式从结果中提取系数/t值/r平方。作为背景,我使用的是自然样条线,所以正则lm()在这里可以很好地工作,也许这就是为什么这个方法可以很好地工作

tvalsm93exf=ldply(fitsm93exf, function(x) as.data.frame(t(coef(summary(x))[,'t value', drop=FALSE]))) 
r2m93exf=ldply(fitsm93exf, function(x) as.data.frame(t(summary(x))[,'r.squared', drop=FALSE]))
我还想为每个样本集提取节点位置(df=4,没有截距,所以有三个内部节点和边界)。我已经尝试了上面命令的几种变体,但还不能索引到这个。下面是做这件事的常规方法,所以我试图把它放到上面的表单中。但是我不确定summary函数是否包含这些值,或者是否应该包含另一个结果

attr(terms(fits),"predvars") 

注意:这个问题与下面的问题相关,如果这有帮助,尽管它的解决方案没有帮助我解决问题:

在链接到的“帮助”页面的示例中调用
ns
函数时,节点是固定的,因此您可以在不进入模型对象的情况下提取节点。但是您没有提供GAM模型创建的代码,因此我们只能推测您可能做了什么。仅仅因为“样条曲线”一词在帮助页面和文档中都使用,并不意味着它们是相同的。您链接到的另一个页面中的模型使用
s
函数构造了两个“平滑”术语

  .... + s(time,bs="cr",k=200) + s(tmpd,bs="cr")
gam调用的结果有一个名为“smooth”的列表节点,第一个节点在使用str()查看时如下所示:


因此,在200个点中的每个点上评估平滑度,并使用多项式函数拟合该网格上的数据。如果您强制将结放置在三个内部位置,则它们将处于极端位置,并且在极端之间的位置间隔均匀。

谢谢您的帮助。我知道另一篇文章有一种不同形式的样条曲线,我只是想表明我知道这里发生过类似的讨论。不过,您是正确的,在这里设置dfs会强制模型形成相等的数据四分位数。所以我可以通过调用提取每个数据样本四分位数的东西来解决我的问题。
str(ap1$smooth)
List of 2
 $ :List of 22
  ..$ term          : chr "time"
  ..$ bs.dim        : num 200
  ..$ fixed         : logi FALSE
  ..$ dim           : int 1
  ..$ p.order       : logi NA
  ..$ by            : chr "NA"
  ..$ label         : chr "s(time)"
  ..$ xt            : NULL
  ..$ id            : NULL
  ..$ sp            : Named num -1
  .. ..- attr(*, "names")= chr "s(time)"
  ..$ S             :List of 1
  .. ..$ : num [1:199, 1:199] 5.6 -5.475 2.609 -0.577 0.275 ...
  ..$ rank          : num 198
  ..$ null.space.dim: num 1
  ..$ df            : num 199
  ..$ xp            : Named num [1:200] -2556 -2527 -2502 -2476 -2451 ...
  .. ..- attr(*, "names")= chr [1:200] "0.0000000%" "0.5025126%" "1.0050251%" "1.5075377%" ...
  ..$ F             : num [1:40000] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ plot.me       : logi TRUE
  ..$ side.constrain: logi TRUE
  ..$ S.scale       : num 9.56e-05
  ..$ vn            : chr "time"
  ..$ first.para    : num 5
  ..$ last.para     : num 203
  ..- attr(*, "class")= chr [1:2] "cr.smooth" "mgcv.smooth"
  ..- attr(*, "qrc")=List of 4
  .. ..$ qr   : num [1:200, 1] -0.0709 0.0817 0.0709 0.0688 0.0724 ...
  .. ..$ rank : int 1
  .. ..$ qraux: num 1.03
  .. ..$ pivot: int 1
  .. ..- attr(*, "class")= chr "qr"
  ..- attr(*, "nCons")= int 1