`investr`

stands for **inverse estimation in R**. Inverse estimation, also referred to as the calibration problem, is in a sense the reverse of the prediction problem. Inverse estimation is a classical and well-known problem in regression. In simple terms, it involves the use of an observed value of the response to make inference on the corresponding unknown value of the explanatory variable. To our knowledge, however, statistical software is somewhat lacking the capabilities for analyzing these types of problems. The package is currently listed on CRAN and can easily be installed:

```
## Install from CRAN
install.packages("investr", dep = TRUE)
```

The package is also currently listed in the ChemPhys task view (http://cran.r-project.org/web/views/ChemPhys.html), a collection of R packages useful for analyzing data from chemistry and physics experiments. These packages can all be installed at once (including `investr`

) using the `ctv`

package (Zeileis, 2005):

```
## Install the ChemPhys task view
install.packages("ctv")
library("ctv")
install.views("ChemPhys")
```

The development version of `investr`

can be found on GitHub at https://github.com/w108bmg/investr and can easily be installed using the the `devtools`

package (Wickham and Chang, 2013):

```
## Install development version from GitHub
install.packages("devtools")
library(devtools)
install_github(repo = "w108bmg/investr")
```

To report bugs or issues, contact the main author directly or submit them to https://github.com/w108bmg/investr/issues.

There are currently three main funtions in the `investr`

package: * `plotFit`

; * `calibrate`

; * `invest`

;

`plotFit`

The function `plotFit`

produces a scatterplot of the data with fitted regression curve and the option to add confidence/prediction bands for the response (pointwise or adjusted). Currently, it can only be used with single-predictor objects of class `lm`

or `nls`

; however, for objects of class `nls`

, the confidence/prediction bands are based on the linear approximation and can be misleading (Bates and Watts, 1988, pg. 65).

```
## Load package
library(investr)
## A linear regression example
data(cars, package = "datasets")
library(splines)
cars.lm1 <- lm(dist ~ speed, data = cars)
cars.lm2 <- lm(dist ~ speed + I(speed^2), data = cars)
cars.lm3 <- lm(dist ~ poly(speed, degree = 3), data = cars)
cars.lm4 <- lm(dist ~ ns(speed, df = 3), data = cars)
par(mfrow = c(2, 2))
plotFit(cars.lm1, interval = "both", xlim = c(-10, 40), ylim = c(-50, 150),
main = "linear", shade = T)
plotFit(cars.lm2, interval = "both", xlim = c(-10, 40), ylim = c(-50, 150),
main = "quadratic", shade = T)
plotFit(cars.lm3, interval = "both", xlim = c(-10, 40), ylim = c(-50, 150),
main = "cubic", shade = T)
plotFit(cars.lm4, interval = "both", xlim = c(-10, 40), ylim = c(-50, 150),
main = "cubic spline", shade = T)
## A nonlinear regression example
par(mfrow = c(1, 1))
data(Puromycin, package = "datasets")
Puromycin2 <- Puromycin[Puromycin$state == "treated", ][, 1:2]
Puro.nls <- nls(rate ~ Vm * conc/(K + conc), data = Puromycin2,
start = c(Vm = 200, K = 0.05))
plotFit(Puro.nls, interval = "prediction", pch = 19, shade = T,
col.pred = rgb(0, 1, 1, 0.4))
```

`calibrate`

`calibrate`

only operates on objects of class `lm`

and can only be used with the simple linear regression model.

```
## Crystal growth data from Graybill & Iyer (1994)
fit <- lm(weight ~ time, data = crystal)
plotFit(fit, interval = "confidence", shade = T, col.conf = "lightblue",
pch = 19)
(res <- calibrate(fit, y0 = 8, interval = "inversion", mean.response = T))
abline(h = 8, v = c(res$lower, res$estimate, res$upper), lty = 2)
```

`invest`

For more complicated models (e.g., polynomial and nonlinear regression), use the more genaral `invest`

function which carries out the computations numerically.

```
## Treatment group from Puromycin data frame
plotFit(fit, interval = "prediction", shade = T, pch = 19)
(res <- invest(Puro.nls, y0 = 150, interval = "inversion"))
abline(h = 150, v = c(res$lower, res$estimate, res$upper))
```