以下问题建立在此页面上的讨论之上。给定一个响应变量y
、一个连续解释变量x
和一个因子fac
,可以定义一个通用加法模型 (GAM),其中包含x
和fac
使用参数之间的交互by=
。根据R包中的帮助文件 ,可以这样完成:?gam.models
mgcv
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
,但现在平滑项有三个估计值,我无法解释。
提前感谢任何愿意花时间帮助我了解三种模型差异的人。