我有一个带有2个预测变量的多路列联表:tmt(2个级别)和年份(4个级别)和一个响应变量,一个物种存在的数量(n个图中)(succ)。
数据(testsumm):
year tmt n succ
1 2012 1 72 27
2 2012 0 68 6
3 2013 1 71 37
4 2013 0 71 8
5 2014 1 72 13
6 2014 0 75 9
7 2015 1 64 20
8 2015 0 67 16
创建成功和失败的载体后
resp<-cbind(testsumm$succ, testsumm$n-testsumm$succ)
我使用glm分析了R中的数据(testsumm),如下所示:
model<-glm(resp~year*tmt, family=binomial,data=testsumm)
结果告诉我,年和tmt之间存在相互作用。 现在我尝试使用posthoc测试(使用R的multcomp软件包)来确定每个tmt的2个级别是否在每个年份都有显着差异。 本网站上的其他问题指导我 https://cran.r-project.org/web/packages/multcomp/vignettes/multcomp-examples.pdf 这些说明完美地用于比较处理水平以内的年份。
temp <- expand.grid(year = unique(testsumm$year),tmt = unique(testsumm$tmt))
X1 <- model.matrix(~ tmt * year, data = temp)
glht(model, linfct = X1)
Tukey <- contrMat(table(testsumm$year), "Tukey")
K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)))
rownames(K1) <- paste(levels(testsumm$tmt)[1], rownames(K1), sep = ":")
K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(testsumm$tmt)[2], rownames(K2), sep = ":")
K <- rbind(K1, K2)
colnames(K) <- c(colnames(Tukey), colnames(Tukey))
summary(glht(modintILAQ, linfct = K %*% X1))
因为我想在几年内比较治疗水平,我尝试在代码中交换2个变量的位置:
model2 <- glm(resp ~ tmt * year, family=binomial,data = testsumm)
summary(model2)
temp2 <- expand.grid(tmt = unique(testsumm$tmt),year =unique(testsumm$year))
X12 <- model.matrix(~ tmt * year, data = temp2)
glht(model2, linfct = X12)
Tukey <- contrMat(table(testsumm$tmt), "Tukey")
K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)))
rownames(K1) <- paste(levels(testsumm$year)[1], rownames(K1), sep = ":")
K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(testsumm$year)[2], rownames(K2), sep = ":")
K <- rbind(K1, K2)
colnames(K) <- c(colnames(Tukey), colnames(Tukey))
summary(glht(model2, linfct = K %*% X1))
但是我收到了此错误消息
Error in K %*% X1 : non-conformable arguments
很明显这两个矩阵形状不一样,所以它们不能成倍增加,但我无法弄清楚它们应该是什么样子。任何人都可以帮助我在每年的2个治疗水平之间创造对比,而不是在每个治疗水平之间产生几年之间的对比吗?
答案 0 :(得分:1)
multcomp 并不容易。但是, lsmeans 包提供了另一种指定所需内容的方法。
library(lsmeans)
glht(model2, lsm(~ tmt | year))
当然可以省去很多打字!