簡體   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