nls
with the
port
algorithm.fit_LMCurve(values, values.bg, n.components = 3, start_values,
input.dataType = "LM", sample_code = "", sample_ID = "",
LED.power = 36, LED.wavelength = 470, cex.global = 0.8, fit.trace = FALSE,
fit.advanced = FALSE, fit.calcError = FALSE, bg.subtraction = "polynomial",
output.path, output.terminal = TRUE, output.terminaladvanced = TRUE,
output.plot = TRUE, output.plotBG = FALSE, ...)
RLum.Data.Curve
or data.frame
(required): x,y data of measured values (time and counts). See examples.RLum.Data.Curve
or data.frame (optional):
x,y data of measured values (time and counts) for background subtraction.polynomial
, linear
, channel
, see Details). Note:
requires input for values.bg
.output.terminal = TRUE
. If output.terminal = FALSE
no advanced output is possible.xlab
,
xlab
, main
, log
.output.path
is set.list
objectnls
object ($fit
) for which generic R functions are
provided, e.g. summary, confint, profile.
For more details, see nls.
(b) a data.frame containing the summarised parameters including the
error ($output.table
).
(c) a matrix containing the values for the component to sum
contribution plot ($component.contribution.matrix
).
Matrix structure:
Column 1 and 2: time and rev(time)
values
Additional columns are used for the components, two for each component,
containing I0 and n0values.bg
).
polynomial
: default method.
A polynomial function is fitted using glm and the resulting function
is used for background subtraction:
$$y = a*x^4 + b*x^3 + c*x^2 + d*x + e$$
linear
: a linear function is fitted using glm and the
resulting function is used for background subtraction:
$$y = a*x + b$$
channel
: the measured background signal is subtracted channelwise
from the measured signal.
Start values
The choice of the initial parameters for the nls
-fitting is a crucial point
and the fitting procedure may mainly fail due to ill chosen start parameters.
Here, three options are provided:
(a) If no start values (start_values
) are provided by the user,
a cheap guess is made by using the detrapping values found by Jain et al. (2003)
for quartz for a maximum of 7 components. Based on these values,
the pseudo start parameters xm and Im are recalculated for the given data set.
In all cases, the fitting starts with the ultra-fast component and
(depending on n.components
) steps through the following values.
If no fit could be achieved, an error plot (for output.plot = TRUE
)
with the pseudo curve (based on the pseudo start parameters) is provided.
This may give the opportunity to identify appropriate start parameters
visually.
(b) If start values are provided, the function works like a simple
nls
fitting approach.
(c) If no start parameters are provided and the option
fit.advanced = TRUE
is chosen, an advanced start paramter
estimation is applied using a stochastical attempt.
Therefore, the recalculated start parameters (a)
are used to construct a normal distribution.
The start parameters are then sampled randomly from this distribution.
A maximum of 100 attempts will be made. Note:
This process may be time consuming.
Goodness of fit
The goodness of the fit is given by a pseudoR^2 value
(pseudo coefficient of determination).
According to Lave (1970), the value is calculated as:
$$pseudoR^2 = 1 - RSS/TSS$$
where $RSS = Residual~Sum~of~Squares$
and $TSS = Total~Sum~of~Squares$
Error of fitted component parameters
The 1-sigma error for the components is calculated using the function
confint. Due to considerable calculation time, this option is
deactived by default. In addition, the error for the components
can be estimated by using internal R functions like summary.
See the nls help page for more information.
For more details on the nonlinear regression in R,
see Ritz & Streibig (2008).fit_CWCurve
, plot
, nls
##(1) fit LM data without background subtraction
data(ExampleData.FittingLM, envir = environment())
fit_LMCurve(values = values.curve, n.components = 3, log = "x")
##(2) fit LM data with background subtraction and export as JPEG
## -alter file path for your preferred system
##jpeg(file = "~/Desktop/Fit_Output\\%03d.jpg", quality = 100,
## height = 3000, width = 3000, res = 300)
data(ExampleData.FittingLM, envir = environment())
fit_LMCurve(values = values.curve, values.bg = values.curveBG,
n.components = 2, log = "x", output.plotBG = TRUE)
##dev.off()
##(3) fit LM data with manual start parameters
data(ExampleData.FittingLM, envir = environment())
fit_LMCurve(values = values.curve,
values.bg = values.curveBG,
n.components = 3,
log = "x",
start_values = data.frame(Im = c(170,25,400), xm = c(56,200,1500)))
Run the code above in your browser using DataLab