Как указать нелинейное взаимодействие двух факторных переменных в обобщенных аддитивных моделях [R]

У меня есть набор данных временного ряда, который содержит переменную результата, которая является непрерывной, и два факторных предиктора (один с 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_1 и factor_2 с time для эффекта на outcome, чтобы сглаживания в каждой комбинации могли различаться (например: factor_2 имеет более сильный нелинейный эффект для некоторых уровней factor_1) . Что-то вроде s(time, factor_1, factor_2) или s(time, factor_1, by = factor_2) не работает.


person Stefano    schedule 10.12.2017    source источник
comment
как вы проверяли наличие нелинейного взаимодействия? и как включить это в свою модель.   -  person    schedule 10.12.2017
comment
пожалуйста, добавьте образец данных в свой вопрос.   -  person    schedule 10.12.2017
comment
Проверка существования нелинейного взаимодействия будет частью сравнения моделей для проверки гипотез. Мы хотим знать, улучшает ли модель добавление взаимодействия между факторами.   -  person Stefano    schedule 11.12.2017
comment
Хорошо . Но я не вижу предложенной модели, включающей нелинейное взаимодействие. В качестве альтернативы, учитывает ли модель Gam нелинейное взаимодействие. Мне нужна твоя помощь.   -  person    schedule 11.12.2017
comment
Да, с нелинейностью справляются сглаживания s(). by аргументы внутри сглаживания - это способ указать взаимодействия, но я не уверен, как добиться взаимодействия с несколькими терминами.   -  person Stefano    schedule 11.12.2017
comment
Как mcgv влияет на вашу модель.   -  person    schedule 11.12.2017
comment
Я не уверен, что понимаю вопрос, но вижу последнее изменение моего вопроса.   -  person Stefano    schedule 11.12.2017
comment
Давайте продолжим это обсуждение в чате.   -  person    schedule 11.12.2017


Ответы (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
)
person Stefano    schedule 30.12.2017