r语言 - 如何在 bam() 通用加法模型中提取单独'by-factors'的拟合值?



我想从我的bam()模型中提取拟合值,以便能够以prismggplot绘制图形。我使用GAM对脑电图数据中的大脑反应进行建模,因此数据是四个不同类别的许多400ms时间序列。该模型包含这些类别的副因子(uV ~ s(time, by = CatInt)(。我想分别获取这 4 个类别的拟合值。我发现该函数fitted()fitted.values(),但这只输出一个字符串,其长度与我放入模型的数据点数相同,而我希望每个类别的数据随时间推移有一个平均值。理想情况下,它将包括SD,SE或CI。这可能吗?

如果您对plot.gam()输出的自定义感兴趣,可以将绘图保留为对象。

首先,让我们使用内置的 gamSim( ) 函数生成一些测试数据并构造一个模型:

library(mgcv)
set.seed(2) # R version 3.6.0 used
dat <- gamSim(5, n = 200, scale = 2)
b <- bam(y ~ x0 + s(x1, by = x0), data = dat)

然后,您可以只保留绘图对象,该对象是一个列表,其中包含生成自定义绘图所需的所有数据:

pl_data <- plot(b, pages = 1)
> str(pl_data)
List of 4
 $ :List of 11
  ..$ x      : num [1:100] 0.00711 0.01703 0.02694 0.03686 0.04678 ...
  ..$ scale  : logi TRUE
  ..$ se     : num [1:100] 3.25 3.04 2.83 2.64 2.47 ...
  ..$ raw    : num [1:200] 0.185 0.702 0.573 0.168 0.944 ...
  ..$ xlab   : chr "x1"
  ..$ ylab   : chr "s(x1,3.33):x01"
  ..$ main   : NULL
  ..$ se.mult: num 2
  ..$ xlim   : num [1:2] 0.00711 0.9889
  ..$ fit    : num [1:100, 1] -4.76 -4.64 -4.52 -4.4 -4.28 ...
  ..$ plot.me: logi TRUE
....

实际上,您可以使用常用的子集方法提取感兴趣的pl_data组件,例如:

first_item_pl <- pl_data[[1]][c("x", "fit", "se")]

提取第一个列表的不同项目或从所有四个嵌套列表中提取同一项目

fit_list <- lapply(pl_data, "[[", "fit")

最新更新