GAM 中连续和分类预测变量之间交互作用的不同建模方式

机器算法验证 r 相互作用 广义加法模型 毫克CV
2022-03-05 08:56:33

以下问题建立在此页面上的讨论之上。给定一个响应变量y、一个连续解释变量x和一个因子fac,可以定义一个通用加法模型 (GAM),其中包含xfac使用参数之间的交互by=根据R包中的帮助文件 ,可以这样完成:?gam.modelsmgcv

gam1 <- gam(y ~ fac +s(x, by = fac), ...)

@GavinSimpson 在这里提出了一种不同的方法:

gam2 <- gam(y ~ fac +s(x) +s(x, by = fac, m=1), ...)

我一直在玩第三个模型:

gam3 <- gam(y ~ s(x, by = fac), ...)

我的主要问题是:其中一些模型是错误的,还是只是不同?在后一种情况下,它们有什么区别? 根据我将在下面讨论的示例,我想我可以理解它们的一些差异,但我仍然缺少一些东西。

作为一个例子,我将使用一个数据集,其中包含在不同位置测量的两种不同植物物种的花朵的色谱。

rm(list=ls())
# install.packages("RCurl")
library(RCurl) # allows accessing data from URL
df <- read.delim(text=getURL("https://raw.githubusercontent.com/marcoplebani85/datasets/master/flower_color_spectra.txt"))
library(mgcv)

这些是这两个物种在局部级别的平均色谱(使用了滚动方式):

在此处输入图像描述

每种颜色代表不同的物种。每一行代表不同的地方。

我的最终目标是模拟(可能交互的)Taxon和波长wl对反射率百分比的影响(density在代码和数据集中称为),同时考虑Locality混合效应 GAM 中的随机效应。目前我不会将混合效果部分添加到我的盘子中,它已经足够了解如何对交互进行建模了。

我将从三个交互式 GAM 中最简单的一个开始:

gam.interaction0 <- gam(density ~ s(wl, by = Taxon), data = df) 
# common intercept, different slopes
plot(gam.interaction0, pages=1)

在此处输入图像描述

summary(gam.interaction0)

产生:

Family: gaussian 
Link function: identity 

Formula:
density ~ s(wl, by = Taxon)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  28.3490     0.1693   167.4   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
                      edf Ref.df     F p-value    
s(wl):TaxonSpeciesA 8.938  8.999 884.3  <2e-16 ***
s(wl):TaxonSpeciesB 8.838  8.992 325.5  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.523   Deviance explained = 52.4%
GCV = 284.96  Scale est. = 284.42    n = 9918

两个物种的参数部分相同,但每个物种都拟合了不同的样条。在 GAM 的摘要中包含参数部分有点令人困惑,它是非参数的。@IsabellaGhement解释说:

如果您查看与您的第一个模型相对应的估计平滑效果(平滑)图,您会注意到它们以零为中心。因此,您需要向上(如果估计的截距为正)或向下(如果估计的截距为负)“移动”这些平滑,以获得您认为正在估计的平滑函数。换句话说,您需要将估计的截距添加到平滑中以获得您真正想要的。对于您的第一个模型,假定两个平滑的“移位”相同。

继续:

gam.interaction1 <- gam(density ~ Taxon +s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction1,pages=1)

在此处输入图像描述

summary(gam.interaction1)

给出:

Family: gaussian 
Link function: identity 

Formula:
density ~ Taxon + s(wl, by = Taxon, m = 1)

Parametric coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    40.3132     0.1482   272.0   <2e-16 ***
TaxonSpeciesB -26.0221     0.2186  -119.1   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
                      edf Ref.df    F p-value    
s(wl):TaxonSpeciesA 7.978      8 2390  <2e-16 ***
s(wl):TaxonSpeciesB 7.965      8  879  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.803   Deviance explained = 80.3%
GCV = 117.89  Scale est. = 117.68    n = 9918

现在,每个物种也有自己的参数估计。

下一个模型是我难以理解的模型:

gam.interaction2 <- gam(density ~ Taxon + s(wl) + s(wl, by = Taxon,  m=1), data = df)
plot(gam.interaction2, pages=1)

在此处输入图像描述

我不清楚这些图表代表什么。

summary(gam.interaction2)

给出:

Family: gaussian 
Link function: identity 

Formula:
density ~ Taxon + s(wl) + s(wl, by = Taxon, m = 1)

Parametric coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    40.3132     0.1463   275.6   <2e-16 ***
TaxonSpeciesB -26.0221     0.2157  -120.6   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
                      edf Ref.df     F p-value    
s(wl)               8.940  8.994 30.06  <2e-16 ***
s(wl):TaxonSpeciesA 8.001  8.000 11.61  <2e-16 ***
s(wl):TaxonSpeciesB 8.001  8.000 19.59  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.808   Deviance explained = 80.8%
GCV = 114.96  Scale est. = 114.65    n = 9918

的参数部分与gam.interaction2的 大致相同gam.interaction1,但现在平滑项有三个估计值,我无法解释。

提前感谢任何愿意花时间帮助我了解三种模型差异的人。

2个回答

gam1并且gam2很好;它们是不同的模型,尽管它们试图做同样的事情,即模型组特定的平滑。

gam1表格_

y ~ f + s(x, by = f)

f通过为每个平滑度(假设这是一个标准因子)估计一个单独的平滑器来做到这一点f,实际上,每个平滑度也估计一个单独的平滑度参数。

gam2表格_

y ~ f + s(x) + s(x, by = f, m = 1)

实现了与(对 的每个级别gam1之间的平滑关系进行建模)相同的目标,但它是通过估计项)加上平滑差分项(第二项)的全局或平均平滑效果来实现的由于这里的惩罚是在一阶导数(s(x)`)上反映了与全局或平均效应的偏差。xyfxys(x)s(x, by = f, m = 1)m = 1) for this difference smoother, it is penalising departure from a flat line, which when added to the global or average smooth term (

gam3形式

y ~ s(x, by = f)

无论它在特定情况下的适应程度如何,都是错误的。我说它是错误的原因是s(x, by = f)由于对模型可识别性施加的总和为零约束,零件指定的每个平滑都以零为中心。因此,模型中没有任何内容可以解释Y在由 定义的每个组中f模型截距仅给出整体平均值。这意味着以零为中心并且已经从 的基扩展中移除了平坦基函数x(因为它与模型截距混淆)现在负责对Y对于当前组和整体平均值(模型截距),加上xon的平滑效果Y.

但是,这些模型都不适合您的数据;现在忽略响应的错误分布(density不能是负数,并且存在非高斯family可以解决或解决的异质性问题),您没有考虑按花分组(SampleID在您的数据集中)。

如果您的目标是对Taxon特定曲线进行建模,那么形式的模型将是一个起点:

m1 <- gam(density ~ Taxon + s(wl, by = Taxon, k = 20) + s(SampleID, bs = 're'),
          data = df, method = 'REML')

我为特定平滑添加了随机效果SampleID并提高了基础扩展的大小。Taxon

该模型将观测值建模m1来自平滑wl效应,具体取决于Taxon观测值来自哪个物种 ( 总之,单个花朵的曲线来自特定曲线的偏移版本,偏移量由随机截距给出。该模型假设所有个体都具有与单个花朵所来自的特定物体的光滑度相同的光滑形状。TaxondensityTaxonTaxon

该模型的另一个版本是gam2上面的形式,但增加了随机效应

m2 <- gam(density ~ Taxon + s(wl) + s(wl, by = Taxon, m = 1) + s(SampleID, bs = 're'),
          data = df, method = 'REML')

这个模型更适合,但我认为它根本不能解决问题,见下文。我认为它确实表明的一件事是,对于这些模型中的特定曲线,默认k值可能太低如果您查看诊断图,仍然有很多剩余平滑变化我们没有建模。Taxon

该模型很可能对您的数据过于严格;您的各个平滑图中的某些曲线似乎不是Taxon平均曲线的简单移位版本。更复杂的模型也将允许个人特定的平滑。这样的模型可以使用fs因子平滑交互基础进行估计。我们仍然需要Taxon特定的曲线,但我们也希望为每个曲线设置单独的平滑SampleID,但与by平滑不同,我建议您最初希望所有这些SampleID特定曲线具有相同的摆动。在与我们之前包含的随机截距相同的意义上,fs基础添加了一个随机截距,但还包括一个“随机”样条曲线(我在 GAM 的贝叶斯解释中使用了吓人的引号,所有这些模型都只是随机效应的变体)。

该模型适合您的数据

m3 <- gam(density ~ Taxon + s(wl, by = Taxon, k = 20) + s(wl, SampleID, bs = 'fs'), 
          data = df, method = 'REML')

请注意,我在k这里增加了,以防我们需要在特定的Taxon平滑中增加更多的摆动。Taxon由于上述原因,我们仍然需要参数效应。

该模型需要很长时间才能适应单个内核gam()-bam()因为这里有相对大量的随机效应,所以很可能会更好地适应这个模型。

如果我们将这些模型与 AIC 的平滑参数选择校正版本进行比较,我们会看到后一种模型 与其他两个模型相比有多么显着,m3即使它使用了一个数量级的自由度

> AIC(m1, m2, m3)
          df      AIC
m1  190.7045 67264.24
m2  192.2335 67099.28
m3 1672.7410 31474.80

如果我们看一下这个模型的平滑,我们会更好地了解它是如何拟合数据的:

在此处输入图像描述

(请注意,这是使用我的gratiadraw(m3)包中的函数生成的。左下图中的颜色无关紧要,在这里没有帮助。)draw()

每个SampleID的拟合曲线是由截距或参数项TaxonSpeciesB加上两个Taxon特定平滑之一(取决于Taxon每个平滑) SampleID加上它自己的SampleID特定平滑。

请注意,所有这些模型仍然是错误的,因为它们没有考虑异质性;带有日志链接的 gamma 或 Tweedie 模型将是我更进一步的选择。就像是:

m4 <- gam(density ~ Taxon + s(wl, by = Taxon) + s(wl, SampleID, bs = 'fs'), 
          data = df, method = 'REML', family = tw())

但我目前在拟合这个模型时遇到了问题,这可能表明它过于复杂,wl包含多个平滑。

另一种形式是使用有序因子方法,它对平滑进行类似 ANOVA 的分解:

  • Taxon保留参数项
  • s(wl)是一个平滑,将代表参考水平
  • s(wl, by = Taxon)将有一个单独的差异平滑对于其他级别。在您的情况下,您将只有其中之一。

这个模型适合像m3

df <- transform(df, fTaxon = ordered(Taxon))
m3 <- gam(density ~ fTaxon + s(wl) + s(wl, by = fTaxon) +
            s(wl, SampleID, bs = 'fs'), 
          data = df, method = 'REML')

但解释不同;第一个s(wl)是指TaxonA和 所暗示的平滑将是平滑 的和 的s(wl, by = fTaxon)之间的平滑区别TaxonATaxonB

这是 Jacolien van Rij在她的教程页面中写的:

如何设置交互取决于分组预测器的类型:

  • 因子包括截距差异:Group + s(Time, by=Group)
  • 有序因子包括截距差和参考平滑:Group + s(Time) + s(Time, by=Group)
  • 使用二元预测器包括参考平滑:s(Time) + s(Time, by=IsGroupChildren)

必须将分类变量指定为具有适当 R 函数的因子、有序因子或二元因子。要了解如何解释输出以及每个模型能告诉我们什么和不能告诉我们什么,请直接查看Jacolien van Rij 的教程页面她的教程还解释了如何拟合混合效应 GAM。要了解 GAM 上下文中交互的概念, Peter Laurinec 的这个教程页面也很有用。这两个页面都提供了大量进一步的信息,以在不同的场景中正确运行 GAM。