[R] Hmisc / Design question
Frank E Harrell Jr
f.harrell at vanderbilt.edu
Tue Aug 2 22:16:50 CEST 2005
Greg Tarpinian wrote:
> All,
>
> I have been reading Dr. Harrell's excellent
> "Regression Modeling Strategies" book and trying out
> the exercises. I understand that contrast( ) is used
> to obtain contrasts between two variables for given
> levels of other nuisance variables; is there a way
> to use contrast( ) to obtain, for example, Scheffe
> confidence intervals / hypothesis tests for many
> post hoc contrasts at once?
>
> Any help would be much appreciated,
>
> Greg
Steven Novick (cc'd) has written some nice code that I regret I haven't
had time to add into contrast.Design for doing simulation-based
adjustment for multiple comparisons. Below is the code he sent me.
## Program: multiple.adjustment.R
## Version: 1
## Author: Steven Novick
## Date: May 21, 2004
## Purpose: Compute the exact T-critical value for multiple
comparisons based on the paper
## Don Edwards and Jack Berry (1987). "The Efficiency of
Simulation-Based Multiple Comparison".
## Biometrics 43, pp913-928.
multiple.adjustment = function(fit, cont1, cont2, alpha=.05, m=79999)
{
## fit = object of class "ols" from library Design
## cont1, cont2 = data.frame with elements to be contrasted. See
function "contrast" in Design.
## alpha = test significance level
## m = number of monte-carlo runs
V=fit$var/fit$stats["Sigma"]^2 ## Var( coef(fit) ) = sigma^2 * V
C=contrast(fit, cont1, cont2)$X ## Contrast matrix
df = fit$df ## Error degrees of freedom
r = (m+1)*(1-alpha) # P( W < w[r] ) = alpha
if ( floor(r) != ceiling(r) )
stop("(m+1)*(1-alpha) must be an integer.")
## Create random numbers
n.contrast=nrow(C)
n.coef=length(coef(fit))
G=chol(V)
U=apply(C, 1, function(ctr){( G%*%ctr
)/as.vector(sqrt(t(ctr)%*%V%*%ctr)) })
W = sort(sapply(1:m, function(i){ z=rnorm(n.coef); y=sqrt(rchisq(1,
df)/df); w=abs(t(U)%*%z)/y; return(max(w)) }))
w.alpha = W[r] ## Cut-off value for testing; 95% CI = beta.hat +
c(-1, 1)*w.alpha* SE(beta.hat)
alpha.star = 2*(1-pt(w.alpha, df)) ## What is alpha if using
T-statistic ?
return(list(w.alpha=w.alpha, alpha.star=alpha.star))
}
--
Frank E Harrell Jr Professor and Chair School of Medicine
Department of Biostatistics Vanderbilt University
More information about the R-help
mailing list