aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.Rbuildignore4
-rw-r--r--.github/.gitignore1
-rw-r--r--.github/workflows/R-CMD-check.yaml51
-rw-r--r--.github/workflows/test-coverage.yaml61
-rw-r--r--.gitignore3
-rw-r--r--.travis.yml9
-rw-r--r--DESCRIPTION17
-rw-r--r--GNUmakefile12
-rw-r--r--NAMESPACE4
-rw-r--r--NEWS.md4
-rw-r--r--R/chemCal-package.R86
-rw-r--r--R/linearity.R107
-rw-r--r--README.html141
-rw-r--r--README.md18
-rw-r--r--README.rmd4
-rw-r--r--build.log2
-rw-r--r--check.log29
-rw-r--r--codecov.yml14
-rw-r--r--data/din38402b1.rdabin0 -> 337 bytes
-rw-r--r--data/din38402b3.rdabin0 -> 281 bytes
-rw-r--r--data/din38402b6.rdabin0 -> 275 bytes
-rw-r--r--data/din38402c3.rdabin0 -> 277 bytes
-rw-r--r--docs/404.html2
-rw-r--r--docs/articles/chemCal.html4
-rw-r--r--docs/articles/index.html2
-rw-r--r--docs/authors.html2
-rw-r--r--docs/index.html2
-rw-r--r--docs/news/index.html2
-rw-r--r--docs/pkgdown.yml2
-rw-r--r--docs/reference/calplot.html2
-rw-r--r--docs/reference/din32645.html2
-rw-r--r--docs/reference/index.html2
-rw-r--r--docs/reference/inverse.predict.html2
-rw-r--r--docs/reference/lod.html15
-rw-r--r--docs/reference/loq.html13
-rw-r--r--docs/reference/massart97ex1.html2
-rw-r--r--docs/reference/massart97ex3.html2
-rw-r--r--docs/reference/rl95_cadmium.html2
-rw-r--r--docs/reference/rl95_toluene.html2
-rw-r--r--docs/reference/utstats14.html2
-rw-r--r--man/din32645.Rd3
-rw-r--r--man/din38402b1.Rd23
-rw-r--r--man/din38402b3.Rd24
-rw-r--r--man/din38402b6.Rd23
-rw-r--r--man/din38402c3.Rd22
-rw-r--r--man/linearity.Rd64
-rw-r--r--man/lod.Rd8
-rw-r--r--man/loq.Rd6
-rw-r--r--man/massart97ex1.Rd3
-rw-r--r--man/massart97ex3.Rd3
-rw-r--r--man/rl95_cadmium.Rd3
-rw-r--r--man/rl95_toluene.Rd3
-rw-r--r--man/utstats14.Rd3
53 files changed, 673 insertions, 144 deletions
diff --git a/.Rbuildignore b/.Rbuildignore
index f0b4d3d..7fdd16c 100644
--- a/.Rbuildignore
+++ b/.Rbuildignore
@@ -9,3 +9,7 @@ README.html
.travis.yml
experimental
test.log$
+^codecov\.yml$
+^\.github$
+^.*\.Rproj$
+^\.Rproj\.user$
diff --git a/.github/.gitignore b/.github/.gitignore
new file mode 100644
index 0000000..2d19fc7
--- /dev/null
+++ b/.github/.gitignore
@@ -0,0 +1 @@
+*.html
diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml
new file mode 100644
index 0000000..1429649
--- /dev/null
+++ b/.github/workflows/R-CMD-check.yaml
@@ -0,0 +1,51 @@
+# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
+# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
+on:
+ push:
+ branches: [main, master]
+ pull_request:
+
+name: R-CMD-check.yaml
+
+permissions: read-all
+
+jobs:
+ R-CMD-check:
+ runs-on: ${{ matrix.config.os }}
+
+ name: ${{ matrix.config.os }} (${{ matrix.config.r }})
+
+ strategy:
+ fail-fast: false
+ matrix:
+ config:
+ - {os: macos-latest, r: 'release'}
+ #- {os: windows-latest, r: 'release'}
+ - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'}
+ #- {os: ubuntu-latest, r: 'release'}
+ # - {os: ubuntu-latest, r: 'oldrel-1'}
+
+ env:
+ GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+ R_KEEP_PKG_SOURCE: yes
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: r-lib/actions/setup-pandoc@v2
+
+ - uses: r-lib/actions/setup-r@v2
+ with:
+ r-version: ${{ matrix.config.r }}
+ http-user-agent: ${{ matrix.config.http-user-agent }}
+ use-public-rspm: true
+
+ - uses: r-lib/actions/setup-r-dependencies@v2
+ with:
+ extra-packages: any::rcmdcheck
+ needs: check
+
+ - uses: r-lib/actions/check-r-package@v2
+ with:
+ upload-snapshots: true
+ build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")'
diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml
new file mode 100644
index 0000000..e050312
--- /dev/null
+++ b/.github/workflows/test-coverage.yaml
@@ -0,0 +1,61 @@
+# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
+# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
+on:
+ push:
+ branches: [main, master]
+ pull_request:
+
+name: test-coverage.yaml
+
+permissions: read-all
+
+jobs:
+ test-coverage:
+ runs-on: ubuntu-latest
+ env:
+ GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: r-lib/actions/setup-r@v2
+ with:
+ use-public-rspm: true
+
+ - uses: r-lib/actions/setup-r-dependencies@v2
+ with:
+ extra-packages: any::covr, any::xml2
+ needs: coverage
+
+ - name: Test coverage
+ run: |
+ cov <- covr::package_coverage(
+ quiet = FALSE,
+ clean = FALSE,
+ install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package")
+ )
+ covr::to_cobertura(cov)
+ shell: Rscript {0}
+
+ - uses: codecov/codecov-action@v4
+ with:
+ # Fail if error if not on PR, or if on PR and token is given
+ fail_ci_if_error: ${{ github.event_name != 'pull_request' || secrets.CODECOV_TOKEN }}
+ file: ./cobertura.xml
+ plugin: noop
+ disable_search: true
+ token: ${{ secrets.CODECOV_TOKEN }}
+
+ - name: Show testthat output
+ if: always()
+ run: |
+ ## --------------------------------------------------------------------
+ find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true
+ shell: bash
+
+ - name: Upload test results
+ if: failure()
+ uses: actions/upload-artifact@v4
+ with:
+ name: coverage-test-failures
+ path: ${{ runner.temp }}/package
diff --git a/.gitignore b/.gitignore
index b752ef4..1bee8d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
chemCal.Rcheck
chemCal_*.tar.gz
experimental
+.Rproj.user
+.Rhistory
+*.Rproj
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 712829e..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-language: r
-cache: packages
-r:
- - release
- - devel
-github_packages:
- - r-lib/covr
-after_success:
- - Rscript -e 'covr::codecov()'
diff --git a/DESCRIPTION b/DESCRIPTION
index 806d3d5..d8a9779 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,10 +1,14 @@
Package: chemCal
-Version: 0.2.3
-Date: 2022-03-31
+Version: 0.2.3.9000
+Date: 2025-01-25
Title: Calibration Functions for Analytical Chemistry
-Authors@R: c(person("Johannes", "Ranke", role = c("aut", "cre", "cph"),
- email = "johannes.ranke@jrwb.de",
- comment = c(ORCID = "0000-0003-4371-6538")))
+Authors@R: c(
+ person(c("Anıl", "A."), "Tellbüscher", role = "aut",
+ comment = "Linearity tests"),
+ person("Johannes", "Ranke", role = c("aut", "cre", "cph"),
+ email = "johannes.ranke@jrwb.de",
+ comment = c(ORCID = "0000-0003-4371-6538")))
+Depends: R (>= 3.5.0)
Suggests: MASS, knitr, testthat, investr, covr, rmarkdown
Description: Simple functions for plotting linear
calibration functions and estimating standard errors for measurements
@@ -20,4 +24,5 @@ VignetteBuilder: knitr
Encoding: UTF-8
BugReports: https://github.com/jranke/chemCal/issues
URL: https://pkgdown.jrwb.de/chemCal/, https://cgit.jrwb.de/chemCal/about
-RoxygenNote: 7.1.2
+Roxygen: list(markdown = TRUE)
+RoxygenNote: 7.3.2
diff --git a/GNUmakefile b/GNUmakefile
index b7404b6..0c5a155 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -28,16 +28,19 @@ all: build
$(TGZ): $(pkgfiles) vignettes
"$(RBIN)/R" CMD build . 2>&1 | tee build.log
-build: $(TGZ)
+roxy:
+ Rscript -e "roxygen2::roxygenize(roclets = c('rd', 'collate', 'namespace'))"
+
+build: roxy $(TGZ)
README.html: README.rmd
"$(RBIN)/Rscript" -e "rmarkdown::render('README.rmd', clean = FALSE)"
mv README.knit.md README.md
-install: build
+install: roxy build
"$(RBIN)/R" CMD INSTALL $(TGZ)
-check: build
+check: roxy build
"$(RBIN)/R" CMD check --as-cran $(TGZ) 2>&1 | tee check.log
vignettes/%.html: vignettes/%.Rmd vignettes/refs.bib
@@ -65,3 +68,6 @@ clean:
$(RM) -r vignettes/*_files
$(RM) -r vignettes/*.R
$(RM) Rplots.pdf
+
+
+.PHONY: roxy build install check pd winbuilder test clean
diff --git a/NAMESPACE b/NAMESPACE
index 5f98a2a..95e274b 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -11,12 +11,16 @@ S3method(loq,default)
S3method(loq,lm)
export(calplot)
export(inverse.predict)
+export(linearity)
export(lod)
export(loq)
+importFrom(graphics,abline)
importFrom(graphics,legend)
+importFrom(graphics,lines)
importFrom(graphics,matlines)
importFrom(graphics,plot)
importFrom(graphics,points)
+importFrom(stats,median)
importFrom(stats,optimize)
importFrom(stats,predict)
importFrom(stats,qt)
diff --git a/NEWS.md b/NEWS.md
index 5e86e24..a680498 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,7 @@
+# chemCal 0.2.3.9000
+
+- 'R/linearity.R', 'data/din38402*.rda': Add linearity tests and data from DIN 38402 using a pull request by Anil Axel Tellbüscher
+
# chemCal 0.2.3
- Make the use of the 'investr' package conditional in testthat tests, update maintainer e-mail address
diff --git a/R/chemCal-package.R b/R/chemCal-package.R
index 8cc8c76..54ab190 100644
--- a/R/chemCal-package.R
+++ b/R/chemCal-package.R
@@ -54,7 +54,7 @@
#' # LQ = 3.04 * LC (Currie 1999, p. 120)
#' 3.04 * lod(m, alpha = 0.01, beta = 0.5)$x
#'
-NULL
+"din32645"
@@ -72,7 +72,7 @@ NULL
#' Lewi, P.J., Smeyers-Verbeke, J. (1997) Handbook of Chemometrics and
#' Qualimetrics: Part A, Chapter 8.
#' @keywords datasets
-NULL
+"massart97ex1"
@@ -128,7 +128,7 @@ NULL
#' # of 15, but the graphical procedure of Massart (p. 201) to derive the
#' # variances on which the weights are based is quite inaccurate anyway.
#'
-NULL
+"massart97ex3"
@@ -147,7 +147,7 @@ NULL
#' @source Rocke, David M. und Lorenzato, Stefan (1995) A two-component model
#' for measurement error in analytical chemistry. Technometrics 37(2), 176-184.
#' @keywords datasets
-NULL
+"rl95_cadmium"
@@ -167,7 +167,7 @@ NULL
#' @source Rocke, David M. und Lorenzato, Stefan (1995) A two-component model
#' for measurement error in analytical chemistry. Technometrics 37(2), 176-184.
#' @keywords datasets
-NULL
+"rl95_toluene"
@@ -188,7 +188,81 @@ NULL
#' Toronto.
#' \url{https://sites.chem.utoronto.ca/chemistry/coursenotes/analsci/stats/index.html}
#' @keywords datasets
-NULL
+"utstats14"
+
+
+#' Nitrite calibration data
+#'
+#' Example dataset B.1 from DIN 38402 with concentrations in µg/L and the extinction
+#' as response measured using continuous flow analysis (CFA) according to
+#' ISO 13395.
+#'
+#' @name din38402b1
+#' @docType data
+#' @format A tibble containing 12 concentration levels with the respective
+#' instrument response values.
+#' @references DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+#' https://dx.doi.org/10.31030/2657448
+#' @keywords datasets
+"din38402b1"
+
+
+
+
+
+#' Copper calibration data
+#'
+#' Example dataset B.3 from DIN 38402. Cu was measured according to ISO 11885,
+#' using ICP-OES. The concentration are reported in mg/L and the response as
+#' counts/s, describing the count of photons that are detected by the
+#' photomultiplier detector of the device.
+#'
+#' @name din38402b3
+#' @docType data
+#' @format A tibble containing 13 concentration levels and the respective
+#' instrument response values.
+#' @references DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+#' https://dx.doi.org/10.31030/2657448
+#' @keywords datasets
+"din38402b3"
+
+
+
+
+
+#' Carbamazepin calibration data
+#'
+#' Example dataset B.6 from DIN 38402 measured using LC-MS/MS. The
+#' concentrations are reported in in µg/L and the response in arbitrary
+#' units (AU).
+#'
+#' @name din38402b6
+#' @docType data
+#' @format A tibble containing 12 concentration levels and the respective
+#' instrument response values.
+#' @references DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+#' https://dx.doi.org/10.31030/2657448
+#' @keywords datasets
+"din38402b6"
+
+
+
+
+
+#' Iron calibration data
+#'
+#' Example dataset C.3 from DIN 38402 determined by ion chromatography.
+#' Concentrations are reported in mg/L and the extinction as response.
+#'
+#' @name din38402c3
+#' @docType data
+#' @format A tibble containing 10 concentration levels and the respective
+#' response values.
+#' @references DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+#' https://dx.doi.org/10.31030/2657448
+#' @keywords datasets
+"din38402c3"
+
diff --git a/R/linearity.R b/R/linearity.R
new file mode 100644
index 0000000..8a4f09b
--- /dev/null
+++ b/R/linearity.R
@@ -0,0 +1,107 @@
+#' Assess the linearity of a calibration curve
+#'
+#' A function to create diagnostic plots for the assessment of the linearity of
+#' calibration data based on their point-to-point slope or the curvature.
+#' The underlying methods follow ISO 84 66-1:2021 and DIN 32 402-51:2017
+#' (German Industrial Norm).
+#'
+#' The point-to-point slope method is based on the assumption that the slope
+#' between two points should not vary greatly within the linear range.
+#'
+#' The curvature method is similar to the point-to-point slope method. Here,
+#' the ratio between the instrument signal and the concentration of the
+#' calibration standard is assumed not to vary greatly within the linear range.
+#'
+#' The use of the Mandel test is discouraged due to its limitations in the
+#' identification of non-linear behaviour of calibration curves (Andrade and
+#' Gomes-Carracedo, 2013).
+#'
+#' @param x numeric vector of independent values (usually concentrations).
+#' @param y numeric vector of dependent values (usually the signal of the
+#' analytical device).
+#' @param method character string. Supported methods are "slope" and
+#' "curvature".
+#' @param tolerance numeric value between 0 and 1, describing the acceptable
+#' deviation from the median of the slopes or the signal-to-concentration
+#' ratio. The default tolerance is 10%.
+#' @return returns a diagnostic plot
+#'
+#' @author Anıl Axel Tellbüscher
+#'
+#' @importFrom graphics abline
+#' @importFrom graphics lines
+#' @importFrom stats median
+#'
+#' @examples
+#' # Continuous Flow Analysis (CFA) data
+#' data(din38402b1)
+#'
+#' # Point-to-point slope plot
+#' linearity(din38402b1$conc, din38402b1$ext, method = "slope")
+#'
+#' # Curvature plot
+#' linearity(din38402b1$conc, din38402b1$ext, method = "curvature")
+#'
+#' @references ISO 8466-1:2021. Water quality — Calibration and evaluation of
+#' analytical methods — Part 1: Linear calibration function
+#'
+#' J. M. Andrade and M. P. Gomez-Carracedo (2013) Notes on the use of
+#' Mandel's test to check for nonlinearity in laboratory calibrations.
+#' Analytical Methods 5(5), 1145 - 1149.
+#'
+#' @export
+# Function to assess linearity of data using either slope or curvature method
+linearity <- function(x, y, method = c("slope", "curvature"), tolerance = 0.1) {
+
+ # Check data integrity
+ # Ensure that x and y vectors have the same length
+ stopifnot("x and y must have the same length!" = length(x) == length(y))
+
+ method <- match.arg(method)
+
+ # Calculate the 'result' based on the chosen method
+ if (method == "slope") {
+ # For the 'slope' method, calculate the difference between consecutive points
+ x_diff = diff(x) # Difference in x values
+ y_diff = diff(y) # Difference in y values
+ result = y_diff / x_diff # Point-to-point slope (rate of change)
+ } else if (method == "curvature") {
+ # For the 'curvature' method, calculate the signal-to-concentration ratio
+ result = y / x # Element-wise division of y by x
+ }
+
+ # Calculate the median of the results for tolerance check
+ result_median <- median(result)
+
+ # Define upper and lower tolerance boundaries
+ upper_tolerance <- result_median + tolerance * result_median
+ lower_tolerance <- result_median - tolerance * result_median
+
+ # Create a data frame to store the result and corresponding indices
+ df <- data.frame(result = result, index = 1:length(result))
+
+ # Identify points that fall outside the tolerance range
+ outside_tolerance <- rbind(
+ subset(df, result > upper_tolerance), # Points above the upper tolerance
+ subset(df, result < lower_tolerance) # Points below the lower tolerance
+ )
+
+ # Basic scatter plot of the result against the index
+ plot(result ~ index, data = df,
+ main = "linearity assessment", ylab = method,
+ pch = 16)
+
+ # Draw a line connecting all the points to visualize the trend
+ lines(df$index, df$result, col = "blue") # Blue line connecting points
+
+ # Highlight points that are outside the tolerance range in red
+ points(x = outside_tolerance$index, y = outside_tolerance$result,
+ pch = 16, col = "red")
+
+ # Add a horizontal line at the median value of the result
+ abline(h = result_median, col = "red")
+
+ # Add dashed horizontal lines at the upper and lower tolerance limits
+ abline(h = upper_tolerance, col = "red", lty = 3) # Upper tolerance
+ abline(h = lower_tolerance, col = "red", lty = 3) # Lower tolerance
+}
diff --git a/README.html b/README.html
index 3bb6cbd..c4809fd 100644
--- a/README.html
+++ b/README.html
@@ -596,82 +596,105 @@ body {
}
</style>
+
</head>
<body>
<!-- README.md is generated from README.rmd. Please edit that file -->
-<h1 id="chemcal---calibration-functions-for-analytical-chemistry">chemCal - Calibration functions for analytical chemistry</h1>
+<h1 id="chemcal---calibration-functions-for-analytical-chemistry">chemCal -
+Calibration functions for analytical chemistry</h1>
<!-- badges: start -->
-<p><a href="https://cran.r-project.org/package=chemCal"><img src="data:image/svg+xml; charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4NSIgaGVpZ2h0PSIyMCIgYXJpYS1sYWJlbD0iQ1JBTiAwLjIuMiI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4Mj0iMCIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYmJiIiBzdG9wLW9wYWNpdHk9Ii4xIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxtYXNrIGlkPSJhIj4KICAgIDxyZWN0IHdpZHRoPSI4NSIgaGVpZ2h0PSIyMCIgcng9IjMiIGZpbGw9IiNmZmYiLz4KICA8L21hc2s+CiAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICA8cGF0aCBmaWxsPSIjNTU1IiBkPSJNMCAwaDQzdjIwSDB6Ii8+CiAgICA8cGF0aCBmaWxsPSIjNGMxIiBkPSJNNDMgMGg2M3YyMEg0M3oiLz4KICAgIDxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik0wIDBoODV2MjBIMHoiLz4KICA8L2c+CiAgPGcgZmlsbD0iI2ZmZiIgdGV4dC1hbmNob3I9Im1pZGRsZSIKICAgICBmb250LWZhbWlseT0iRGVqYVZ1IFNhbnMsVmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMSI+CiAgICA8dGV4dCB4PSIyMS41IiB5PSIxNSIgZmlsbD0iIzAxMDEwMSIgZmlsbC1vcGFjaXR5PSIuMyI+CiAgICAgIENSQU4KICAgIDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIxLjUiIHk9IjE0Ij4KICAgICAgQ1JBTgogICAgPC90ZXh0PgogICAgPHRleHQgeD0iNjMiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj4KICAgICAgMC4yLjIKICAgIDwvdGV4dD4KICAgIDx0ZXh0IHg9IjYzIiB5PSIxNCI+CiAgICAgIDAuMi4yCiAgICA8L3RleHQ+CiAgPC9nPgo8L3N2Zz4=" /></a> <a href="https://app.travis-ci.com/github/jranke/chemCal"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5MCIgaGVpZ2h0PSIyMCI+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4Mj0iMCIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2JiYiIgc3RvcC1vcGFjaXR5PSIuMSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIuMSIvPjwvbGluZWFyR3JhZGllbnQ+PHJlY3Qgcng9IjMiIHdpZHRoPSI5MCIgaGVpZ2h0PSIyMCIgZmlsbD0iIzU1NSIvPjxyZWN0IHJ4PSIzIiB4PSIzNyIgd2lkdGg9IjUzIiBoZWlnaHQ9IjIwIiBmaWxsPSIjNGMxIi8+PHBhdGggZmlsbD0iIzRjMSIgZD0iTTM3IDBoNHYyMGgtNHoiLz48cmVjdCByeD0iMyIgd2lkdGg9IjkwIiBoZWlnaHQ9IjIwIiBmaWxsPSJ1cmwoI2EpIi8+PGcgZmlsbD0iI2ZmZiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IkRlamFWdSBTYW5zLFZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTEiPjx0ZXh0IHg9IjE5LjUiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj5idWlsZDwvdGV4dD48dGV4dCB4PSIxOS41IiB5PSIxNCI+YnVpbGQ8L3RleHQ+PHRleHQgeD0iNjIuNSIgeT0iMTUiIGZpbGw9IiMwMTAxMDEiIGZpbGwtb3BhY2l0eT0iLjMiPnBhc3Npbmc8L3RleHQ+PHRleHQgeD0iNjIuNSIgeT0iMTQiPnBhc3Npbmc8L3RleHQ+PC9nPjwvc3ZnPg==" alt="Build Status" /></a> <a href="https://codecov.io/github/jranke/chemCal"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMTIiIGhlaWdodD0iMjAiPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4Mj0iMCIgeTI9IjEwMCUiPgogICAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2JiYiIgc3RvcC1vcGFjaXR5PSIuMSIgLz4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPG1hc2sgaWQ9ImEiPgogICAgICAgIDxyZWN0IHdpZHRoPSIxMTIiIGhlaWdodD0iMjAiIHJ4PSIzIiBmaWxsPSIjZmZmIiAvPgogICAgPC9tYXNrPgogICAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICAgICAgPHBhdGggZmlsbD0iIzU1NSIgZD0iTTAgMGg3NnYyMEgweiIgLz4KICAgICAgICA8cGF0aCBmaWxsPSIjZTA1ZDQ0IiBkPSJNNzYgMGgzNnYyMEg3NnoiIC8+CiAgICAgICAgPHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTAgMGgxMTJ2MjBIMHoiIC8+CiAgICA8L2c+CiAgICA8ZyBmaWxsPSIjZmZmIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iRGVqYVZ1IFNhbnMsVmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMSI+CiAgICAgICAgPHRleHQgeD0iNDYiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj5jb2RlY292PC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjQ2IiB5PSIxNCI+Y29kZWNvdjwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI5MyIgeT0iMTUiIGZpbGw9IiMwMTAxMDEiIGZpbGwtb3BhY2l0eT0iLjMiPjUzJTwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI5MyIgeT0iMTQiPjUzJTwvdGV4dD4KICAgIDwvZz4KICAgIDxzdmcgdmlld0JveD0iMTIwIC04IDYwIDYwIj4KICAgICAgICA8cGF0aCBkPSJNMjMuMDEzIDBDMTAuMzMzLjAwOS4wMSAxMC4yMiAwIDIyLjc2MnYuMDU4bDMuOTE0IDIuMjc1LjA1My0uMDM2YTExLjI5MSAxMS4yOTEgMCAwIDEgOC4zNTItMS43NjcgMTAuOTExIDEwLjkxMSAwIDAgMSA1LjUgMi43MjZsLjY3My42MjQuMzgtLjgyOGMuMzY4LS44MDIuNzkzLTEuNTU2IDEuMjY0LTIuMjQuMTktLjI3Ni4zOTgtLjU1NC42MzctLjg1MWwuMzkzLS40OS0uNDg0LS40MDRhMTYuMDggMTYuMDggMCAwIDAtNy40NTMtMy40NjYgMTYuNDgyIDE2LjQ4MiAwIDAgMC03LjcwNS40NDlDNy4zODYgMTAuNjgzIDE0LjU2IDUuMDE2IDIzLjAzIDUuMDFjNC43NzkgMCA5LjI3MiAxLjg0IDEyLjY1MSA1LjE4IDIuNDEgMi4zODIgNC4wNjkgNS4zNSA0LjgwNyA4LjU5MWExNi41MyAxNi41MyAwIDAgMC00Ljc5Mi0uNzIzbC0uMjkyLS4wMDJhMTYuNzA3IDE2LjcwNyAwIDAgMC0xLjkwMi4xNGwtLjA4LjAxMmMtLjI4LjAzNy0uNTI0LjA3NC0uNzQ4LjExNS0uMTEuMDE5LS4yMTguMDQxLS4zMjcuMDYzLS4yNTcuMDUyLS41MS4xMDgtLjc1LjE2OWwtLjI2NS4wNjdhMTYuMzkgMTYuMzkgMCAwIDAtLjkyNi4yNzZsLS4wNTYuMDE4Yy0uNjgyLjIzLTEuMzYuNTExLTIuMDE2LjgzOGwtLjA1Mi4wMjZjLS4yOS4xNDUtLjU4NC4zMDUtLjg5OS40OWwtLjA2OS4wNGExNS41OTYgMTUuNTk2IDAgMCAwLTQuMDYxIDMuNDY2bC0uMTQ1LjE3NWMtLjI5LjM2LS41MjEuNjY2LS43MjMuOTYtLjE3LjI0Ny0uMzQuNTEzLS41NTIuODY0bC0uMTE2LjE5OWMtLjE3LjI5Mi0uMzIuNTctLjQ0OS44MjRsLS4wMy4wNTdhMTYuMTE2IDE2LjExNiAwIDAgMC0uODQzIDIuMDI5bC0uMDM0LjEwMmExNS42NSAxNS42NSAwIDAgMC0uNzg2IDUuMTc0bC4wMDMuMjE0YTIxLjUyMyAyMS41MjMgMCAwIDAgLjA0Ljc1NGMuMDA5LjExOS4wMi4yMzcuMDMyLjM1NS4wMTQuMTQ1LjAzMi4yOS4wNDkuNDMybC4wMS4wOGMuMDEuMDY3LjAxNy4xMzMuMDI2LjE5Ny4wMzQuMjQyLjA3NC40OC4xMTkuNzIuNDYzIDIuNDE5IDEuNjIgNC44MzYgMy4zNDUgNi45OWwuMDc4LjA5OC4wOC0uMDk1Yy42ODgtLjgxIDIuMzk1LTMuMzggMi41MzktNC45MjJsLjAwMy0uMDI5LS4wMTQtLjAyNWExMC43MjcgMTAuNzI3IDAgMCAxLTEuMjI2LTQuOTU2YzAtNS43NiA0LjU0NS0xMC41NDQgMTAuMzQzLTEwLjg5bC4zODEtLjAxNGExMS40MDMgMTEuNDAzIDAgMCAxIDYuNjUxIDEuOTU3bC4wNTQuMDM2IDMuODYyLTIuMjM3LjA1LS4wM3YtLjA1NmMuMDA2LTYuMDgtMi4zODQtMTEuNzkzLTYuNzI5LTE2LjA4OUMzNC45MzIgMi4zNjEgMjkuMTYgMCAyMy4wMTMgMCIgZmlsbD0iI0YwMUY3QSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgICA8L3N2Zz4KPC9zdmc+" alt="codecov" /></a></p>
+<p><a href="https://cran.r-project.org/package=chemCal"><img src="data:image/svg+xml; charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4NSIgaGVpZ2h0PSIyMCIgYXJpYS1sYWJlbD0iQ1JBTiAwLjIuMyI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4Mj0iMCIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYmJiIiBzdG9wLW9wYWNpdHk9Ii4xIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxtYXNrIGlkPSJhIj4KICAgIDxyZWN0IHdpZHRoPSI4NSIgaGVpZ2h0PSIyMCIgcng9IjMiIGZpbGw9IiNmZmYiLz4KICA8L21hc2s+CiAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICA8cGF0aCBmaWxsPSIjNTU1IiBkPSJNMCAwaDQzdjIwSDB6Ii8+CiAgICA8cGF0aCBmaWxsPSIjNGMxIiBkPSJNNDMgMGg2M3YyMEg0M3oiLz4KICAgIDxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik0wIDBoODV2MjBIMHoiLz4KICA8L2c+CiAgPGcgZmlsbD0iI2ZmZiIgdGV4dC1hbmNob3I9Im1pZGRsZSIKICAgICBmb250LWZhbWlseT0iRGVqYVZ1IFNhbnMsVmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMSI+CiAgICA8dGV4dCB4PSIyMS41IiB5PSIxNSIgZmlsbD0iIzAxMDEwMSIgZmlsbC1vcGFjaXR5PSIuMyI+CiAgICAgIENSQU4KICAgIDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIxLjUiIHk9IjE0Ij4KICAgICAgQ1JBTgogICAgPC90ZXh0PgogICAgPHRleHQgeD0iNjMiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj4KICAgICAgMC4yLjMKICAgIDwvdGV4dD4KICAgIDx0ZXh0IHg9IjYzIiB5PSIxNCI+CiAgICAgIDAuMi4zCiAgICA8L3RleHQ+CiAgPC9nPgo8L3N2Zz4=" /></a> <a href="https://app.codecov.io/gh/jranke/chemCal"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMTIiIGhlaWdodD0iMjAiPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4Mj0iMCIgeTI9IjEwMCUiPgogICAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2JiYiIgc3RvcC1vcGFjaXR5PSIuMSIgLz4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPG1hc2sgaWQ9ImEiPgogICAgICAgIDxyZWN0IHdpZHRoPSIxMTIiIGhlaWdodD0iMjAiIHJ4PSIzIiBmaWxsPSIjZmZmIiAvPgogICAgPC9tYXNrPgogICAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICAgICAgPHBhdGggZmlsbD0iIzU1NSIgZD0iTTAgMGg3M3YyMEgweiIgLz4KICAgICAgICA8cGF0aCBmaWxsPSIjZTA1ZDQ0IiBkPSJNNzMgMGgzOXYyMEg3M3oiIC8+CiAgICAgICAgPHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTAgMGgxMTJ2MjBIMHoiIC8+CiAgICA8L2c+CiAgICA8ZyBmaWxsPSIjZmZmIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iRGVqYVZ1IFNhbnMsVmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMSI+CiAgICAgICAgPHRleHQgeD0iNDYiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj5jb2RlY292PC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjQ2IiB5PSIxNCI+Y29kZWNvdjwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI5MyIgeT0iMTUiIGZpbGw9IiMwMTAxMDEiIGZpbGwtb3BhY2l0eT0iLjMiPjUzJTwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI5MyIgeT0iMTQiPjUzJTwvdGV4dD4KICAgIDwvZz4KICAgIDxzdmcgdmlld0JveD0iMTIwIC04IDYwIDYwIj4KICAgICAgICA8cGF0aCBkPSJNMjMuMDEzIDBDMTAuMzMzLjAwOS4wMSAxMC4yMiAwIDIyLjc2MnYuMDU4bDMuOTE0IDIuMjc1LjA1My0uMDM2YTExLjI5MSAxMS4yOTEgMCAwIDEgOC4zNTItMS43NjcgMTAuOTExIDEwLjkxMSAwIDAgMSA1LjUgMi43MjZsLjY3My42MjQuMzgtLjgyOGMuMzY4LS44MDIuNzkzLTEuNTU2IDEuMjY0LTIuMjQuMTktLjI3Ni4zOTgtLjU1NC42MzctLjg1MWwuMzkzLS40OS0uNDg0LS40MDRhMTYuMDggMTYuMDggMCAwIDAtNy40NTMtMy40NjYgMTYuNDgyIDE2LjQ4MiAwIDAgMC03LjcwNS40NDlDNy4zODYgMTAuNjgzIDE0LjU2IDUuMDE2IDIzLjAzIDUuMDFjNC43NzkgMCA5LjI3MiAxLjg0IDEyLjY1MSA1LjE4IDIuNDEgMi4zODIgNC4wNjkgNS4zNSA0LjgwNyA4LjU5MWExNi41MyAxNi41MyAwIDAgMC00Ljc5Mi0uNzIzbC0uMjkyLS4wMDJhMTYuNzA3IDE2LjcwNyAwIDAgMC0xLjkwMi4xNGwtLjA4LjAxMmMtLjI4LjAzNy0uNTI0LjA3NC0uNzQ4LjExNS0uMTEuMDE5LS4yMTguMDQxLS4zMjcuMDYzLS4yNTcuMDUyLS41MS4xMDgtLjc1LjE2OWwtLjI2NS4wNjdhMTYuMzkgMTYuMzkgMCAwIDAtLjkyNi4yNzZsLS4wNTYuMDE4Yy0uNjgyLjIzLTEuMzYuNTExLTIuMDE2LjgzOGwtLjA1Mi4wMjZjLS4yOS4xNDUtLjU4NC4zMDUtLjg5OS40OWwtLjA2OS4wNGExNS41OTYgMTUuNTk2IDAgMCAwLTQuMDYxIDMuNDY2bC0uMTQ1LjE3NWMtLjI5LjM2LS41MjEuNjY2LS43MjMuOTYtLjE3LjI0Ny0uMzQuNTEzLS41NTIuODY0bC0uMTE2LjE5OWMtLjE3LjI5Mi0uMzIuNTctLjQ0OS44MjRsLS4wMy4wNTdhMTYuMTE2IDE2LjExNiAwIDAgMC0uODQzIDIuMDI5bC0uMDM0LjEwMmExNS42NSAxNS42NSAwIDAgMC0uNzg2IDUuMTc0bC4wMDMuMjE0YTIxLjUyMyAyMS41MjMgMCAwIDAgLjA0Ljc1NGMuMDA5LjExOS4wMi4yMzcuMDMyLjM1NS4wMTQuMTQ1LjAzMi4yOS4wNDkuNDMybC4wMS4wOGMuMDEuMDY3LjAxNy4xMzMuMDI2LjE5Ny4wMzQuMjQyLjA3NC40OC4xMTkuNzIuNDYzIDIuNDE5IDEuNjIgNC44MzYgMy4zNDUgNi45OWwuMDc4LjA5OC4wOC0uMDk1Yy42ODgtLjgxIDIuMzk1LTMuMzggMi41MzktNC45MjJsLjAwMy0uMDI5LS4wMTQtLjAyNWExMC43MjcgMTAuNzI3IDAgMCAxLTEuMjI2LTQuOTU2YzAtNS43NiA0LjU0NS0xMC41NDQgMTAuMzQzLTEwLjg5bC4zODEtLjAxNGExMS40MDMgMTEuNDAzIDAgMCAxIDYuNjUxIDEuOTU3bC4wNTQuMDM2IDMuODYyLTIuMjM3LjA1LS4wM3YtLjA1NmMuMDA2LTYuMDgtMi4zODQtMTEuNzkzLTYuNzI5LTE2LjA4OUMzNC45MzIgMi4zNjEgMjkuMTYgMCAyMy4wMTMgMCIgZmlsbD0iI0YwMUY3QSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgICA8L3N2Zz4KPC9zdmc+" alt="Codecov test coverage" /></a> <a href="https://github.com/jranke/chemCal/actions/workflows/R-CMD-check.yaml"><img src="data:image/svg+xml; charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxODIiIGhlaWdodD0iMjAiPgogIDx0aXRsZT5SLUNNRC1jaGVjay55YW1sIC0gcGFzc2luZzwvdGl0bGU+CiAgPGRlZnM+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9IndvcmtmbG93LWZpbGwiIHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9IjEwMCUiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNDQ0RDU2IiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNDI5MkUiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ic3RhdGUtZmlsbCIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNEQwNTgiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzI4QTc0NSIgb2Zmc2V0PSIxMDAlIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPGcgZm9udC1mYW1pbHk9IiYjMzk7RGVqYVZ1IFNhbnMmIzM5OyxWZXJkYW5hLEdlbmV2YSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjExIj4KICAgICAgPHBhdGggaWQ9IndvcmtmbG93LWJnIiBkPSJNMCwzIEMwLDEuMzQzMSAxLjM1NTIsMCAzLjAyNzAyNzAzLDAgTDEzMiwwIEwxMzIsMjAgTDMuMDI3MDI3MDMsMjAgQzEuMzU1MiwyMCAwLDE4LjY1NjkgMCwxNyBMMCwzIFoiIGZpbGw9InVybCgjd29ya2Zsb3ctZmlsbCkiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPgogICAgICA8dGV4dCBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj4KICAgICAgICA8dHNwYW4geD0iMjIuMTk4MTk4MiIgeT0iMTUiIGFyaWEtaGlkZGVuPSJ0cnVlIj5SLUNNRC1jaGVjay55YW1sPC90c3Bhbj4KICAgICAgPC90ZXh0PgogICAgICA8dGV4dCBmaWxsPSIjRkZGRkZGIj4KICAgICAgICA8dHNwYW4geD0iMjIuMTk4MTk4MiIgeT0iMTQiPlItQ01ELWNoZWNrLnlhbWw8L3RzcGFuPgogICAgICA8L3RleHQ+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzIpIiBmb250LWZhbWlseT0iJiMzOTtEZWphVnUgU2FucyYjMzk7LFZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTEiPgogICAgICA8cGF0aCBkPSJNMCAwaDQ2LjkzOUM0OC42MjkgMCA1MCAxLjM0MyA1MCAzdjE0YzAgMS42NTctMS4zNyAzLTMuMDYxIDNIMFYweiIgaWQ9InN0YXRlLWJnIiBmaWxsPSJ1cmwoI3N0YXRlLWZpbGwpIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgPHRleHQgZmlsbD0iIzAxMDEwMSIgZmlsbC1vcGFjaXR5PSIuMyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgIDx0c3BhbiB4PSI0IiB5PSIxNSI+cGFzc2luZzwvdHNwYW4+CiAgICAgIDwvdGV4dD4KICAgICAgPHRleHQgZmlsbD0iI0ZGRkZGRiI+CiAgICAgICAgPHRzcGFuIHg9IjQiIHk9IjE0Ij5wYXNzaW5nPC90c3Bhbj4KICAgICAgPC90ZXh0PgogICAgPC9nPgogICAgPHBhdGggZmlsbD0iIzk1OURBNSIgZD0iTTExIDNjLTMuODY4IDAtNyAzLjEzMi03IDdhNi45OTYgNi45OTYgMCAwIDAgNC43ODYgNi42NDFjLjM1LjA2Mi40ODItLjE0OC40ODItLjMzMiAwLS4xNjYtLjAxLS43MTgtLjAxLTEuMzA0LTEuNzU4LjMyNC0yLjIxMy0uNDI5LTIuMzUzLS44MjItLjA3OS0uMjAyLS40Mi0uODIzLS43MTctLjk5LS4yNDUtLjEzLS41OTUtLjQ1NC0uMDEtLjQ2My41NTItLjAwOS45NDYuNTA4IDEuMDc3LjcxOC42MyAxLjA1OCAxLjYzNi43NiAyLjAzOS41NzcuMDYxLS40NTUuMjQ1LS43NjEuNDQ2LS45MzYtMS41NTctLjE3NS0zLjE4NS0uNzc5LTMuMTg1LTMuNDU2IDAtLjc2Mi4yNzEtMS4zOTIuNzE4LTEuODgyLS4wNy0uMTc1LS4zMTUtLjg5Mi4wNy0xLjg1NSAwIDAgLjU4Ni0uMTgzIDEuOTI1LjcxOGE2LjUgNi41IDAgMCAxIDEuNzUtLjIzNiA2LjUgNi41IDAgMCAxIDEuNzUuMjM2YzEuMzM4LS45MSAxLjkyNS0uNzE4IDEuOTI1LS43MTguMzg1Ljk2My4xNCAxLjY4LjA3IDEuODU1LjQ0Ni40OS43MTcgMS4xMTIuNzE3IDEuODgyIDAgMi42ODYtMS42MzYgMy4yOC0zLjE5NCAzLjQ1Ni4yNTQuMjE5LjQ3My42MzkuNDczIDEuMjk1IDAgLjkzNi0uMDA5IDEuNjg5LS4wMDkgMS45MjUgMCAuMTg0LjEzMS40MDIuNDgxLjMzMkE3LjAxMSA3LjAxMSAwIDAgMCAxOCAxMGMwLTMuODY3LTMuMTMzLTctNy03eiI+PC9wYXRoPgogIDwvZz4KPC9zdmc+Cgo=" alt="R-CMD-check" /></a></p>
<!-- badges: end -->
<h2 id="overview">Overview</h2>
-<p>chemCal is an R package providing some basic functions for conveniently working with linear calibration curves with one explanatory variable.</p>
+<p>chemCal is an R package providing some basic functions for
+conveniently working with linear calibration curves with one explanatory
+variable.</p>
<h2 id="installation">Installation</h2>
-<p>From within <a href="https://www.r-project.org/">R</a>, get the official chemCal release using</p>
-<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true"></a><span class="kw">install.packages</span>(<span class="st">&quot;chemCal&quot;</span>)</span></code></pre></div>
+<p>From within <a href="https://www.r-project.org/">R</a>, get the
+official chemCal release using</p>
+<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">install.packages</span>(<span class="st">&quot;chemCal&quot;</span>)</span></code></pre></div>
<h2 id="usage">Usage</h2>
-<p>chemCal works with univariate linear models of class <code>lm</code>. Working with one of the datasets coming with chemCal, we can produce a calibration plot using the <code>calplot</code> function:</p>
+<p>chemCal works with univariate linear models of class <code>lm</code>.
+Working with one of the datasets coming with chemCal, we can produce a
+calibration plot using the <code>calplot</code> function:</p>
<h3 id="plotting-a-calibration">Plotting a calibration</h3>
-<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true"></a><span class="kw">library</span>(chemCal)</span>
-<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a>m0 &lt;-<span class="st"> </span><span class="kw">lm</span>(y <span class="op">~</span><span class="st"> </span>x, <span class="dt">data =</span> massart97ex3)</span>
-<span id="cb2-3"><a href="#cb2-3" aria-hidden="true"></a><span class="kw">calplot</span>(m0)</span></code></pre></div>
+<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(chemCal)</span>
+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>m0 <span class="ot">&lt;-</span> <span class="fu">lm</span>(y <span class="sc">~</span> x, <span class="at">data =</span> massart97ex3)</span>
+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="fu">calplot</span>(m0)</span></code></pre></div>
<p><img src="data:image/png;base64,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" /><!-- --></p>
<h3 id="lod-and-loq">LOD and LOQ</h3>
-<p>If you use unweighted regression, as in the above example, we can calculate a Limit Of Detection (LOD) from the calibration data.</p>
-<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true"></a><span class="kw">lod</span>(m0)</span>
-<span id="cb3-2"><a href="#cb3-2" aria-hidden="true"></a><span class="co">#&gt; $x</span></span>
-<span id="cb3-3"><a href="#cb3-3" aria-hidden="true"></a><span class="co">#&gt; [1] 5.407085</span></span>
-<span id="cb3-4"><a href="#cb3-4" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb3-5"><a href="#cb3-5" aria-hidden="true"></a><span class="co">#&gt; $y</span></span>
-<span id="cb3-6"><a href="#cb3-6" aria-hidden="true"></a><span class="co">#&gt; [1] 13.63911</span></span></code></pre></div>
-<p>This is the minimum detectable value (German: Erfassungsgrenze), i.e. the value where the probability that the signal is not detected although the analyte is present is below a specified error tolerance beta (default is 0.05 following the IUPAC recommendation).</p>
-<p>You can also calculate the decision limit (German: Nachweisgrenze), i.e. the value that is significantly different from the blank signal with an error tolerance alpha (default is 0.05, again following IUPAC recommendations) by setting beta to 0.5.</p>
-<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a><span class="kw">lod</span>(m0, <span class="dt">beta =</span> <span class="fl">0.5</span>)</span>
-<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a><span class="co">#&gt; $x</span></span>
-<span id="cb4-3"><a href="#cb4-3" aria-hidden="true"></a><span class="co">#&gt; [1] 2.720388</span></span>
-<span id="cb4-4"><a href="#cb4-4" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a><span class="co">#&gt; $y</span></span>
-<span id="cb4-6"><a href="#cb4-6" aria-hidden="true"></a><span class="co">#&gt; [1] 8.314841</span></span></code></pre></div>
-<p>Furthermore, you can calculate the Limit Of Quantification (LOQ), being defined as the value where the relative error of the quantification given the calibration model reaches a prespecified value (default is 1/3).</p>
-<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true"></a><span class="kw">loq</span>(m0)</span>
-<span id="cb5-2"><a href="#cb5-2" aria-hidden="true"></a><span class="co">#&gt; $x</span></span>
-<span id="cb5-3"><a href="#cb5-3" aria-hidden="true"></a><span class="co">#&gt; [1] 9.627349</span></span>
-<span id="cb5-4"><a href="#cb5-4" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb5-5"><a href="#cb5-5" aria-hidden="true"></a><span class="co">#&gt; $y</span></span>
-<span id="cb5-6"><a href="#cb5-6" aria-hidden="true"></a><span class="co">#&gt; [1] 22.00246</span></span></code></pre></div>
-<h3 id="confidence-intervals-for-measured-values">Confidence intervals for measured values</h3>
-<p>Finally, you can get a confidence interval for the values measured using the calibration curve, i.e. for the inverse predictions using the function <code>inverse.predict</code>.</p>
-<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true"></a><span class="kw">inverse.predict</span>(m0, <span class="dv">90</span>)</span>
-<span id="cb6-2"><a href="#cb6-2" aria-hidden="true"></a><span class="co">#&gt; $Prediction</span></span>
-<span id="cb6-3"><a href="#cb6-3" aria-hidden="true"></a><span class="co">#&gt; [1] 43.93983</span></span>
-<span id="cb6-4"><a href="#cb6-4" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb6-5"><a href="#cb6-5" aria-hidden="true"></a><span class="co">#&gt; $`Standard Error`</span></span>
-<span id="cb6-6"><a href="#cb6-6" aria-hidden="true"></a><span class="co">#&gt; [1] 1.576985</span></span>
-<span id="cb6-7"><a href="#cb6-7" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb6-8"><a href="#cb6-8" aria-hidden="true"></a><span class="co">#&gt; $Confidence</span></span>
-<span id="cb6-9"><a href="#cb6-9" aria-hidden="true"></a><span class="co">#&gt; [1] 3.230307</span></span>
-<span id="cb6-10"><a href="#cb6-10" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb6-11"><a href="#cb6-11" aria-hidden="true"></a><span class="co">#&gt; $`Confidence Limits`</span></span>
-<span id="cb6-12"><a href="#cb6-12" aria-hidden="true"></a><span class="co">#&gt; [1] 40.70952 47.17014</span></span></code></pre></div>
-<p>If you have replicate measurements of the same sample, you can also give a vector of numbers.</p>
-<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true"></a><span class="kw">inverse.predict</span>(m0, <span class="kw">c</span>(<span class="dv">91</span>, <span class="dv">89</span>, <span class="dv">87</span>, <span class="dv">93</span>, <span class="dv">90</span>))</span>
-<span id="cb7-2"><a href="#cb7-2" aria-hidden="true"></a><span class="co">#&gt; $Prediction</span></span>
-<span id="cb7-3"><a href="#cb7-3" aria-hidden="true"></a><span class="co">#&gt; [1] 43.93983</span></span>
-<span id="cb7-4"><a href="#cb7-4" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb7-5"><a href="#cb7-5" aria-hidden="true"></a><span class="co">#&gt; $`Standard Error`</span></span>
-<span id="cb7-6"><a href="#cb7-6" aria-hidden="true"></a><span class="co">#&gt; [1] 0.796884</span></span>
-<span id="cb7-7"><a href="#cb7-7" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb7-8"><a href="#cb7-8" aria-hidden="true"></a><span class="co">#&gt; $Confidence</span></span>
-<span id="cb7-9"><a href="#cb7-9" aria-hidden="true"></a><span class="co">#&gt; [1] 1.632343</span></span>
-<span id="cb7-10"><a href="#cb7-10" aria-hidden="true"></a><span class="co">#&gt; </span></span>
-<span id="cb7-11"><a href="#cb7-11" aria-hidden="true"></a><span class="co">#&gt; $`Confidence Limits`</span></span>
-<span id="cb7-12"><a href="#cb7-12" aria-hidden="true"></a><span class="co">#&gt; [1] 42.30749 45.57217</span></span></code></pre></div>
+<p>If you use unweighted regression, as in the above example, we can
+calculate a Limit Of Detection (LOD) from the calibration data.</p>
+<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">lod</span>(m0)</span>
+<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $x</span></span>
+<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 5.407085</span></span>
+<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $y</span></span>
+<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 13.63911</span></span></code></pre></div>
+<p>This is the minimum detectable value (German: Erfassungsgrenze),
+i.e. the value where the probability that the signal is not detected
+although the analyte is present is below a specified error tolerance
+beta (default is 0.05 following the IUPAC recommendation).</p>
+<p>You can also calculate the decision limit (German: Nachweisgrenze),
+i.e. the value that is significantly different from the blank signal
+with an error tolerance alpha (default is 0.05, again following IUPAC
+recommendations) by setting beta to 0.5.</p>
+<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">lod</span>(m0, <span class="at">beta =</span> <span class="fl">0.5</span>)</span>
+<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $x</span></span>
+<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 2.720388</span></span>
+<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $y</span></span>
+<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 8.314841</span></span></code></pre></div>
+<p>Furthermore, you can calculate the Limit Of Quantification (LOQ),
+being defined as the value where the relative error of the
+quantification given the calibration model reaches a prespecified value
+(default is 1/3).</p>
+<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="fu">loq</span>(m0)</span>
+<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $x</span></span>
+<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 9.627349</span></span>
+<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $y</span></span>
+<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 22.00246</span></span></code></pre></div>
+<h3 id="confidence-intervals-for-measured-values">Confidence intervals
+for measured values</h3>
+<p>Finally, you can get a confidence interval for the values measured
+using the calibration curve, i.e. for the inverse predictions using the
+function <code>inverse.predict</code>.</p>
+<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">inverse.predict</span>(m0, <span class="dv">90</span>)</span>
+<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $Prediction</span></span>
+<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 43.93983</span></span>
+<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $`Standard Error`</span></span>
+<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 1.576985</span></span>
+<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $Confidence</span></span>
+<span id="cb6-9"><a href="#cb6-9" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 3.230307</span></span>
+<span id="cb6-10"><a href="#cb6-10" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb6-11"><a href="#cb6-11" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $`Confidence Limits`</span></span>
+<span id="cb6-12"><a href="#cb6-12" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 40.70952 47.17014</span></span></code></pre></div>
+<p>If you have replicate measurements of the same sample, you can also
+give a vector of numbers.</p>
+<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">inverse.predict</span>(m0, <span class="fu">c</span>(<span class="dv">91</span>, <span class="dv">89</span>, <span class="dv">87</span>, <span class="dv">93</span>, <span class="dv">90</span>))</span>
+<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $Prediction</span></span>
+<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 43.93983</span></span>
+<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $`Standard Error`</span></span>
+<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 0.796884</span></span>
+<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $Confidence</span></span>
+<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 1.632343</span></span>
+<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; </span></span>
+<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; $`Confidence Limits`</span></span>
+<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a><span class="co">#&gt; [1] 42.30749 45.57217</span></span></code></pre></div>
<h2 id="reference">Reference</h2>
-<p>You can use the R help system to view documentation, or you can have a look at the <a href="https://pkgdown.jrwb.de/chemCal/">online documentation</a>.</p>
+<p>You can use the R help system to view documentation, or you can have
+a look at the <a href="https://pkgdown.jrwb.de/chemCal/">online
+documentation</a>.</p>
</body>
</html>
diff --git a/README.md b/README.md
index b7b4db6..ee2568b 100644
--- a/README.md
+++ b/README.md
@@ -10,8 +10,8 @@ output: github_document
<!-- badges: start -->
[![](https://www.r-pkg.org/badges/version/chemCal)](https://cran.r-project.org/package=chemCal)
-[![Build Status](https://travis-ci.com/jranke/chemCal.svg?branch=master)](https://app.travis-ci.com/github/jranke/chemCal)
-[![codecov](https://codecov.io/github/jranke/chemCal/branch/master/graphs/badge.svg)](https://codecov.io/github/jranke/chemCal)
+[![Codecov test coverage](https://codecov.io/gh/jranke/chemCal/graph/badge.svg)](https://app.codecov.io/gh/jranke/chemCal)
+[![R-CMD-check](https://github.com/jranke/chemCal/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/jranke/chemCal/actions/workflows/R-CMD-check.yaml)
<!-- badges: end -->
## Overview
@@ -24,7 +24,7 @@ with linear calibration curves with one explanatory variable.
From within [R][r-project], get the official chemCal release using
-```r
+``` r
install.packages("chemCal")
```
@@ -37,7 +37,7 @@ the datasets coming with chemCal, we can produce a calibration plot using the
### Plotting a calibration
-```r
+``` r
library(chemCal)
m0 <- lm(y ~ x, data = massart97ex3)
calplot(m0)
@@ -51,7 +51,7 @@ If you use unweighted regression, as in the above example, we can calculate a
Limit Of Detection (LOD) from the calibration data.
-```r
+``` r
lod(m0)
#> $x
#> [1] 5.407085
@@ -70,7 +70,7 @@ with an error tolerance alpha (default is 0.05, again following
IUPAC recommendations) by setting beta to 0.5.
-```r
+``` r
lod(m0, beta = 0.5)
#> $x
#> [1] 2.720388
@@ -84,7 +84,7 @@ defined as the value where the relative error of the quantification given the
calibration model reaches a prespecified value (default is 1/3).
-```r
+``` r
loq(m0)
#> $x
#> [1] 9.627349
@@ -100,7 +100,7 @@ measured using the calibration curve, i.e. for the inverse
predictions using the function `inverse.predict`.
-```r
+``` r
inverse.predict(m0, 90)
#> $Prediction
#> [1] 43.93983
@@ -119,7 +119,7 @@ If you have replicate measurements of the same sample,
you can also give a vector of numbers.
-```r
+``` r
inverse.predict(m0, c(91, 89, 87, 93, 90))
#> $Prediction
#> [1] 43.93983
diff --git a/README.rmd b/README.rmd
index 361b4c0..b0af5a4 100644
--- a/README.rmd
+++ b/README.rmd
@@ -16,8 +16,8 @@ knitr::opts_chunk$set(
<!-- badges: start -->
[![](https://www.r-pkg.org/badges/version/chemCal)](https://cran.r-project.org/package=chemCal)
-[![Build Status](https://travis-ci.com/jranke/chemCal.svg?branch=master)](https://app.travis-ci.com/github/jranke/chemCal)
-[![codecov](https://codecov.io/github/jranke/chemCal/branch/master/graphs/badge.svg)](https://codecov.io/github/jranke/chemCal)
+[![Codecov test coverage](https://codecov.io/gh/jranke/chemCal/graph/badge.svg)](https://app.codecov.io/gh/jranke/chemCal)
+[![R-CMD-check](https://github.com/jranke/chemCal/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/jranke/chemCal/actions/workflows/R-CMD-check.yaml)
<!-- badges: end -->
## Overview
diff --git a/build.log b/build.log
index 2fe8e6c..14f0a29 100644
--- a/build.log
+++ b/build.log
@@ -6,5 +6,5 @@
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* re-saving image files
-* building ‘chemCal_0.2.3.tar.gz’
+* building ‘chemCal_0.2.3.9000.tar.gz’
diff --git a/check.log b/check.log
index 60e9e39..fdc71ef 100644
--- a/check.log
+++ b/check.log
@@ -1,18 +1,19 @@
* using log directory ‘/home/jranke/git/chemCal/chemCal.Rcheck’
-* using R version 4.1.3 (2022-03-10)
-* using platform: x86_64-pc-linux-gnu (64-bit)
+* using R version 4.4.2 (2024-10-31)
+* using platform: x86_64-pc-linux-gnu
+* R was compiled by
+ gcc (Debian 12.2.0-14) 12.2.0
+ GNU Fortran (Debian 12.2.0-14) 12.2.0
+* running under: Debian GNU/Linux 12 (bookworm)
* using session charset: UTF-8
* using option ‘--as-cran’
* checking for file ‘chemCal/DESCRIPTION’ ... OK
-* this is package ‘chemCal’ version ‘0.2.3’
+* this is package ‘chemCal’ version ‘0.2.3.9000’
* package encoding: UTF-8
-* checking CRAN incoming feasibility ... NOTE
+* checking CRAN incoming feasibility ... [3s/15s] NOTE
Maintainer: ‘Johannes Ranke <johannes.ranke@jrwb.de>’
-New maintainer:
- Johannes Ranke <johannes.ranke@jrwb.de>
-Old maintainer(s):
- Johannes Ranke <jranke@uni-bremen.de>
+Version contains large components (0.2.3.9000)
* checking package namespace information ... OK
* checking package dependencies ... OK
* checking if this is a source package ... OK
@@ -21,18 +22,18 @@ Old maintainer(s):
* checking for hidden files and directories ... OK
* checking for portable file names ... OK
* checking for sufficient/correct file permissions ... OK
-* checking serialization versions ... OK
* checking whether package ‘chemCal’ can be installed ... OK
* checking installed package size ... OK
* checking package directory ... OK
-* checking for future file timestamps ... OK
+* checking for future file timestamps ... NOTE
+unable to verify current time
* checking ‘build’ directory ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
* checking for left-over files ... OK
* checking index information ... OK
* checking package subdirectories ... OK
-* checking R files for non-ASCII characters ... OK
+* checking code files for non-ASCII characters ... OK
* checking R files for syntax errors ... OK
* checking whether the package can be loaded ... OK
* checking whether the package can be loaded with stated dependencies ... OK
@@ -67,16 +68,16 @@ Old maintainer(s):
Running ‘testthat.R’
OK
* checking for unstated dependencies in vignettes ... OK
-* checking package vignettes in ‘inst/doc’ ... OK
+* checking package vignettes ... OK
* checking re-building of vignette outputs ... OK
* checking PDF version of manual ... OK
+* checking HTML version of manual ... OK
* checking for non-standard things in the check directory ... OK
* checking for detritus in the temp directory ... OK
* DONE
-Status: 1 NOTE
+Status: 2 NOTEs
See
‘/home/jranke/git/chemCal/chemCal.Rcheck/00check.log’
for details.
-
diff --git a/codecov.yml b/codecov.yml
new file mode 100644
index 0000000..04c5585
--- /dev/null
+++ b/codecov.yml
@@ -0,0 +1,14 @@
+comment: false
+
+coverage:
+ status:
+ project:
+ default:
+ target: auto
+ threshold: 1%
+ informational: true
+ patch:
+ default:
+ target: auto
+ threshold: 1%
+ informational: true
diff --git a/data/din38402b1.rda b/data/din38402b1.rda
new file mode 100644
index 0000000..ccaf554
--- /dev/null
+++ b/data/din38402b1.rda
Binary files differ
diff --git a/data/din38402b3.rda b/data/din38402b3.rda
new file mode 100644
index 0000000..80e80e3
--- /dev/null
+++ b/data/din38402b3.rda
Binary files differ
diff --git a/data/din38402b6.rda b/data/din38402b6.rda
new file mode 100644
index 0000000..def8f0e
--- /dev/null
+++ b/data/din38402b6.rda
Binary files differ
diff --git a/data/din38402c3.rda b/data/din38402c3.rda
new file mode 100644
index 0000000..c4688ef
--- /dev/null
+++ b/data/din38402c3.rda
Binary files differ
diff --git a/docs/404.html b/docs/404.html
index 9ea600b..b2a614e 100644
--- a/docs/404.html
+++ b/docs/404.html
@@ -32,7 +32,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/articles/chemCal.html b/docs/articles/chemCal.html
index bbcc568..c3b1d44 100644
--- a/docs/articles/chemCal.html
+++ b/docs/articles/chemCal.html
@@ -33,7 +33,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
@@ -72,7 +72,7 @@
<h1 data-toc-skip>Introduction to chemCal</h1>
<h4 data-toc-skip class="author">Johannes Ranke</h4>
- <h4 data-toc-skip class="date">2022-03-31</h4>
+ <h4 data-toc-skip class="date">2022-04-01</h4>
<small class="dont-index">Source: <a href="https://github.com/jranke/chemCal/blob/HEAD/vignettes/chemCal.Rmd" class="external-link"><code>vignettes/chemCal.Rmd</code></a></small>
<div class="hidden name"><code>chemCal.Rmd</code></div>
diff --git a/docs/articles/index.html b/docs/articles/index.html
index 3e53fde..c9280ff 100644
--- a/docs/articles/index.html
+++ b/docs/articles/index.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/authors.html b/docs/authors.html
index 694eb5b..cad37a1 100644
--- a/docs/authors.html
+++ b/docs/authors.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/index.html b/docs/index.html
index 7882a73..7701233 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -39,7 +39,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/news/index.html b/docs/news/index.html
index f422331..abecdea 100644
--- a/docs/news/index.html
+++ b/docs/news/index.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml
index 3c1d018..94a8afe 100644
--- a/docs/pkgdown.yml
+++ b/docs/pkgdown.yml
@@ -3,5 +3,5 @@ pkgdown: 2.0.2
pkgdown_sha: ~
articles:
chemCal: chemCal.html
-last_built: 2022-03-31T17:56Z
+last_built: 2022-04-01T12:31Z
diff --git a/docs/reference/calplot.html b/docs/reference/calplot.html
index 88321b1..9702378 100644
--- a/docs/reference/calplot.html
+++ b/docs/reference/calplot.html
@@ -18,7 +18,7 @@ confidence, and, for unweighted regression, prediction bands."><!-- mathjax --><
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/din32645.html b/docs/reference/din32645.html
index ba6246a..617741a 100644
--- a/docs/reference/din32645.html
+++ b/docs/reference/din32645.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/index.html b/docs/reference/index.html
index 9812256..3d53d28 100644
--- a/docs/reference/index.html
+++ b/docs/reference/index.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/inverse.predict.html b/docs/reference/inverse.predict.html
index 6fe081e..1207ab5 100644
--- a/docs/reference/inverse.predict.html
+++ b/docs/reference/inverse.predict.html
@@ -26,7 +26,7 @@ This is elaborated in the package vignette."><!-- mathjax --><script src="https:
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/lod.html b/docs/reference/lod.html
index 1fbae76..94e7bdc 100644
--- a/docs/reference/lod.html
+++ b/docs/reference/lod.html
@@ -24,7 +24,7 @@ significance test)."><!-- mathjax --><script src="https://cdnjs.cloudflare.com/a
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
@@ -110,14 +110,15 @@ limit of detection of a model used for calibration.</p>
</div>
<div id="note">
<h2>Note</h2>
- <p>* The default values for alpha and beta are the ones recommended by IUPAC.
-* The estimation of the LOD in terms of the analyte amount/concentration xD
+
+<ul><li><p>The default values for alpha and beta are the ones recommended by IUPAC.</p></li>
+<li><p>The estimation of the LOD in terms of the analyte amount/concentration xD
from the LOD in the signal domain SD is done by simply inverting the
-calibration function (i.e. assuming a known calibration function).
-* The calculation of a LOD from weighted calibration models requires a
+calibration function (i.e. assuming a known calibration function).</p></li>
+<li><p>The calculation of a LOD from weighted calibration models requires a
weights argument for the internally used <code><a href="https://rdrr.io/r/stats/predict.lm.html" class="external-link">predict.lm</a></code>
-function, which is currently not supported in R.</p>
- </div>
+function, which is currently not supported in R.</p></li>
+</ul></div>
<div id="references">
<h2>References</h2>
<p>Massart, L.M, Vandenginste, B.G.M., Buydens, L.M.C., De Jong,
diff --git a/docs/reference/loq.html b/docs/reference/loq.html
index 86c8f43..cfe87cc 100644
--- a/docs/reference/loq.html
+++ b/docs/reference/loq.html
@@ -22,7 +22,7 @@ inverse.predict, and L is obtained by iteration."><!-- mathjax --><script src="h
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
@@ -117,11 +117,12 @@ calibration.</p>
</div>
<div id="note">
<h2>Note</h2>
- <p>* IUPAC recommends to base the LOQ on the standard deviation of the
-signal where x = 0.
-* The calculation of a LOQ based on weighted regression is non-standard and
-therefore not tested. Feedback is welcome.</p>
- </div>
+
+<ul><li><p>IUPAC recommends to base the LOQ on the standard deviation of the
+signal where x = 0.</p></li>
+<li><p>The calculation of a LOQ based on weighted regression is non-standard and
+therefore not tested. Feedback is welcome.</p></li>
+</ul></div>
<div id="see-also">
<h2>See also</h2>
<div class="dont-index"><p>Examples for <code><a href="din32645.html">din32645</a></code></p></div>
diff --git a/docs/reference/massart97ex1.html b/docs/reference/massart97ex1.html
index a02dfe0..952297a 100644
--- a/docs/reference/massart97ex1.html
+++ b/docs/reference/massart97ex1.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/massart97ex3.html b/docs/reference/massart97ex3.html
index 5cbdbd6..44f3b64 100644
--- a/docs/reference/massart97ex3.html
+++ b/docs/reference/massart97ex3.html
@@ -17,7 +17,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/rl95_cadmium.html b/docs/reference/rl95_cadmium.html
index 4ddb8e4..c56f64b 100644
--- a/docs/reference/rl95_cadmium.html
+++ b/docs/reference/rl95_cadmium.html
@@ -19,7 +19,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/rl95_toluene.html b/docs/reference/rl95_toluene.html
index 4c8c7d2..0419b49 100644
--- a/docs/reference/rl95_toluene.html
+++ b/docs/reference/rl95_toluene.html
@@ -19,7 +19,7 @@ Presumably this is the volume that was injected into the instrument."><!-- mathj
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/docs/reference/utstats14.html b/docs/reference/utstats14.html
index 1ffc224..2ea31bf 100644
--- a/docs/reference/utstats14.html
+++ b/docs/reference/utstats14.html
@@ -18,7 +18,7 @@ https://sites.chem.utoronto.ca/chemistry/coursenotes/analsci/stats/files/example
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">chemCal</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3</span>
+ <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.2.3.9000</span>
</span>
</div>
diff --git a/man/din32645.Rd b/man/din32645.Rd
index a8e6a31..5b9603f 100644
--- a/man/din32645.Rd
+++ b/man/din32645.Rd
@@ -7,6 +7,9 @@
\format{
A dataframe containing 10 rows of x and y values.
}
+\usage{
+din32645
+}
\description{
Sample dataset to test the package.
}
diff --git a/man/din38402b1.Rd b/man/din38402b1.Rd
new file mode 100644
index 0000000..2c538b8
--- /dev/null
+++ b/man/din38402b1.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/chemCal-package.R
+\docType{data}
+\name{din38402b1}
+\alias{din38402b1}
+\title{Nitrite calibration data}
+\format{
+A tibble containing 12 concentration levels with the respective
+instrument response values.
+}
+\usage{
+din38402b1
+}
+\description{
+Example dataset B.1 from DIN 38402 with concentrations in µg/L and the extinction
+as response measured using continuous flow analysis (CFA) according to
+ISO 13395.
+}
+\references{
+DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+https://dx.doi.org/10.31030/2657448
+}
+\keyword{datasets}
diff --git a/man/din38402b3.Rd b/man/din38402b3.Rd
new file mode 100644
index 0000000..83abd0f
--- /dev/null
+++ b/man/din38402b3.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/chemCal-package.R
+\docType{data}
+\name{din38402b3}
+\alias{din38402b3}
+\title{Copper calibration data}
+\format{
+A tibble containing 13 concentration levels and the respective
+instrument response values.
+}
+\usage{
+din38402b3
+}
+\description{
+Example dataset B.3 from DIN 38402. Cu was measured according to ISO 11885,
+using ICP-OES. The concentration are reported in mg/L and the response as
+counts/s, describing the count of photons that are detected by the
+photomultiplier detector of the device.
+}
+\references{
+DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+https://dx.doi.org/10.31030/2657448
+}
+\keyword{datasets}
diff --git a/man/din38402b6.Rd b/man/din38402b6.Rd
new file mode 100644
index 0000000..289ee41
--- /dev/null
+++ b/man/din38402b6.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/chemCal-package.R
+\docType{data}
+\name{din38402b6}
+\alias{din38402b6}
+\title{Carbamazepin calibration data}
+\format{
+A tibble containing 12 concentration levels and the respective
+instrument response values.
+}
+\usage{
+din38402b6
+}
+\description{
+Example dataset B.6 from DIN 38402 measured using LC-MS/MS. The
+concentrations are reported in in µg/L and the response in arbitrary
+units (AU).
+}
+\references{
+DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+https://dx.doi.org/10.31030/2657448
+}
+\keyword{datasets}
diff --git a/man/din38402c3.Rd b/man/din38402c3.Rd
new file mode 100644
index 0000000..e9ac83e
--- /dev/null
+++ b/man/din38402c3.Rd
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/chemCal-package.R
+\docType{data}
+\name{din38402c3}
+\alias{din38402c3}
+\title{Iron calibration data}
+\format{
+A tibble containing 10 concentration levels and the respective
+response values.
+}
+\usage{
+din38402c3
+}
+\description{
+Example dataset C.3 from DIN 38402 determined by ion chromatography.
+Concentrations are reported in mg/L and the extinction as response.
+}
+\references{
+DIN 38402-51:2017-05, Beuth Verlag, Berlin.
+https://dx.doi.org/10.31030/2657448
+}
+\keyword{datasets}
diff --git a/man/linearity.Rd b/man/linearity.Rd
new file mode 100644
index 0000000..52c2423
--- /dev/null
+++ b/man/linearity.Rd
@@ -0,0 +1,64 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/linearity.R
+\name{linearity}
+\alias{linearity}
+\title{Assess the linearity of a calibration curve}
+\usage{
+linearity(x, y, method = c("slope", "curvature"), tolerance = 0.1)
+}
+\arguments{
+\item{x}{numeric vector of independent values (usually concentrations).}
+
+\item{y}{numeric vector of dependent values (usually the signal of the
+analytical device).}
+
+\item{method}{character string. Supported methods are "slope" and
+"curvature".}
+
+\item{tolerance}{numeric value between 0 and 1, describing the acceptable
+deviation from the median of the slopes or the signal-to-concentration
+ratio. The default tolerance is 10\%.}
+}
+\value{
+returns a diagnostic plot
+}
+\description{
+A function to create diagnostic plots for the assessment of the linearity of
+calibration data based on their point-to-point slope or the curvature.
+The underlying methods follow ISO 84 66-1:2021 and DIN 32 402-51:2017
+(German Industrial Norm).
+}
+\details{
+The point-to-point slope method is based on the assumption that the slope
+between two points should not vary greatly within the linear range.
+
+The curvature method is similar to the point-to-point slope method. Here,
+the ratio between the instrument signal and the concentration of the
+calibration standard is assumed not to vary greatly within the linear range.
+
+The use of the Mandel test is discouraged due to its limitations in the
+identification of non-linear behaviour of calibration curves (Andrade and
+Gomes-Carracedo, 2013).
+}
+\examples{
+# Continuous Flow Analysis (CFA) data
+data(din38402b1)
+
+# Point-to-point slope plot
+linearity(din38402b1$conc, din38402b1$ext, method = "slope")
+
+# Curvature plot
+linearity(din38402b1$conc, din38402b1$ext, method = "curvature")
+
+}
+\references{
+ISO 8466-1:2021. Water quality — Calibration and evaluation of
+analytical methods — Part 1: Linear calibration function
+
+J. M. Andrade and M. P. Gomez-Carracedo (2013) Notes on the use of
+Mandel's test to check for nonlinearity in laboratory calibrations.
+Analytical Methods 5(5), 1145 - 1149.
+}
+\author{
+Anıl Axel Tellbüscher
+}
diff --git a/man/lod.Rd b/man/lod.Rd
index 05107f3..65b9acc 100644
--- a/man/lod.Rd
+++ b/man/lod.Rd
@@ -52,14 +52,16 @@ is present (type II or false negative error), is beta (also a one-sided
significance test).
}
\note{
-* The default values for alpha and beta are the ones recommended by IUPAC.
-* The estimation of the LOD in terms of the analyte amount/concentration xD
+\itemize{
+\item The default values for alpha and beta are the ones recommended by IUPAC.
+\item The estimation of the LOD in terms of the analyte amount/concentration xD
from the LOD in the signal domain SD is done by simply inverting the
calibration function (i.e. assuming a known calibration function).
-* The calculation of a LOD from weighted calibration models requires a
+\item The calculation of a LOD from weighted calibration models requires a
weights argument for the internally used \code{\link{predict.lm}}
function, which is currently not supported in R.
}
+}
\examples{
m <- lm(y ~ x, data = din32645)
diff --git a/man/loq.Rd b/man/loq.Rd
index 390d3a8..d55131f 100644
--- a/man/loq.Rd
+++ b/man/loq.Rd
@@ -61,11 +61,13 @@ where c(L) is half of the length of the confidence interval at the limit L
\code{\link{inverse.predict}}, and L is obtained by iteration.
}
\note{
-* IUPAC recommends to base the LOQ on the standard deviation of the
+\itemize{
+\item IUPAC recommends to base the LOQ on the standard deviation of the
signal where x = 0.
-* The calculation of a LOQ based on weighted regression is non-standard and
+\item The calculation of a LOQ based on weighted regression is non-standard and
therefore not tested. Feedback is welcome.
}
+}
\examples{
m <- lm(y ~ x, data = massart97ex1)
diff --git a/man/massart97ex1.Rd b/man/massart97ex1.Rd
index d154a9c..c49f416 100644
--- a/man/massart97ex1.Rd
+++ b/man/massart97ex1.Rd
@@ -12,6 +12,9 @@ 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, Chapter 8.
}
+\usage{
+massart97ex1
+}
\description{
Sample dataset from p. 175 to test the package.
}
diff --git a/man/massart97ex3.Rd b/man/massart97ex3.Rd
index 284a435..82d3191 100644
--- a/man/massart97ex3.Rd
+++ b/man/massart97ex3.Rd
@@ -13,6 +13,9 @@ 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, Chapter 8.
}
+\usage{
+massart97ex3
+}
\description{
Sample dataset from p. 188 to test the package.
}
diff --git a/man/rl95_cadmium.Rd b/man/rl95_cadmium.Rd
index 8e0b02c..db6a841 100644
--- a/man/rl95_cadmium.Rd
+++ b/man/rl95_cadmium.Rd
@@ -13,6 +13,9 @@ six calibration standards.
Rocke, David M. und Lorenzato, Stefan (1995) A two-component model
for measurement error in analytical chemistry. Technometrics 37(2), 176-184.
}
+\usage{
+rl95_cadmium
+}
\description{
Dataset reproduced from Table 1 in Rocke and Lorenzato (1995).
}
diff --git a/man/rl95_toluene.Rd b/man/rl95_toluene.Rd
index 1f8836a..2e0f3a5 100644
--- a/man/rl95_toluene.Rd
+++ b/man/rl95_toluene.Rd
@@ -12,6 +12,9 @@ six calibration standards.
Rocke, David M. und Lorenzato, Stefan (1995) A two-component model
for measurement error in analytical chemistry. Technometrics 37(2), 176-184.
}
+\usage{
+rl95_toluene
+}
\description{
Dataset reproduced from Table 4 in Rocke and Lorenzato (1995). The toluene
amount in the calibration samples is given in picograms per 100 µL.
diff --git a/man/utstats14.Rd b/man/utstats14.Rd
index 1b739d4..bb952ff 100644
--- a/man/utstats14.Rd
+++ b/man/utstats14.Rd
@@ -14,6 +14,9 @@ Tutorial website maintained by the Departments of Chemistry, University of
Toronto.
\url{https://sites.chem.utoronto.ca/chemistry/coursenotes/analsci/stats/index.html}
}
+\usage{
+utstats14
+}
\description{
Dataset read into R from
\url{https://sites.chem.utoronto.ca/chemistry/coursenotes/analsci/stats/files/example14.xls}.

Contact - Imprint