从R中的gam.check提取p值

6
当我运行gam.check(my_spline_gam)时,会得到以下输出结果。
Method: GCV   Optimizer: magic
Smoothing parameter selection converged after 9 iterations.
The RMS GCV score gradiant at convergence was 4.785628e-06 .
The Hessian was positive definite.
The estimated model rank was 25 (maximum possible: 25)
Model rank =  25 / 25 

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(x) 24.000 22.098   0.849    0.06

我的问题是我是否能将这个p值单独提取到一个表格中。

在p值应该出现的地方插入str(gam.check(my_spline_gam)) - Andre Elrico
仍然会给出相同的输出,但我只想要一行结果或者只是p值。谢谢! - a_geo
1
请将 dput(gam.check(my_spline_gam)) 的结果添加到您的问题中。然后我可以解决它。 - Andre Elrico
2
快速查看代码表明您可以使用 k.check(yourmodel,subsample = 5000,n.rep = 200) - user20650
@user20650:k.check 返回:错误:找不到函数“k.check”。 - a_geo
显示剩余2条评论
2个回答

4

看起来你无法以正常方式将结果存储在对象中。你可以使用capture.output将控制台输出存储在对象中,然后随后使用str_split获取正确的值。所以对于帮助文件中的示例,这将是:

library(mgcv)
set.seed(0)
dat <- gamSim(1,n=200)
b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)
r <- capture.output(gam.check(b))
p <- strsplit(r[12], " ")[[1]][11]

但是由于p值只是一个字符串,这种方法无法获得精确的p值。

编辑:user20650的答案将给您正确的输出:

r <- k.check(b)
r[,'p-value']

谢谢!k.check似乎不起作用。我是否需要导入另一个包? - a_geo
@a_geo 意味着您需要执行 k.check(my_spline_gam) 而不是 gam.check(my_spline_gam)。 P值非常相似,您应该能够使用它们。 - jay.sf
@user20650 这两个命令产生的p值略有不同。但是我认为我们可以考虑将它们视为相同,因为这些命令内部的随机计算会导致不同的结果,你不能轻松地设置种子,而set.seed()显然没有效果。 - jay.sf
1
@jay.sf; 我本来想不同意你的观点,因为 gam.check 显式地调用了 k.check,所以它们应该给出相同的结果(您可以使用 seed,例如 set.seed(1); printCoefmat(k.check(b, subsample = 5000, n.rep = 200), digits = 3))。 然而,快速查看显示早期绘图函数中在 gam.check 中使用了其他随机样本调用(与输出表无关),这将移动种子,因此很难得到相同的结果。但是它是执行工作的相同函数。 - user20650
谢谢大家,但是 k.check() 对我不起作用。错误:找不到函数“k.check”。 - a_geo
显示剩余2条评论

1

使用capture.output结合一些字符串操作 -

gam_obj <- capture.output(gam.check(b,pch=19,cex=.3))
gam_tbl <- gam_obj[12:length(gam_obj)]
str_spl = function(x){
  p_value <- strsplit(x, " ")[[1]]
  output_p <- as.numeric(p_value[length(p_value)])
}
p_values <- data.frame(sapply(gam_tbl, str_spl))

输出

enter image description here


1
谢谢!它并没有完全奏效,但是对此进行详细说明就可以了。唯一的问题是,理想情况下我也希望结果能够保留到小数点后三位。gam_obj <- capture.output(gam.check(my_spline_gam,pch=19,cex=.3))gam_tbl <- gam_obj[12:length(gam_obj)]p_str = unlist(strsplit(gam_tbl, " ", fixed=TRUE))p_value = as.numeric(p_str[8])p_value - a_geo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接