繁体   English   中英

R中如何在GLM,具有交互作用的分类数据之后更改事后对比中的因素顺序

[英]how to change order of factors in post hoc contrasts after GLM, categorical data with interaction, in R

我有一个包含2个预测变量的多向列联表:tmt(2个级别)和年(4个级别),以及一个响应变量,存在某个物种的数量(n个地块中的个数)(成功)。

数据(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)

结果告诉我,year和tmt之间存在交互作用。 现在,我尝试使用事后测试(带有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))

因此,由于我想在几年内比较治疗水平,因此我尝试交换代码中两个变量的位置:

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

很显然,这两个矩阵的形状不同,因此无法相乘,但是我无法弄清楚它们应该是什么样。 谁能帮助我在每年的两种治疗水平之间建立对比,而不是在每种治疗水平的几年之间进行对比?

当存在多个因素时, multcomp并不十分容易。 但是, lsmeans软件包提供了另一种指定所需内容的方法。

library(lsmeans)
glht(model2, lsm(~ tmt | year))

当然可以节省很多打字!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM