aboutsummaryrefslogtreecommitdiff
path: root/vignettes/mkin.Rnw
blob: 22c9c1582317049bd6eab004702d74db5e46e635 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
% $Id: mkin.Rnw 66 2010-09-03 08:50:26Z jranke $
%%\VignetteIndexEntry{Routines for fitting kinetic models with one or more state variables to chemical degradation data}
%%VignetteDepends{FME}
%%\usepackage{Sweave}
\documentclass[12pt,a4paper]{article}
\usepackage{a4wide}
%%\usepackage[lists,heads]{endfloat}
\input{header}
\hypersetup{  
  pdftitle = {mkin - Routines for fitting kinetic models with one or more state variables to chemical degradation data},
  pdfsubject = {Manuscript},
  pdfauthor = {Johannes Ranke},
  colorlinks = {true},
  linkcolor = {blue},
  citecolor = {blue},
  urlcolor = {red},
  hyperindex = {true},
  linktocpage = {true},
}
\SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE}
<<setup, echo = FALSE, results = hide>>=
options(prompt = "R> ")
options(SweaveHooks = list(
  cex = function() par(cex.lab = 1.3, cex.axis = 1.3)))
@
\begin{document}
\title{mkin -\\
Routines for fitting kinetic models with one or more state variables to chemical degradation data}
\author{\textbf{Johannes Ranke} \\[0.5cm]
%EndAName
Eurofins Regulatory AG\\
Weidenweg 15, CH--4310 Rheinfelden, Switzerland\\[0.5cm]
and\\[0.5cm]
University of Bremen\\
}
\maketitle

\begin{abstract}
In the regulatory evaluation of chemical substances like plant protection
products (pesticides), biocides and other chemicals, degradation data play an
important role. For the evaluation of pesticide degradation experiments, 
detailed guidance has been developed, based on nonlinear optimisation. 
The \RR{} add-on package \Rpackage{mkin} implements fitting some of the models
recommended in this guidance from within R and calculates some statistical
measures for data series within one or more compartments, for parent and
metabolites.
\end{abstract}


\thispagestyle{empty} \setcounter{page}{0}

\clearpage

\tableofcontents

\textbf{Key words}: Kinetics, FOCUS, nonlinear optimisation

\section{Introduction}
\label{intro}

Many approaches are possible regarding the evaluation of chemical degradation
data.  The \Rpackage{kinfit} package \citep{pkg:kinfit} in \RR{}
\citep{rcore2012} implements the approach recommended in the kinetics report
provided by the FOrum for Co-ordination of pesticide fate models and their
USe \citep{FOCUS2006, FOCUSkinetics2011} for simple data series for one parent
compound in one compartment.

The \Rpackage{mkin} package \citep{pkg:mkin} extends this approach to data series
with metabolites and more than one compartment and includes the possibility 
for back reactions.

\section{Example}
\label{exam}

In the following, requirements for data formatting are explained. Then the
procedure for fitting the four kinetic models recommended by the FOCUS group
to an example dataset for parent only given in the FOCUS kinetics report is
illustrated.  The explanations are kept rather verbose in order to lower the
barrier for \RR{} newcomers.

\subsection{Data format}

The following listing shows example dataset C from the FOCUS kinetics
report as distributed with the \Rpackage{mkin} package

<<FOCUS_2006_C_data, echo=TRUE, eval=TRUE>>=
library("mkin")
FOCUS_2006_C
@

Note that the data needs to be in the format of a data frame containing a
variable \Robject{name} specifying the observed variable, indicating the
compound name and, if applicable, the compartment, a variable \Robject{time}
containing sampling times, and a numeric variable \Robject{value} specifying
the observed value of the variable. If a further variable \Robject{error} 
is present, this will be used to give different weights to the data points 
(the higher the error, the lower the weight, see the help page of the 
\Robject{modCost} function of the \Rpackage{FME} package \citep{soetaert10}).
Replicate measurements are not recorded in extra columns but simply appended,
leading to multiple occurrences of the sampling times \Robject{time}.

Small to medium size dataset can be conveniently entered directly as \RR{} code
as shown in the following listing

<<data_format, echo=TRUE>>=
example_data <- data.frame(
  name = rep("parent", 9),
  time = c(0, 1, 3, 7, 14, 28, 63, 91, 119),
  value = c(85.1, 57.9, 29.9, 14.6, 9.7, 6.6, 4, 3.9, 0.6)
)
@

\subsection{Model definition}

The next task is to define the model to be fitted to the data. In order to
facilitate this task, a convenience function \Robject{mkinmod} is available.

<<model_definition, echo=TRUE>>=
SFO <- mkinmod(parent = list(type = "SFO"))
SFORB <- mkinmod(parent = list(type = "SFORB"))
SFO_SFO <- mkinmod(
  parent = list(type = "SFO", to = "m1", sink = TRUE),
  m1 = list(type = "SFO"))
SFORB_SFO <- mkinmod(
  parent = list(type = "SFORB", to = "m1", sink = TRUE),
  m1 = list(type = "SFO"))
@

The model definitions given above define sets of linear first-order ordinary
differential equations. In these cases, a coefficient matrix is also returned.

Other models that include time on the right-hand side of the differential 
equation are the first-order multi-compartment (FOMC) model and the
Hockey-Stick (HS) model. At present, these models can only be used only for the
parent compound.

\subsection{Fitting the model}

Then the model parameters should be fitted to the data. The function
\Robject{mkinfit} internally creates a cost function using \Robject{modCost}
from the \Rpackage{FME} package and then produces a fit using \Robject{modFit}
from the same package. In cases of linear first-order differential 
equations, the solution used for calculating the cost function is based
on the fundamental system of the coefficient matrix, as proposed by 
\citet{bates88}.

<<model_fitting, echo=TRUE>>=
SFO.fit <- mkinfit(SFO, FOCUS_2006_C)
summary(SFO.fit)
SFORB.fit <- mkinfit(SFORB, FOCUS_2006_C)
summary(SFORB.fit)
SFO_SFO.fit <- mkinfit(SFO_SFO, FOCUS_2006_D)
summary(SFO_SFO.fit, data=FALSE)
SFORB_SFO.fit <- mkinfit(SFORB_SFO, FOCUS_2006_D)
summary(SFORB_SFO.fit, data=FALSE)
@

\section{Acknowledgements}

This package would not have been written without me being introduced to regulatory
fate modelling of pesticides by Adrian Gurney during my time at Harlan Laboratories Ltd
(formerly RCC Ltd). Parts of the package were written during my employment at Harlan.

\bibliographystyle{plainnat}
\bibliography{references}

\end{document}
% vim: set foldmethod=syntax:

Contact - Imprint