【发布时间】:2019-09-04 09:12:21
【问题描述】:
我想拟合一个非线性混合模型,然后测试治疗组和对照组参数之间的差异。
我正在使用 lme4 包中的 nlmer。 我使用 Oranges 数据集作为这个问题的测试数据。 随着时间的推移测量 5 棵树的周长。每棵树都表现出逻辑增长。在基本示例中,我们将 Tree 作为随机效果。 我已经扩展了数据,以便有一个治疗组和对照组(治疗只是控制的副本,周长值加倍)。 我的问题是,我想将“治疗”作为固定效应,然后测试治疗组和对照组中非线性模型参数 Asym 之间的差异。
library(lme4)
#Toy data based on Orange (lme4)
# Create a copy of Orange data, double the circumference values, make new labels for trees (no. 6-10) and label all as treatment (1)
Orange.with.treatment<-Orange
Orange.with.treatment$circumference<-Orange.with.treatment$circumference*2
Orange.with.treatment$Tree <- as.factor(as.numeric(Orange.with.treatment$Tree) + 5)
Orange.with.treatment$treat<- as.factor(rep(1,length(Orange$Tree)))
# Create a copy of Orange data and label all as control (1)
Orange.control<-Orange
Orange.control$treat<- as.factor(rep(0,length(Orange$Tree)))
# combine into one dataframe
Orange.full<-(rbind(Orange.control,Orange.with.treatment))
# a nlmer fit not considering treatment as a factor
startvec <- c(Asym = 200, xmid = 725, scal = 350)
(nm1 <- nlmer(circumference ~ SSlogis(age, Asym, xmid, scal) ~ Asym|Tree,
Orange.full, start = startvec))
# a nlmer fit considering treatment as a fixed factor?
startvec <- c(Asym = 200, xmid = 725, scal = 350)
(nm2 <- nlmer(circumference ~ SSlogis(age, Asym, xmid, scal) ~ Asym+treat|Tree,
Orange.full, start = startvec))
# test differences in parameters between treat and control?
我曾尝试在公式中将 Treat 与 Asym 一起添加,但我不认为这是正确的。 我想要的是 Asym 在治疗和控制方面的总结,以及一种统计测试它们之间差异的方法。
【问题讨论】:
-
我会使用
nlme。类似nlme(circumference ~ SSlogis(age, Asym, xmid, scal), data = Orange.full, fixed = Asym + xmid + scal ~ treat, random = Asym + xmid + scal ~ 1 | Tree, start = c(200, 200, 725, 0, 350, 0), control = nlmeControl(msMaxIter = 1000))。 -
summary将为您提供治疗差异的 p 值。 -
太棒了,谢谢罗兰!
标签: r mixed-models