| Title: | Auditing and Exploring Dielectric Measurements of Water |
| Version: | 0.2.0 |
| Description: | Imports, audits, compares and visualises dielectric measurements of water under fuel contamination and ageing. Provides descriptive summaries, frequency-response comparisons, confidence intervals based on physical-unit means, and training and testing splits that keep observations from the same experimental unit together. Experimental-unit safeguards address pseudoreplication concerns discussed by Hurlbert (1984) <doi:10.2307/1942661>. Grouped splitting is consistent with the structured-data validation principles discussed by Roberts et al. (2017) <doi:10.1111/ecog.02881>. Student t confidence intervals use the standard mean-interval formula described in the NIST/SEMATECH e-Handbook of Statistical Methods https://www.itl.nist.gov/div898/handbook/eda/section3/eda352.htm. Experimental-unit identifiers are supplied by the user and are not inferred from material labels. This research prototype does not provide validated contaminant prediction or causal inference. |
| License: | MIT + file LICENSE |
| Encoding: | UTF-8 |
| Depends: | R (≥ 4.1.0) |
| Imports: | readxl, ggplot2, dplyr, tidyr, rlang, stats |
| Suggests: | testthat |
| Config/testthat/edition: | 3 |
| RoxygenNote: | 7.3.3 |
| Config/build/clean-inst-doc: | FALSE |
| NeedsCompilation: | no |
| Packaged: | 2026-10-23 01:25:21 UTC; muhammadzahirkhan |
| Author: | Muhammad Zahir Khan [aut, cre], Luqman Abidoye [aut] |
| Maintainer: | Muhammad Zahir Khan <zahirstat007@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-11-06 12:40:14 UTC |
Analyse descriptive dielectric ageing trajectories
Description
Summarises dielectric responses across ageing times at a fixed frequency and within the same material. Does not assume repeated measurements of one physical sample.
Usage
analyse_ageing_trajectories(
data,
outcome = "permittivity",
frequency_hz,
material = NULL
)
Arguments
data |
Dielectric measurement data frame. |
outcome |
Numeric dielectric response column. |
frequency_hz |
Frequency to analyse. |
material |
Optional material label to select. |
Value
Data frame containing ageing time, mean response, number of measurements and descriptive changes.
Summarise dielectric frequency responses
Description
Provides descriptive summaries of dielectric measurements across experimental conditions and frequencies. Rows with unverified or conflicting water-medium labels are excluded from the primary analysis. No independent-sample inference is performed.
Usage
analyse_frequency_response(data, min_frequencies = 5L)
Arguments
data |
A dielectric dataset returned by read_dielectric(). |
min_frequencies |
Minimum distinct frequencies per curve. |
Value
A tibble containing descriptive curve summaries.
Audit dielectric data without inventing physical sample IDs
Description
Audit dielectric data without inventing physical sample IDs
Usage
audit_dielectric(data)
Arguments
data |
Output from read_dielectric(). |
Value
List containing summary, missingness, ranges, duplicated keys and warnings.
Audit experimental-unit information
Description
Summarises measurements by material label and reports whether physical sample identities can be established. Material names are not assumed to identify physical samples.
Usage
audit_experimental_units(data, sample_id = NULL)
Arguments
data |
A dielectric measurement data frame. |
sample_id |
Optional column name containing genuine physical sample identifiers. |
Value
A data frame summarising material labels, ageing times, frequencies and sample identity status.
Examples
# Synthetic demonstration; not experimental observations.
x <- data.frame(
material = rep(c('Water A', 'Water B'), each = 2),
age_hours = c(0, 0, 0, 0),
frequency_hz = c(10, 100, 10, 100),
sample_id = c('A1', 'A1', 'B1', 'B1')
)
audit_experimental_units(x)
audit_experimental_units(x, sample_id = 'sample_id')
Audit observation exclusions for frequency-response analysis
Description
Classifies every observation according to its eligibility for the primary descriptive frequency-response analysis. Material-label agreement is a coding-consistency check, not independent verification of the experimental medium.
Usage
audit_frequency_exclusions(data)
Arguments
data |
A dielectric dataset returned by read_dielectric(). |
Value
A data frame containing the original observations, their row identifiers, expected water codes, medium-label status, and analysis inclusion decisions.
Compare dielectric measurements at two ageing times
Description
Matches measurements by fuel, water medium, concentration and frequency. Returns descriptive ratios between two ageing times. Ratios do not establish causal effects.
Usage
compare_ageing(data, age_start, age_end)
Arguments
data |
A dielectric measurement data frame. |
age_start |
Starting ageing time in hours. |
age_end |
Ending ageing time in hours. |
Value
A data frame containing matched measurements and ratios for permittivity, dissipation factor and impedance.
Compare dielectric curves at exactly shared frequencies
Description
Uses only frequencies observed in every material-age group. Does not interpolate, extrapolate, or infer sample identity. At least two shared frequencies are required for AUC.
Usage
compare_common_frequency_curves(data, outcome = "permittivity")
Arguments
data |
Dielectric measurement data frame. |
outcome |
Numeric response column name. |
Value
A list with shared frequencies, aligned responses, and curve-level AUC summaries when possible.
Compare Matched Dielectric Fingerprints
Description
Compare petrol and diesel at identical experimental conditions using descriptive response ratios.
Usage
compare_dielectric_fingerprints(
data,
response = "permittivity",
age_hours = 0,
max_concentration = 20,
exclude_conflicts = TRUE
)
Arguments
data |
Data returned by read_dielectric(). |
response |
One of permittivity, dissipation_factor, or impedance. |
age_hours |
Measurement age in hours. |
max_concentration |
Maximum concentration percentage. |
exclude_conflicts |
Exclude water-code mismatches. |
Value
A list containing matched results, summary, and duplicate-condition diagnostics.
Estimate confidence intervals using independent physical units
Description
Computes a Student t confidence interval for the mean response at a single experimental condition and frequency. Multiple measurements from one physical unit are averaged first. Physical sample identifiers must be externally verified.
Usage
estimate_dielectric_ci(
data,
outcome = "permittivity",
sample_id,
conf_level = 0.95
)
Arguments
data |
A data frame containing dielectric measurements. |
outcome |
Numeric outcome column name. |
sample_id |
Column identifying independent physical units. |
conf_level |
Confidence level between zero and one. |
Value
One-row data frame containing the mean, interval, and number of independent physical units.
Evaluate regression predictions
Description
Calculates descriptive prediction errors. Does not establish external-data independence.
Usage
evaluate_external_predictions(observed, predicted)
Arguments
observed |
Numeric observed responses. |
predicted |
Numeric predicted responses. |
Value
One-row data frame with n, MAE, RMSE and bias.
Plot dielectric frequency-response curves
Description
Produces descriptive frequency-response curves by material and recorded ageing time. Curves do not establish independent physical replication or causal effects.
Usage
plot_fingerprints(
data,
response = "permittivity",
title = "Descriptive dielectric frequency-response curves",
subtitle = "Descriptive measurements; experimental independence must be verified",
show_legend = TRUE
)
Arguments
data |
Data frame containing dielectric measurements. |
response |
One of permittivity, dissipation_factor, impedance. |
title |
Optional plot title. |
subtitle |
Optional plot subtitle. |
show_legend |
Whether to display material and ageing legends. |
Value
A ggplot object.
Examples
# Fully synthetic values, not experimental observations.
x <- expand.grid(
material = c('Water A', 'Water B'),
age_hours = c(0, 24),
frequency_hz = c(10, 100, 1000, 10000)
)
x$permittivity <- 80 -
4 * log10(x$frequency_hz) -
0.1 * x$age_hours -
ifelse(x$material == 'Water B', 3, 0)
plot_fingerprints(
x,
response = 'permittivity',
title = 'Synthetic dielectric responses',
subtitle = 'Illustrative data only'
)
Import dielectric measurements from an Excel workbook
Description
Supports standard column names, explicit header mappings, and the two original positional worksheet layouts. No experimental classifications or physical sample IDs are inferred.
Usage
read_dielectric(
path,
sheet = NULL,
column_map = NULL,
layout = c("auto", "standard", "legacy")
)
Arguments
path |
Path to an Excel workbook. |
sheet |
Worksheet name or index. NULL selects All extract_mean when present, otherwise the first worksheet. |
column_map |
Named character vector mapping standard column names to workbook headers, for example c(frequency_hz = 'Frequency', permittivity = 'Epsilon'). |
layout |
One of auto, standard, or legacy. Auto first accepts standard headers, then falls back to known legacy sheet layouts. |
Details
Standard imports require material, age_hours, frequency_hz, permittivity, dissipation_factor, and impedance. Optional columns include fuel, water, concentration_pct and sample_id. Additional columns are retained in standard imports. Frequencies must already be expressed in Hz and ages in hours; renaming columns does not convert units. Analysis functions may require additional classification columns. The COded legacy layout does not supply fuel or water labels.
Value
A data frame with standardised column names.
Examples
path <- system.file('extdata', 'synthetic_import.xlsx',
package = 'DielectricWaterR')
x <- read_dielectric(path, sheet = 'Measurements', layout = 'standard')
head(x)
Split measurements by verified experimental unit
Description
Keeps every observation belonging to the same physical experimental unit in either training or testing data. Identifiers must be supplied and independently verified. This function cannot verify physical sample provenance.
Usage
split_by_experimental_unit(data, unit_id, train_prop = 0.8, seed = NULL)
Arguments
data |
Data frame containing measurements. |
unit_id |
Name of verified experimental-unit column. |
train_prop |
Proportion of unique units for training. |
seed |
Optional non-negative integer seed. NULL uses and advances the caller's random-number state. An explicit seed gives reproducible results and restores the caller's random-number state. |
Value
List containing training data, testing data, and a summary of the split.
Summarise dielectric frequency-response curves
Description
Calculates descriptive curve features using the trapezoidal rule over log10(frequency). Curves are defined by material and ageing time. These summaries do not establish independent replication.
Usage
summarise_dielectric_curves(data, outcome = "permittivity")
Arguments
data |
Dielectric measurement data frame. |
outcome |
Name of a numeric response column. |
Value
A data frame containing curve-level summaries.
Summarise dielectric measurements without assuming independence
Description
Calculates descriptive statistics within experimental conditions. Standard errors and confidence intervals are deliberately not calculated because physical sample independence is not established.
Usage
summarise_dielectric_variability(
data,
outcome = "permittivity",
group_vars = c("fuel", "water", "concentration_pct", "age_hours")
)
Arguments
data |
A dielectric measurement data frame. |
outcome |
Name of a numeric outcome column. |
group_vars |
Names of grouping columns. |
Value
A data frame of descriptive summaries.