Learn R Programming

STAND (version 2.0)

percentile.exact: Estimate of Xp and Exact Confidence Limits for Normal/Lognormal

Description

Calculate estimate of Xp the 100*p percentile of the normal/lognormal distribution, and the lower and upper 100*$\gamma$% exact confidence limits. The resulting interval (Xp.LCL,Xp.UCL) is an approximate $100*(2\gamma - 1)$ percent confidence interval for Xp the 100*p percentile. This function should only be used for complete samples.

Usage

percentile.exact(x, p = 0.95, gam = 0.95,logx=TRUE,wpnt=FALSE)

Arguments

x
vector of positive data values
p
probability for Xp the 100pth percentile. Default is 0.95
gam
one-sided confidence level $\gamma$. Default 0.95
logx
If TRUE, sample is from lognormal, else normal. Default is TRUE
wpnt
if TRUE, show warning from pnt. Default is $FALSE$

Value

A LIST with components:
Xp
estimate of the pth percentile of the distribution
Xpe.LCL
$100*\gamma$% exact lower confidence limit for Xp
Xpe.UCL
$100*\gamma$% exact upper confidence limit for Xp
p
probability for Xp the 100pth percentile. Default 0.95
gam
one-sided confidence level $\gamma$. Default is 0.95
Logx
If TRUE, sample is from lognormal, else normal. Default is TRUE
n
sample size
Ku
the K factor used to calculate the exact UCL
Kl
the K' factor used to calculate the exact LCL

Details

A point estimate of Xp, the 100pth percentile of a normal/lognormal distribution is calculated. Exact confidence limits for Xp are calculated using the quantile function of the non-central t distribution. The exact UCL is $m + K*s$, where $m$ is the sample mean, $s$ is the sample standard deviation, and the $K factor$ depends on $n, p,$ and $\gamma$. The exact LCL is $m + K'*s$. The local function kf calculates $K$ and $K'$ using the quantile function of the non-central t distribution qt.

The null hypothesis $Ho: Xp \ge Lp$ is rejected at the $\alpha = (1- \gamma )$ significance level if the $100\gamma\%$ UCL for Xp is less than the specified limit Lp (indicating the exposure profile is acceptable).

References

Burrows, G. L. (1963), "Statistical Tolerance Limits - What are They," Applied Statistics, 12, 133-144.

Johnson, N. L. and B. L. Welch (1940), "Application of the Non-Central t-Distribution," Biometrika, 31(3/4), 362-389.

Lyles R. H. and L. L. Kupper (1996), "On Strategies for Comparing Occupational Exposure Data to Limits," American Industrial Hygiene Association Journal, 57:6-15.

Tuggle, R. M. (1982), "Assessment of Occupational Exposure Using One-Sided Tolerance Limits," American Industrial Hygiene Association Journal, 43, 338-346.

Frome, E. L. and Wambach, P. F. (2005), "Statistical Methods and Software for the Analysis of Occupational Exposure Data with Non-Detectable Values," ORNL/TM-2005/52,Oak Ridge National Laboratory, Oak Ridge, TN 37830. Available at: http://www.csm.ornl.gov/esh/aoed/ORNLTM2005-52.pdf

Ignacio, J. S. and W. H. Bullock (2006), A Strategy for Assesing and Managing Occupational Exposures, Third Edition, AIHA Press, Fairfax, VA.

Mulhausen, J. R. and J. Damiano (1998), A Strategy for Assessing and Managing Occupational Exposures, Second Edition, AIHA Press, Fairfax, VA.

See Also

Help files for percentile.ml, efraction.exact, aihand

Examples

Run this code
#                      EXAMPLE 1
# calculate 95th percentile and exact CLs for Example data
# Appendix  Mulhausen and Damiano (1998)
data(aihand)
x <- aihand$x ;  det <- rep(1,length(x))
aiha <- data.frame(x,det) #  complete data
unlist(percentile.exact(x,gam=0.95,p=0.95) )[1:5]  #  exact CLs
unlist(percentile.ml(aiha,gam=0.95,p=0.95))   #  ML CLs
#                      EXAMPLE 2
#  Ignacio and Bullock (2006) Mulhausen and Damiano (1998)
#  Calculate TABLE VII.3 (page 272) Factor for One-Sided Tolerance
#  Limits for Normal Distribution (Abridged Version)
#  Same as Table III Burrows(1963) Panel 3 Page 138
nn <- c(seq(3,25),seq(30,50,5))
pv <-c(0.75,0.9,0.95,0.99,0.999)
tab <- matrix(0,length(nn),length(pv))
  for( k in (1:length(nn) ) ){
  xx <- seq(1,nn[k])
  for(j in (1:length(pv))) {
  tab[k,j ]<- percentile.exact(xx,pv[j],gam=0.95,FALSE)$Ku
}}
dimnames(tab)<-(list(nn,pv)) ; rm(nn,pv,xx)
round(tab,3)
#
#                      EXAMPLE 3
#  Calculate TABLE I One Sided Tolerance Factor K'
#  Tuggle(1982) Page 339 (Abridged Version)
nn <- c(seq(3,20),50,50000000)
pv <-c(0.9,0.95,0.99)
tab <- matrix(0,length(nn),length(pv))
  for( k in (1:length(nn) ) ){
  xx <- seq(1,nn[k])
  for(j in (1:length(pv))) {
  tab[k,j ]<- percentile.exact(xx,pv[j],gam=0.95,FALSE)$Kl
}}
dimnames(tab)<-(list(nn,pv)) ; rm(nn,pv,xx)
round(tab,3)

Run the code above in your browser using DataLab