calc.reference.interval <- function(val, wgt) { ## Purpose: Calculate Nonparametric 95% Reference Interval. ## Notes: ## 1) Each Reference Interval needs at least 120 reference observations (per CLSI C28-A3c). ## 2) A general criterion for determining sample size is that the width of the 90% confidence interval (CI) ## for a reference limit should be acceptably small relative to the width of the 95% reference interval ## itself (Harris and Boyd); these authors recommend that the width of the 90% CI be less than 0.2 times ## the width of the reference interval. ## Arguments: ## val: numerical measurements ## wgt: weight (frequency) of these measurements ## Return: a Nonparametric 95% Reference Interval. ## Author: Feiming Chen ## ________________________________________________ x <- rep(val, wgt) cat("N =", length(x), "\n") cat("Reference Interval:\n") print(q <- quantile(x, probs = c(0.025, 0.975))) ## Confidence Intervals for the Nonparametric Method (Using Bootstrap with 2000 Reps) require(boot) b <- boot(x, function(x, i) { quantile(x[i], probs = c(0.025, 0.975)) }, R = 2000) cat("\n90% Bootstrap CI for Lower 95% Reference Limit:") L <- boot.ci(b, conf=0.90, type="basic", index=1) print(L2 <- L$basic[1,c(4,5)]) cat("\n90% Bootstrap CI for Upper 95% Reference Limit:") U <- boot.ci(b, conf=0.90, type="basic", index=2) print(U2 <- U$basic[1,c(4,5)]) cat("\nRatio of Limit CI Width to Reference Interval Width (Recommend: < 0.2):\n") q2 <- diff(q) # Width of Reference Interval L3 <- diff(L2) # Width of Lower Limit 90% CI U3 <- diff(U2) # Width of Upper Limit 90% CI cat("Lower Limit CI Width Ratio:", round(L3 / q2, 3), "\n") cat("Upper Limit CI Width Ratio:", round(U3 / q2, 3), "\n") list(Reference.Limit = q, Lower.Limit.CI = L2, Upper.Limit.CI = U2) } if (F) { # Unit Test ## Data from CLSI C28-A3c (Reference Interval) Table 4 (Frequency Distributions of Calcium in 240 Medical Students by Sex) ## Only Women's Data. CLSI Reported "Nonparametric" Method: N = 120, Calcium.Women = (8.9, 10.2), ## Lower Limit 90% CI = (8.8, 9.1), Upper Limit 90% CI = (10.1, 10.3) val <- c(8.8,8.9,9.0,9.1,9.2,9.3,9.4,9.5,9.6,9.7,9.8,9.9,10.0,10.1,10.2,10.3,10.4,10.5,10.6) wgt <- c(1,2,1,3,11,11,8,16,16,26,8,7,3,2,3,2,0,0,0) ans <- calc.reference.interval(val, wgt) ## 2.5% 97.5% ## 8.9975 10.2000 }
Friday, December 7, 2018
Calculate Nonparametric 95% Reference Interval
Subscribe to:
Posts (Atom)