如何从mgcv :: gam.check中保存edf并跳过这些图

时间:2017-02-04 16:40:41

标签: r gam mgcv

以下脚本中的gam.check将诊断信息输出到控制台(以及图表):

library(mgcv)
set.seed(0)
dat <- gamSim(1,n=200)
b<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)
gam.check(b,pch=19,cex=.3)

上面代码中gam.check语句对控制台的输出是:

Method: GCV   Optimizer: magic
Smoothing parameter selection converged after 8 iterations.
The RMS GCV score gradient at convergence was 0.00001072609 .
The Hessian was positive definite.
Model rank =  37 / 37 

Basis dimension (k) checking results. Low p-value (k-index<1) may
indicate that k is too low, especially if edf is close to k'.

         k'   edf k-index p-value
s(x0) 9.000 2.318   0.996    0.44
s(x1) 9.000 2.306   0.969    0.32
s(x2) 9.000 7.655   0.961    0.24
s(x3) 9.000 1.233   1.037    0.66

我想将诊断的输出保存到列表(或只是表格到数据框)不输出任何图形。

事情,我考虑过:

  1. 以下代码返回一个null对象。

    X&LT; -gam.check(B,PCH = 19,CEX = 0.3)

  2. 查看了gam.check的代码,似乎我想要“获取”

    的结果

    kchck&lt; - k.check(b,subsample = k.sample,n.rep = k.rep)

    不幸的是,直接运行上面的代码行会产生'找不到函数'k.check“。

  3. 我可以使用接收器将输出保存到控制台,但这不会关闭绘图。

  4. Gavin Simpson为提取情节here提供了一个很好的答案,但我没有看到任何有助于解决我问题的内容。

1 个答案:

答案 0 :(得分:1)

上面评论中的

user20650回答是...... ...

  

对于你的选项二,使用包名...即mgcv ::: k.check然后   可以使用f&lt; - 函数(b,k.sample = 5000,k.rep = 200)   printCoefmat(mgcv ::: k.check(b,subsample = k.sample,n.rep = k.rep),   digits = 3)

...为了我的目的,我放弃了printCoefmat

f <- function(b, k.sample = 5000, k.rep = 200) {
  mgcv:::k.check(b, subsample = k.sample, n.rep = k.rep)
}

(basis <- f(b))