如何在 bam() 通用加法模型中提取单独 'by-factors' 的拟合值?
How to extract fitted values for the separate 'by-factors' in a bam() general additive model?
我想从我的 bam()
模型中提取拟合值,以便能够在 prism
或 ggplot
中绘制图形。我使用 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")
我想从我的 bam()
模型中提取拟合值,以便能够在 prism
或 ggplot
中绘制图形。我使用 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")