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

时间:2019-07-15 13:31:10

标签: r gam

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

1 个答案:

答案 0 :(得分:0)

如果您对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")