mgcv 中的三向交互
Three Way Interaction in mgcv
我对在 mgcv 中实现三向交互很感兴趣,但是虽然这里和 Cross Validated 上都进行了一些讨论,但我很难找到一个答案,即究竟应该如何编写三向交互的代码两个连续变量和一个分类变量。在我的研究中,每个人只有四个变量(社会经济 class (Socio)、性别、死亡年份 (YOD) 和年龄),我很好奇这些变量如何解释某人被埋葬的可能性陪葬品 (N=c.12,000).
我读过 Pedersen 等人。 2019 年并选择不在我的模型中包含全局平滑。但是,我不确定这是否意味着我也不应该在我的三向交互模型中包含低阶交互项。例如,我的代码应该是:
mgcv::gam(Goods ~ Socio + te(Age,YOD,by=Socio,k=5), family=binomial(link='logit'),
mydata, method='ML')
我是否仍应在三向交互中包含低阶项:
mgcv::gam(Goods ~ Socio + s(Age,by=Socio,k=5) + s(YOD,by=Socio,k=5) + te(Age,YOD,k=5) +
ti(Age,YOD,by=Socio, k=5), family=binomial(link='logit'),mydata,method='ML')
或者是否有不同的编码方式?
除非您想对交互进行测试,否则最好不要将 te()
分解为主要效果和交互效果。这是因为模型
y ~ te(x1, x2) # main + interaction in one smooth model
y ~ s(x1) + s(x2) + ti(x1, x2) # decomposed model
不完全等价:
- 你必须非常挑剔地设置所有项
k
以便这些模型使用相同数量的基函数,并且
- 分解后的模型比
te()
版本使用更多的平滑度参数,因此模型稍微复杂一些 即使你得到的所有基数都大致相当
请注意,您 在第二个模型中包括全局平滑:此项 te(Age,YOD,k=5)
将是 Age
和 [=17= 的全局平滑] 在整个数据集上。
您的第一个模型的分解版本为:
Goods ~ Socio +
s(Age, by = Socio) +
s(YOD, by = Socio) +
ti(Age, YOD, by = Socio)
设置测试是否需要按条款计算的因素需要更多的工作,但我认为你最好在 te()
模型上做 post-hoc,在那里你可以通过差分来比较拟合曲面。
我对在 mgcv 中实现三向交互很感兴趣,但是虽然这里和 Cross Validated 上都进行了一些讨论,但我很难找到一个答案,即究竟应该如何编写三向交互的代码两个连续变量和一个分类变量。在我的研究中,每个人只有四个变量(社会经济 class (Socio)、性别、死亡年份 (YOD) 和年龄),我很好奇这些变量如何解释某人被埋葬的可能性陪葬品 (N=c.12,000).
我读过 Pedersen 等人。 2019 年并选择不在我的模型中包含全局平滑。但是,我不确定这是否意味着我也不应该在我的三向交互模型中包含低阶交互项。例如,我的代码应该是:
mgcv::gam(Goods ~ Socio + te(Age,YOD,by=Socio,k=5), family=binomial(link='logit'),
mydata, method='ML')
我是否仍应在三向交互中包含低阶项:
mgcv::gam(Goods ~ Socio + s(Age,by=Socio,k=5) + s(YOD,by=Socio,k=5) + te(Age,YOD,k=5) +
ti(Age,YOD,by=Socio, k=5), family=binomial(link='logit'),mydata,method='ML')
或者是否有不同的编码方式?
除非您想对交互进行测试,否则最好不要将 te()
分解为主要效果和交互效果。这是因为模型
y ~ te(x1, x2) # main + interaction in one smooth model
y ~ s(x1) + s(x2) + ti(x1, x2) # decomposed model
不完全等价:
- 你必须非常挑剔地设置所有项
k
以便这些模型使用相同数量的基函数,并且 - 分解后的模型比
te()
版本使用更多的平滑度参数,因此模型稍微复杂一些 即使你得到的所有基数都大致相当
请注意,您 在第二个模型中包括全局平滑:此项 te(Age,YOD,k=5)
将是 Age
和 [=17= 的全局平滑] 在整个数据集上。
您的第一个模型的分解版本为:
Goods ~ Socio +
s(Age, by = Socio) +
s(YOD, by = Socio) +
ti(Age, YOD, by = Socio)
设置测试是否需要按条款计算的因素需要更多的工作,但我认为你最好在 te()
模型上做 post-hoc,在那里你可以通过差分来比较拟合曲面。