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

How to extract fitted values for the separate 'by-factors' in a bam() general additive model?

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

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

首先,让我们用built-ingamSim( )函数生成一些测试数据并构建模型:

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")