A collection of functions that simplify the process of creating calibration curves.
Project description
ChemCal
Install
pip install ChemCal
How to use
First we generate some data to work with.
# generate training data and sample data
test_data = pd.DataFrame({'concentration': [0.2, 0.05, 0.1, 0.8, 0.6, 0.4], "abs": [0.221, 0.057, 0.119, 0.73, 0.599, 0.383]})
sample_data = pd.DataFrame({'unknown': [0.490, 0.471, 0.484, 0.473, 0.479, 0.492]})
Now, create a CalibrationModel object and pass the predictor and response variables from our dataset as the x and y values respectively.
cal = CalibrationModel(x=test_data['concentration'], y=test_data['abs'])
When we call .fit_ols(), an ordinary least squares regression is fit to
the data and the slope, intercept and values are stored in the object
and can be retrieved by calling .slope
, .intercept
and .r_squared
respectively.
cal.fit_ols()
print(f"Slope: {cal.slope: .3f}" )
print(f"Intercept: {cal.intercept: .3f}" )
print(f"R2: {cal.r_squared: .3f}" )
Slope: 0.904
Intercept: 0.027
R2: 0.998
We can also call the method .linest_stats()
to return a series of
statistics you might expect when using the linest function in excel or
sheets.
cal.linest_stats()
Slope | Intercept | Uncertainty in slope | Uncertainty in intercept | Standard error of regression | F-statistic | Degrees of freedom | Regression sum of squares | Residual sum of squares | |
---|---|---|---|---|---|---|---|---|---|
0 | 0.904411 | 0.027419 | 0.0312 | 0.017178 | 0.020745 | 840.261133 | 4 | 0.361606 | 0.001721 |
Finally, we can calculate an inverse prediction from unknown data and retrieve the uncertainty but calling .inverse_prediction().
pred = cal.inverse_prediction(sample_data['unknown'])
print(pred)
0.5020733029033536 ± 0.031053583676141718
The uncertainty is calculated according to the following expression:
$$ U = {S_{\hat{x}}}_0 * T $$
Where if a single sample is provided:
$$ {S_{\hat{x}}}0 = \frac{S{y/x}}{b} \sqrt{\frac{1}{m} + \frac{1}{n}} $$
Or, if multiple replicate samples are provided:
$$ s_{\hat{x}0}=\frac{1}{b} \sqrt{\frac{s_r^2}{m}+\frac{s{y / x}^2}{n}+\frac{s_{y / x}^2\left(y_0-\bar{y}\right)^2}{b^2 \sum_{i=1}^n\left(x_i-\bar{x}\right)^2}} $$
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.