我希望将参与者作为“随机效应”包括在日志线性模型(泊松模型)中,以说明参与者之间的差异。 我的数据来自一个应急表,我可以预测从观察到的预期,并且没有可变的y。 由于我没有可变的y(我会从x1,x2,...)中进行预测,所以我无法使用正常的混合效应模型(lme4等)。
这里是一些简化的R代码(只有两个参与者): 有三个变量:“意识”和“叙事” - 我想测试的相互作用,同时将参与者视为随机效应。observed <- c( 7, 2, 8, 22,0, 0, 14, 2,8, 22,0, 0)
awareness <-
factor(c("aware","aware","aware","unaware","unaware","unaware","aware","aware","aware","unaware","unaware","unaware"))
narrative <- factor(c("M1","MU2","MU3","M1","MU2","MU3","M1","MU2","MU3","M1","MU2","MU3"))
#participant <- factor(c("1", "1", "1","1", "1", "1","2", "2", "2","2", "2", "2")
model1 <- glm(observedawareness*narrative,poisson)
model2 <- glm(observedawareness+narrative,poisson)
anova(model1,model2,test="Chi")
summary(model2)
或有4个维度:
y <-structure(c(7.33, 13.5, 7.5, 8.3, 3.16, 2, 3.3, 5.3, 9.5, 4.2, 9.2, 6.5, 8.33, 14.5, 8.5, 9.3, 4.16, 3, 4.3, 6.3, 10.5, 5.2, 10.2, 7.5), dim = c(2L, 2L, 2L, 3L), dimnames = structure(list(c("ParticipantOne", "ParticipantTwo"), c("above threshold", "below threshold"), c("Healthy controls", "Psychotic observers"), c("M1", "MU2", "MU3")), names = c("Awareness", "Group", "Narrative")), class = "table")
xy <- aperm(y, c(2, 2, 1, 3))
names(dimnames(xy)) <- c("Participant" ,"Group", "Awareness", "Narrative")
ftable(xy)
fourfoldplot(xy, margin = 2)
narrative <- gl(3,4)
group <- gl(2,1,12)
awareness <- gl(2,2,12)
participant <-gl(???)
model1 <- glm(as.vector(xy) ~narrative*group*awareness,poisson)
model2 <- update(model1, ~. -narrative:group:awareness)
anova(model1,model2,test="Chi")
问题是我如何将参与者作为随机效应包括在模型中。
对于您的glm
## make data frame
df <- as.data.frame.table(y) |>
setNames(c("awareness", "group", "participant", "narrative", "y"))
## integerize levels
fac <- sapply(df, is.factor)
df[fac] <- lapply(df[fac], \(x) as.integer(x) |> as.factor())
model1 <- glm(y ~ narrative*group*awareness, data=df, quasipoisson)
model2 <- update(model1, ~ . -narrative:group:awareness)
我不知道具有随机效果的quasipoissons,但
lme4
可以合适。
glmmTMB
Gives:
glmmTMB