The below gives R code for computing the p-value for Dunnett's test given the number of treatments, number of subjects per group and the error degrees of freedom for the group main effect.
You may need to install the mvtnorm package using
install.packages("mvtnorm")
The function for computing the p-value for Dunnett's test is then read in as below
library('mvtnorm') dunnett_p <- function(td, k, n, df) { # td: Dunnett's t-statistic # k: number of treatments, including the reference # n: number of subject (assuming equal in all treatments) # df: degrees of freedom cMat <- rbind(-1,diag(k-1)) corMat <- t(cMat)%*%(cMat/n) den <- sqrt(crossprod(t(colSums(cMat^2/n)))) corMat <- corMat / den p <- pmvt(lower=rep(-td, k-1), upper=rep(td, k-1), delta=rep(0, k-1), df=df, corr=corMat) 1-p[[1]] }
The above function may then be run, for example, as below to give the p-value
dunnett_p(2.3,3,5,23)
[1] 0.05614953