This function predicts x values using a univariate linear model that has been generated for the purpose of calibrating a measurement method. Prediction intervals are given at the specified confidence level. The calculation method was taken from Massart et al. (1997). In particular, Equations 8.26 and 8.28 were combined in order to yield a general treatment of inverse prediction for univariate linear models, taking into account weights that have been used to create the linear model, and at the same time providing the possibility to specify a precision in sample measurements differing from the precision in standard samples used for the calibration. This is elaborated in the package vignette.

inverse.predict(object, newdata, ...,
  ws, alpha=0.05, var.s = "auto")

Arguments

object

A univariate model object of class lm or rlm with model formula y ~ x or y ~ x - 1.

newdata

A vector of observed y values for one sample.

...

Placeholder for further arguments that might be needed by future implementations.

ws

The weight attributed to the sample. This argument is obligatory if object has weights.

alpha

The error tolerance level for the confidence interval to be reported.

var.s

The estimated variance of the sample measurements. The default is to take the residual standard error from the calibration and to adjust it using ws, if applicable. This means that var.s overrides ws.

Value

A list containing the predicted x value, its standard error and a confidence interval.

Note

The function was validated with examples 7 and 8 from Massart et al. (1997). Note that the behaviour of inverse.predict changed with chemCal version 0.2.1. Confidence intervals for x values obtained from calibrations with replicate measurements did not take the variation about the means into account. Please refer to the vignette for details.

References

Massart, L.M, Vandenginste, B.G.M., Buydens, L.M.C., De Jong, S., Lewi, P.J., Smeyers-Verbeke, J. (1997) Handbook of Chemometrics and Qualimetrics: Part A, p. 200

Examples

# This is example 7 from Chapter 8 in Massart et al. (1997)
m <- lm(y ~ x, data = massart97ex1)
inverse.predict(m, 15)        #  6.1 +- 4.9
#> $Prediction
#> [1] 6.09381
#> 
#> $`Standard Error`
#> [1] 1.767278
#> 
#> $Confidence
#> [1] 4.906751
#> 
#> $`Confidence Limits`
#> [1]  1.187059 11.000561
#> 
inverse.predict(m, 90)        # 43.9 +- 4.9
#> $Prediction
#> [1] 43.93983
#> 
#> $`Standard Error`
#> [1] 1.767747
#> 
#> $Confidence
#> [1] 4.908053
#> 
#> $`Confidence Limits`
#> [1] 39.03178 48.84788
#> 
inverse.predict(m, rep(90,5)) # 43.9 +- 3.2
#> $Prediction
#> [1] 43.93983
#> 
#> $`Standard Error`
#> [1] 1.141204
#> 
#> $Confidence
#> [1] 3.168489
#> 
#> $`Confidence Limits`
#> [1] 40.77134 47.10832
#> 

# For reproducing the results for replicate standard measurements in example 8,
# we need to do the calibration on the means when using chemCal > 0.2
weights <- with(massart97ex3, {
  yx <- split(y, x)
  ybar <- sapply(yx, mean)
  s <- round(sapply(yx, sd), digits = 2)
  w <- round(1 / (s^2), digits = 3)
})

massart97ex3.means <- aggregate(y ~ x, massart97ex3, mean)

m3.means <- lm(y ~ x, w = weights, data = massart97ex3.means)

inverse.predict(m3.means, 15, ws = 1.67)  # 5.9 +- 2.5
#> $Prediction
#> [1] 5.865367
#> 
#> $`Standard Error`
#> [1] 0.8926109
#> 
#> $Confidence
#> [1] 2.478285
#> 
#> $`Confidence Limits`
#> [1] 3.387082 8.343652
#> 
inverse.predict(m3.means, 90, ws = 0.145) # 44.1 +- 7.9
#> $Prediction
#> [1] 44.06025
#> 
#> $`Standard Error`
#> [1] 2.829162
#> 
#> $Confidence
#> [1] 7.855012
#> 
#> $`Confidence Limits`
#> [1] 36.20523 51.91526
#>