[R] function for inverse normal transformation

John Fox jfox at mcmaster.ca
Fri Jul 20 20:56:01 CEST 2012


Dear Carol,

> -----Original Message-----
> From: carol white [mailto:wht_crl at yahoo.com]
> Sent: July-20-12 2:45 PM
> To: John Fox
> Subject: Re: inverse normal transformation
> 
> Thanks John for your quick reply.
> 
> The purpose of applying inverse normal transformation is to reduce the
> impact of outliers and deviations from normality on statistical
> analysis.

In other words, you're forcing the variable to follow a normal distribution
and making the units of measurement uninterpretable. I'll assume that this
somehow makes sense.

> 
> Indeed, it includes the steps that you went through. However, I don't
> know why you calculated  (rank - 0.5)/20 to get the p-value. Then, how
> could we convert the quantiles (Q) into normal deviates?

They *are* quantiles on the standard normal scale -- that's what qnorm()
provides (with the default mean of 0 and standard deviation of 1). The
cumulative probabilities (not p-values) are calculated from the order
statistics of your data, where subtracting 0.5 avoids cumulative
probabilities of 0 or 1. This (or something close to it) is standard for
computing comparison quantiles.

I'm copying this message to r-help (with the original subject line) since
the discussion there continues.

Best,
 John

> 
> Many thanks,
> 
> Carol
> 
> 
> ________________________________
> 
> From: John Fox <jfox at mcmaster.ca>
> To: 'carol white' <wht_crl at yahoo.com>
> Sent: Friday, July 20, 2012 4:43 PM
> Subject: RE: inverse normal transformation
> 
> 
> Dear Carol,
> 
> Like the people on r-help list who tried to help you, I have no idea
> why you
> want to do this. If you're trying to get the corresponding standard
> normal
> quantiles for your data, as for a QQ plot (and why else you might want
> them
> isn't clear to me), you can simply compute
> 
> rank <- rank(tmp)
> P <- (rank - 0.5)/20
> Q <- qnorm(P)
> 
> Then, the QQ plot is
> 
> plot(Q, tmp)
> 
> Best,
> John
> 
> --------------------------------
> John Fox
> Senator William McMaster
>   Professor of Social Statistics
> Department of Sociology
> McMaster University
> Hamilton, Ontario, Canada
> http://socserv.mcmaster.ca/jfox
> 
> 
> 
> 
> > -----Original Message-----
> > From: carol white [mailto:wht_crl at yahoo.com]
> > Sent: July-20-12 9:08 AM
> > To: jfox at mcmaster.ca
> > Subject: inverse normal transformation
> >
> > Dear John,
> >
> >
> > Are the following scripts correct to get the inverse normal
> > transformation of a data set?
> >
> >
> > Thanks for your help,
> >
> >
> > Carol
> > -----------------------------------------------
> >
> >  tmp
> >  [1]  2.502519  1.828576  3.755778 17.415000  3.779296  2.956850
> > 2.379663  [8]  1.103559  8.920316  2.744500  2.938480  7.522174
> > 10.629200  8.552259 [15]  5.425938  4.388906  0.000000  0.723887
> > 11.337860  3.763786
> >
> >
> >  tmp.p =2*pnorm(abs(scale(tmp)),lower.tail=FALSE)
> > >  tmp.qnorm = qnorm(tmp.p/2,lower.tail=FALSE)  tmp.qnorm =
> > > qnorm(tmp.p/2,lower.tail=FALSE)
> >
> > > par(mfrow = c(1,3))
> > > hist(tmp)
> > > hist(tmp.p)
> > > hist(tmp.qnorm)
> >
> 
> 
> 
>



More information about the R-help mailing list