我想知道体积随时间的发展(我指的是年龄,而不是波浪)是否在不同的群体之间有所不同。我也有一些协变量。A制作了一个模拟数据集:
library(simstudy)
def <- defData(varname = "volume", dist = "normal", formula = 1000,
variance = 100)
def <- defData(def, varname = "group", formula = "1;2;3", dist = "categorical")
def <- defData(def, varname = "age", dist = "normal", formula = 14, variance = 2)
def <- defData(def, varname = "scanner", formula = "1;2", dist = "categorical")
set.seed(1)
sim.data <- genData(220, def)
我想出了以下模型:
library(mgcv)
sim.data$group <- as.factor(sim.data$group)
m1 <- gamm(volume ~ group + s(age, by = group, k = 20, bs = "tp") + scanner , data = sim.data, random=list(id=~1))
summary(m1$gam)
这将导致以下输出
Family: gaussian
Link function: identity
Formula:
volume ~ group + s(age, by = group, k = 20, bs = "tp") +
scanner
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 997.3096 2.7303 365.280 <2e-16 ***
group2 0.5983 1.9557 0.306 0.760
group3 1.2819 1.7592 0.729 0.467
scanner 1.3806 1.3627 1.013 0.312
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(age):group1 1 1 1.850 0.175
s(age):group2 1 1 0.001 0.969
s(age):group3 1 1 0.194 0.660
R-sq.(adj) = -0.0133
Scale est. = 2.1375e-07 n = 220
我希望我能用我的s(年龄,by=group)术语来解释不同组之间的发展差异,但是它给了我每个组的平滑的年龄参数。我如何才能最好地评估交互作用(尽管我也在某些地方读到交互作用可能不是这个加法模型中的合适术语)?
我考虑使用anova(),将具有by term的模型与没有by term的模型进行比较
m2 <- gamm(volume ~ group + s(age, k = 20, bs = "tp") + scanner , data = sim.data, random=list(id=~1))
anova(m1$gam,m2$gam)
但是根据我比较lm模型和anova()的经验,这并没有给出我所期望的输出。
Family: gaussian
Link function: identity
Formula:
volume ~ group + s(age, by = group, k = 20, bs = "tp") +
scanner
Parametric Terms:
df F p-value
group 2 0.297 0.743
scanner 1 1.026 0.312
Approximate significance of smooth terms:
edf Ref.df F p-value
s(age):group1 1 1 1.850 0.175
s(age):group2 1 1 0.001 0.969
s(age):group3 1 1 0.194 0.660
有没有人知道比较模型是不是研究交互效应的合适方法,以及如何获得实际效果?最好是我也可以用来进行成对分析的一种方法。
所有的帮助都将不胜感激!
发布于 2021-05-21 02:04:48
一个离线的人给我提供了解决方案。您需要为分组变量设置一个有序因子,然后添加一个对比度,如下所示:
sim.data$group<-as.factor(sim.data$group)
sim.data$group<-as.ordered(sim.data$group)
contrasts(sim.data$group) <- 'contr.treatment'
您可以像往常一样进行分析。
m1 <- gamm(volume ~ group + s(age, by = group, k = 20, bs = "tp") + scanner , data = sim.data, random=list(id=~1))
summary(m1$gam)
希望这篇文章能帮助那些和我有同样问题的人。
https://stackoverflow.com/questions/67422479
复制相似问题