使用R语言中的multcomp软件包,在发现显著趋势后,顺序使用Williams检验以确定最小有效剂量。

3
假设我正在使用R语言的multcomp包进行剂量反应分析(Bretz et al. (2011) Multiple Comparisons with R. Chapman & Hall/CRC)。以下是(模拟)数据:
dat <- data.frame(Group = rep(c(0, 0.3, 0.7, 1.2, 1.8, 2.5), each = 5), 
                Response = c(rnorm(5, 20, 1.2),
                             rnorm(5, 19.5, 1.2),
                             rnorm(5, 19, 1.2),
                             rnorm(5, 15, 1.2),
                             rnorm(5, 12, 1.2),
                             rnorm(5, 11, 1.2) 
                             )
              )

作为第一步,我想确定响应是否存在下降趋势(即随着剂量增加,平均响应水平是否下降)。这可以通过一个特别强大的测试 - 威廉姆斯检验(Williams (1971) A Test for Differences between Treatment Means When Several Dose Levels are Compared with a Zero Dose Control. Biometric 27:103-117)来完成。以下是R代码:
dat$Group = factor(dat$Group)

M <- lm(Response ~ Group, data = dat)
trend = glht(M, linfct = mcp(Group = "Williams"), alternative = "less")

summary(trend)
     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Williams Contrasts

Fit: lm(formula = Response ~ Group, data = dat)

Linear Hypotheses:
         Estimate Std. Error t value   Pr(<t)
C 1 >= 0  -7.8117     0.7587 -10.296  < 1e-08
C 2 >= 0  -7.3490     0.6571 -11.184  < 1e-08
C 3 >= 0  -6.5282     0.6195 -10.538  < 1e-08
C 4 >= 0  -5.1096     0.5998  -8.519  < 1e-08
C 5 >= 0  -4.3293     0.5877  -7.366 3.01e-08
(Adjusted p values reported -- single-step method)

在测试的对比中,最低的p值为<0.001,这表明响应呈单调下降趋势的证据很强。很好,这是一个重要的信息。然而,作为下一步,我想确定所谓的“最小有效剂量(MED)”,即对我的反应变量产生显著影响的最低剂量水平。在他的原始出版物中,Williams建议顺序应用多个类似t的测试(即将第二高剂量与控制组进行比较,然后将第三高剂量与控制组进行比较,等等),并在第一个不显著的结果处停止该过程。先前的显著结果将对应于MED。不幸的是,尽管类似于t统计量,但Williams提出的检验统计量在无剂量反应的零假设下并不遵循标准的t分布。在他的原始论文中,作者确实列出了一些关键值的表格。然而,我想知道是否有R实现可用于此类顺序Williams测试。是否可以通过以某种方式指定对比来使用multcomp包进行操作?我花了很多时间在线寻找答案,但不得不放弃。任何帮助都将不胜感激。
1个回答

1
你可以使用Dunnett对比来找到MED。
或者也可以使用“逐步上升的Williams”对比。
# step-up Williams contrast matrix
n <- tapply(dat$Group, dat$Group, length)
k <- length(n)
CM <- c()
for (i in 1:(k - 1)) {
  help <- c(-1, n[2:(i + 1)] / sum(n[2:(i + 1)]), rep(0 , k - i - 1))
  CM <- rbind(CM, help)
}
rownames(CM) <- paste("C", 1:nrow(CM))
CM

# supply to glht()
summary(glht(M, linfct = mcp(Group = CM), alternative = "less"))
     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: User-defined Contrasts


Fit: lm(formula = Response ~ Group, data = dat)

Linear Hypotheses:
         Estimate Std. Error t value Pr(<t)    
C 1 >= 0   0.1535     0.7630   0.201 0.7214    
C 2 >= 0  -0.2032     0.6608  -0.308 0.5259    
C 3 >= 0  -1.5409     0.6230  -2.473 0.0219 *  
C 4 >= 0  -3.2164     0.6032  -5.332 <0.001 ***
C 5 >= 0  -4.2203     0.5910  -7.141 <0.001 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- single-step method)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接