随机效应嵌套在R中的固定效应模型下

机器算法验证 r 随机效应模型
2022-03-29 12:56:44

寻求帮助为我从相互移植实验中收集的数据创建模型:我有 2 个鱼群(A 和 B)和 2 个相互交叉的温度状态(温暖和寒冷)(= 4 个治疗组 - A :暖,A:冷,B:暖,B:冷)。每个处理组由两个重复罐(总共 8 个罐)组成。每个鱼缸里有 100 条鱼。感兴趣的响应变量是增长率,我记录了 800 条鱼中每条鱼的增长率。我想测试人口和温度的影响及其相互作用。我还想包括坦克效果。我认为我应该在交互效果中嵌套坦克效果(Pop:Temp,相当于治疗组)并将嵌套效果作为随机效果包含在内。所以我应该在 Pop:Temp 的交互中嵌套 Population(固定效果)和 Temp(固定效果)和 Tank 效果(随机效果)。是否可以创建嵌套在固定效果交互中的随机效果?如果是这样,我该如何在 R 中做到这一点?

3个回答

将 tank 作为随机效果和将 tank 嵌套在 pop/temp 固定效果中是没有意义的。您只需要其中之一,具体取决于坦克的编码方式。

如果坦克编码为1-8,则只需要坦克随机效果。将其嵌套在 pop/temp 固定效果中会产生相同的 8 个单位,因此没有必要。

如果 tank 编码为 1-2(即,它是哪个代表),您只需要将 tank 嵌套在 pop/temp 固定效果中,因为这会为您提供 8 个独特的 tank。仅当先将坦克分为两组然后随机分配治疗时,才需要包括坦克随机效应;如果八个坦克完全随机接受治疗,这是没有必要的。

您可以使用基于可能性的解决方案来做到这一点,nlmelme4如果一切都是平衡的,使用传统的 ANOVA 方法可能更简单aov

创建一些示例数据:

set.seed(5)
d <- within(expand.grid(pop=factor(c("A","B")),
                        temp=factor(c("warm", "cold")),
                        rep=1:2,
                        fish=1:100), {
                          tank <- factor(paste(pop, temp, rep, sep="."))
                          tanke <- round(rnorm(nlevels(tank))[unclass(tank)],1)
                          e <- round(rnorm(length(pop)),1)
                          m <- 10 + 2*as.numeric(pop)*as.numeric(temp)
                          growth <- m + tanke + e
                        })

像这样使用aov

a0 <- aov(growth ~ pop*temp + Error(tank), data=d)
summary(a0)

lme像这样:

library(nlme)
m1 <- lme(growth ~ pop*temp, random=~1|tank, data=d)
anova(m1)

因为处理(pop * temp)在随机效应(tank)的级别内没有变化,所以这是一个简单的嵌套设计(我认为)。除非您对罐之间的变化量特别感兴趣,否则将数据聚合到罐的水平然后运行一个简单的(非混合)线性模型会容易得多——统计推断应该与上述混合方差分析中的固定效应检验。

使用上面的示例数据(我确信有一种更简单的方法来进行聚合):

d2 <- rename(cast(subset(d,select=c(pop,tank,temp,growth)),
                  pop+temp+tank~.,fun.agg=mean,value="growth"),
             c("(all)"="meangrowth"))

m1 <- lm(meangrowth~pop*temp,data=d2)
summary(m1)

参见 Murtaugh (2007)“生态数据分析中的简单性和复杂性”,生态学,88(1),2007,第 56-62 页。

你试过了吗: lmer(growth~1+treatment+(1|ta​​nk)+(0+treatment|tank))