[R] warning message in hand-made function
Prof Brian Ripley
ripley at stats.ox.ac.uk
Thu Mar 30 13:01:44 CEST 2006
The problem is that that you have asserted your result is of class
"htest", and it is not like the format given in e.g. ?t.test.
Specifically, print.htest contains
if (!is.null(x$p.value)) {
fp <- format.pval(x$p.value, digits = digits)
out <- c(out, paste("p-value", if (substr(fp, 1, 1) ==
"<") fp else paste("=", fp)))
}
and this assumes x$p.value is of length one, not two.
On Thu, 30 Mar 2006, Matthieu Dubois wrote:
> Dear Rusers,
>
> I tried to implement a function comparing mean scores between one
> subject (the patient) and a group a control subjects. The function
> returns attended results, but I also obtained the following warning :
>
> Warning message:
> the condition has length > 1 and only the first element will be used
> in: if (substr(fp, 1, 1) == "<") fp else paste("=", fp)
>
> Maybe the cause of the message is obvious, but I don't understand. I
> am newbie in R and certainly I missed something. Any help would be
> greatly appreciated.
>
> The aim of the function was to :
> 1. compute a modified t-test with either raw data (controls and
> patient) in vectors or only summaries for the control group (mean,
> standard deviation, size of the group : mean.c, sd.c, n) as inputs ;
> 2. estimate the rarity of the difference observed between patient
> and controls and computing confidence intervals
>
> The function was the following:
>
> crawford.t.test <- function(patient, controls, mean.c=0, sd.c=0, n=0,
> na.rm=F) {
> #from Crawford et al. (1998, Clinical Neuropsychologist ; 2002,
> Neuropsychologia)
>
> na<-na.rm
>
> #if no summaries are entered, they are computed
> if(missing(n)) {
> n <- length(controls)
> mean.c <- mean(controls, na.rm=na)
> sd.c <- sd(controls, na.rm=na)
> }
> dl <- n-1 #degrees of freedom of the test
>
> #t.test computation
> t.obs <- (patient-mean.c) / (sd.c*(((n+1)/n)^0.5))
> proba.onetailed <- 1-pt(abs(t.obs), df=dl)
> rar <- pt(t.obs, df=dl) #point estimate of the rarity
>
> #confidence intervals computation on the rarity (Crawford &
> Garthwaite, 2002, Neuropsychologia)
> c <- (patient-mean.c)/sd.c
> #finding the non central parameter of t distributions
> f <- function(delta, pr, x, df) pt(x, df = df, ncp = delta) - pr
> deltaL <- uniroot(f, lower=-37.62, upper=37.62, pr = 0.025, x = c*
> (n^0.5), df = dl)
> deltaU <- uniroot(f, lower=-37.62, upper=37.62, pr = 0.975, x = c*
> (n^0.5), df = dl)
> CI.U <- pnorm(deltaL$root/(n^0.5)) * 100 #upper bound of the
> confidence interval
> CI.L <- pnorm(deltaU$root/(n^0.5)) * 100 #lower bound of the
> confidence interval
>
> #output
> output <- list(statistic=t.obs, p.value=c
> (one.tailed=proba.onetailed, twotailed=2*proba.onetailed), rarity=c
> (rarity=rar, lower.boud=CI.L, upper.bound=CI.U), df=dl, method=paste
> ("Crawford modified t test with", dl, "degrees of freedom", sep=" "))
> class(output)<-"htest"
> return(output)
> }
>
>
>
> Matthieu Dubois, PH.D. Student
> Cognitive Neuroscience Unit
> Université catholique de Louvain
> 10, Place cardinal Mercier - 1348 Louvain-la-Neuve - BELGIUM
>
> Matthieu.Dubois at psp.ucl.ac.be
>
>
>
>
> [[alternative HTML version deleted]]
>
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list