【问题标题】:How to specify the non-linear interaction of two factor variables in generalised additive models [R]如何在广义加性模型中指定两个因子变量的非线性交互作用 [R]
【发布时间】:2017-12-10 14:17:12
【问题描述】:

我有一个时间序列数据集,其中包含一个连续的结果变量和两个因子预测变量(一个具有 6 个水平,一个具有 2 个水平)。

我想模拟两个因子变量在连续变量上的非线性交互作用。

这是我目前拥有的模型:

library(mgcv)

model <- bam(
    outcome ~
        factor_1 + factor_2 +
        s(time, k = 9) +
        s(time, by = factor_1, k = 9) +
        s(time, by = factor_2, k = 9),
    data = df
)

summary(model)
Family: gaussian 
Link function: identity 

Formula:
outcome ~ factor_1 + factor_2 + s(time, k = 9) + s(time, by = factor_1, 
    k = 9) + s(time, by = factor_2, k = 9)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2612.72      23.03 113.465   <2e-16 ***
factor_1b      33.19      27.00   1.229     0.22    
factor_2z    -488.52      27.00 -18.093   <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(time)           2.564  3.184  6.408 0.000274 ***
s(time):factor_1b 1.000  1.001  0.295 0.587839    
s(time):factor_2z 2.246  2.792 34.281  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.679   Deviance explained = 69.1%
fREML = 1359.6  Scale est. = 37580     n = 207

现在我想添加factor_1factor_2time 的非线性交互,以对outcome 产生影响,这样每个组合中的平滑器可能会有所不同(例如:factor_2对于factor_1的某些级别具有更强的非线性效应)。 s(time, factor_1, factor_2)s(time, factor_1, by = factor_2) 之类的东西不起作用。

【问题讨论】:

  • 你如何检查非线性交互的存在?以及如何将其合并到您的模型中。
  • 请在您的问题中添加您的示例数据。
  • 检查非线性交互的存在将是假设检验模型比较的一部分。我们想知道在因素之间添加交互是否会改善模型。
  • 好。但我没有看到包含非线性交互的支持模型。或者,Gam 模型是否考虑非线性交互。我需要你的帮助。
  • 是的,非线性由平滑处理s()。平滑中的by 参数是一种指定交互的方式,但我不确定如何实现多项交互。

标签: r gam mgcv


【解决方案1】:

使用interaction() 包含两个因素的交互作用似乎可以完成这项工作。

library(mgcv)

# The following assumes factors are ordered with treatment contrast.    
model <- bam(
    outcome ~
        interaction(factor_1, factor_2) +
        s(time, k = 9) +
        s(time, by = interaction(factor_1, factor_2), k = 9),
    data = df
)

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多